code-coordinator 0.5.171__tar.gz → 0.5.173__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 (882) hide show
  1. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/client.py +30 -0
  5. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/server.py +263 -1
  6. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive.py +120 -0
  7. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive_queue.py +28 -6
  8. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/OPERATING_GOTCHAS.md +17 -0
  9. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard.py +234 -0
  10. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_fixture.py +114 -0
  11. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive.py +72 -1
  12. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_queue.py +42 -2
  13. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/acceptance-web.yml +0 -0
  23. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.gitignore +0 -0
  29. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/GOAL.md +0 -0
  31. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/LICENSE +0 -0
  32. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/README.md +0 -0
  34. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/config.py +0 -0
  96. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/config_reload.py +0 -0
  97. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  106. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  108. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  109. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/db.py +0 -0
  207. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive_state.py +0 -0
  232. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/events.py +0 -0
  233. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/failure_class.py +0 -0
  234. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/filelock.py +0 -0
  235. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/fleet_config_health.py +0 -0
  236. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/freshness.py +0 -0
  237. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_a.py +0 -0
  238. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_b.py +0 -0
  239. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_snapshot.py +0 -0
  240. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gates.py +0 -0
  241. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/github_ops.py +0 -0
  242. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/goal.py +0 -0
  243. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/graph_health.py +0 -0
  244. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/__init__.py +0 -0
  245. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/aggregate.py +0 -0
  246. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/__init__.py +0 -0
  247. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/agent_install.py +0 -0
  248. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/cargo_targets.py +0 -0
  249. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/claude_binary.py +0 -0
  250. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/deploy_lane_facts.py +0 -0
  251. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/disk.py +0 -0
  252. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_board.py +0 -0
  253. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  254. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_phantom.py +0 -0
  255. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_unit_drift.py +0 -0
  256. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/graph.py +0 -0
  257. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/graphify_cli.py +0 -0
  258. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/index_lock.py +0 -0
  259. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/plan_usage.py +0 -0
  260. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/repo_state.py +0 -0
  261. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/spawned_coord.py +0 -0
  262. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/timer_active.py +0 -0
  263. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/toolchain.py +0 -0
  264. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/unit_drift.py +0 -0
  265. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/unit_enablement.py +0 -0
  266. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/worktrees.py +0 -0
  267. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/cli.py +0 -0
  268. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/context.py +0 -0
  269. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/fleet_snapshot.py +0 -0
  270. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/models.py +0 -0
  271. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/pypi.py +0 -0
  272. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/registry.py +0 -0
  273. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/render.py +0 -0
  274. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/units.py +0 -0
  275. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/hooks.py +0 -0
  276. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/housekeeping.py +0 -0
  277. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/interactive.py +0 -0
  278. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/issue_store.py +0 -0
  279. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/liveness_auditor.py +0 -0
  280. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/machine_pause.py +0 -0
  281. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/merge_queue.py +0 -0
  282. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_chat.py +0 -0
  283. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_dispatch.py +0 -0
  284. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_gate.py +0 -0
  285. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_order.py +0 -0
  286. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/mock_author.py +0 -0
  287. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/models.py +0 -0
  288. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/network.py +0 -0
  289. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/new_issue_chat.py +0 -0
  290. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/__init__.py +0 -0
  291. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/baseline.py +0 -0
  292. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/cli.py +0 -0
  293. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/collect.py +0 -0
  294. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/digest.py +0 -0
  295. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/models.py +0 -0
  296. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/predicate.py +0 -0
  297. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/service.py +0 -0
  298. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/store.py +0 -0
  299. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/transport.py +0 -0
  300. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notify.py +0 -0
  301. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/openapi.py +0 -0
  302. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/overlap_fence.py +0 -0
  303. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/overlap_predict.py +0 -0
  304. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/parentage.py +0 -0
  305. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/parentage_github.py +0 -0
  306. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/pipeline.py +0 -0
  307. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/plan_parser.py +0 -0
  308. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/plans.py +0 -0
  309. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/platform_paths.py +0 -0
  310. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_bridge.py +0 -0
  311. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_store.py +0 -0
  312. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_sync.py +0 -0
  313. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/pr_body_lint.py +0 -0
  314. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/prereqs.py +0 -0
  315. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/progress.py +0 -0
  316. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/__init__.py +0 -0
  317. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/base.py +0 -0
  318. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/claude.py +0 -0
  319. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/claude_pty.py +0 -0
  320. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/opencode.py +0 -0
  321. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/queue_diagnose.py +0 -0
  322. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reconcile.py +0 -0
  323. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reconcile_tick.py +0 -0
  324. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/refine_chat.py +0 -0
  325. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_cordon.py +0 -0
  326. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_propagate.py +0 -0
  327. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_verify.py +0 -0
  328. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_window.py +0 -0
  329. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/repo_edit.py +0 -0
  330. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/repo_onboard.py +0 -0
  331. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reports.py +0 -0
  332. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/revalidate.py +0 -0
  333. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/review.py +0 -0
  334. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/scorecard.py +0 -0
  335. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/self_health.py +0 -0
  336. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/serve_app.py +0 -0
  337. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  338. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  339. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  340. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  341. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  342. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/portal-followup/SKILL.md +0 -0
  343. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  344. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  345. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/update-issue/SKILL.md +0 -0
  346. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/smoke.py +0 -0
  347. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/spend_ceiling.py +0 -0
  348. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/split_work.py +0 -0
  349. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/stage_projection.py +0 -0
  350. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/state.py +0 -0
  351. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_author.py +0 -0
  352. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_chat.py +0 -0
  353. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_orchestrator.py +0 -0
  354. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_report.py +0 -0
  355. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/tui_release.py +0 -0
  356. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage.py +0 -0
  357. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage_limits.py +0 -0
  358. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage_rollup.py +0 -0
  359. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/worker_events.py +0 -0
  360. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coordinator.example.yml +0 -0
  361. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-agent.service +0 -0
  362. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.service +0 -0
  363. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.sh +0 -0
  364. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.timer +0 -0
  365. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-drive-queue.service +0 -0
  366. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-drive-queue.timer +0 -0
  367. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-notify.service +0 -0
  368. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-notify.timer +0 -0
  369. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-propagate.service +0 -0
  370. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-propagate.timer +0 -0
  371. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-window.service +0 -0
  372. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-window.timer +0 -0
  373. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-serve.service +0 -0
  374. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.service +0 -0
  375. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.sh +0 -0
  376. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.timer +0 -0
  377. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-rollback.sh +0 -0
  378. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web.service +0 -0
  379. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/node-shim.sh +0 -0
  380. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ADR_COORD_WEB_DIST.md +0 -0
  381. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/AGENT_OPERATIONS.md +0 -0
  382. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ARCHITECTURE.md +0 -0
  383. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ARCH_SECURITY_GATES.md +0 -0
  384. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/COCKPIT.md +0 -0
  385. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CONTROL_CENTER.md +0 -0
  386. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/COST_DISCIPLINE.md +0 -0
  387. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CROSS_PLATFORM.md +0 -0
  388. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CUSTOMER_PORTAL.md +0 -0
  389. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/DRIVE_QUEUE.md +0 -0
  390. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/EPHEMERAL_WORKERS.md +0 -0
  391. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/FORGE_MIGRATION.md +0 -0
  392. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/GRAPHIFY_SETUP.md +0 -0
  393. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ISSUE_GUIDANCE.md +0 -0
  394. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/MAC_MINI.md +0 -0
  395. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  396. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/NOTIFIER.md +0 -0
  397. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/OPENCODE_VERIFICATION.md +0 -0
  398. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ORACLE_LOOP.md +0 -0
  399. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PHONE_WEBAPP.md +0 -0
  400. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PIPELINE_V2.md +0 -0
  401. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PLATFORM_EVOLUTION.md +0 -0
  402. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/SECOND_BACKEND.md +0 -0
  403. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/STORE_SERVICE.md +0 -0
  404. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  405. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/WEB_CONTROL_CENTER.md +0 -0
  406. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/WSL_WINDOWS_WORKER.md +0 -0
  407. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/README.md +0 -0
  408. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/_tokens.css +0 -0
  409. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/issue-detail.html +0 -0
  410. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/pipeline-narrow.html +0 -0
  411. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/pipeline-wide.html +0 -0
  412. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/graphify-out/.gitignore +0 -0
  413. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/install-agent.sh +0 -0
  414. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/pyproject.toml +0 -0
  415. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/audit_review_verdict_overrides.py +0 -0
  416. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  417. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/build-worker-image.sh +0 -0
  418. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/coordinator-machine.py +0 -0
  419. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/epic-down.sh +0 -0
  420. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/epic-up.sh +0 -0
  421. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/preflight.sh +0 -0
  422. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/provision-worker.sh +0 -0
  423. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  424. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  425. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/verify-github-token.sh +0 -0
  426. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/codegen.py +0 -0
  427. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/coord-test-runner.sh +0 -0
  428. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/drive-batch.sh +0 -0
  429. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/gen_board_fixture.py +0 -0
  430. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/next_release_tag.py +0 -0
  431. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/run_tests_in_populated_home.sh +0 -0
  432. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/run_tests_without_gh.sh +0 -0
  433. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/smoke_437_interactive.py +0 -0
  434. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_878_review_capture.py +0 -0
  435. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_release_published.py +0 -0
  436. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_release_wheel.py +0 -0
  437. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/setup.cfg +0 -0
  438. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/SMOKE_SET.md +0 -0
  439. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/__init__.py +0 -0
  440. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  441. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/contract.md +0 -0
  442. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/manifest.yml +0 -0
  443. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  444. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  445. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  446. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  447. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/conftest.py +0 -0
  448. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/contract.md +0 -0
  449. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/manifest.yml +0 -0
  450. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  451. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  452. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/contract.md +0 -0
  453. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/manifest.yml +0 -0
  454. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  455. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  456. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  457. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  458. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  459. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  460. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  461. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  462. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  463. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  464. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/contract.md +0 -0
  465. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  466. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  467. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/manifest.yml +0 -0
  468. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  469. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/tsconfig.json +0 -0
  470. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  471. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  472. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/contract.md +0 -0
  473. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  474. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/manifest.yml +0 -0
  475. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  476. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  477. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  478. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  479. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  480. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  481. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  482. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  483. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  484. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  485. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  486. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/conftest.py +0 -0
  487. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/board-pipeline-basic.json +0 -0
  488. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  489. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  490. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  491. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  492. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/all_pass.json +0 -0
  493. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  494. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/mixed_fail.json +0 -0
  495. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  496. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  497. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/skip.json +0 -0
  498. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/truncated.json +0 -0
  499. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  500. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  501. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  502. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  503. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  504. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  505. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  506. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  507. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_acceptance.py +0 -0
  508. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_acceptance_drivers.py +0 -0
  509. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent.py +0 -0
  510. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_api_error.py +0 -0
  511. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_app.py +0 -0
  512. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_branch_base.py +0 -0
  513. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_branch_capture.py +0 -0
  514. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_config_free_1712.py +0 -0
  515. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_deploy_units_endpoint.py +0 -0
  516. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_dirty_worktree.py +0 -0
  517. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  518. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_graph_self_heal.py +0 -0
  519. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_health_h3.py +0 -0
  520. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_idle_restart.py +0 -0
  521. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_push_failure.py +0 -0
  522. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_reap.py +0 -0
  523. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_repos_and_pull.py +0 -0
  524. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_restart_services_endpoint.py +0 -0
  525. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_skills_self_heal.py +0 -0
  526. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_startup_diagnostics.py +0 -0
  527. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_update.py +0 -0
  528. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_update_bluegreen.py +0 -0
  529. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_usage_limit.py +0 -0
  530. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_zero_commit.py +0 -0
  531. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ambient_home_isolation.py +0 -0
  532. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_approve_reject_plan.py +0 -0
  533. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_approve_usage_gate.py +0 -0
  534. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_assignment_already_recorded_daemon.py +0 -0
  535. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_log.py +0 -0
  536. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_outcome.py +0 -0
  537. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_query.py +0 -0
  538. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_auto_loop.py +0 -0
  539. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_auto_release_publish_2035.py +0 -0
  540. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_base_checkout_restore.py +0 -0
  541. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_block_log.py +0 -0
  542. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_cap_762.py +0 -0
  543. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_fixture.py +0 -0
  544. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_read_path.py +0 -0
  545. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_service.py +0 -0
  546. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_state.py +0 -0
  547. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_wire.py +0 -0
  548. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_brain.py +0 -0
  549. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_branch_model.py +0 -0
  550. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_bug_intake.py +0 -0
  551. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_build_worker_image_env_update.py +0 -0
  552. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cargo_cache.py +0 -0
  553. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_acceptance_gate_1950.py +0 -0
  554. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_parity_2091.py +0 -0
  555. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_store.py +0 -0
  556. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_claim.py +0 -0
  557. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_acceptance.py +0 -0
  558. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign.py +0 -0
  559. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  560. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_interactive_remote.py +0 -0
  561. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_provider.py +0 -0
  562. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  563. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_audit.py +0 -0
  564. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_chat_continue.py +0 -0
  565. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_decide.py +0 -0
  566. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_config_provenance.py +0 -0
  567. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_graph.py +0 -0
  568. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_self.py +0 -0
  569. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor.py +0 -0
  570. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor_config_free_1801.py +0 -0
  571. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  572. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_drive.py +0 -0
  573. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_drive_queue.py +0 -0
  574. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_escalate.py +0 -0
  575. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_fix_headless_review.py +0 -0
  576. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_gate_a.py +0 -0
  577. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_install_drift.py +0 -0
  578. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_install_skills.py +0 -0
  579. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_issue_create_label.py +0 -0
  580. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_issue_reopen.py +0 -0
  581. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_merge.py +0 -0
  582. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_assign.py +0 -0
  583. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_capture.py +0 -0
  584. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_chat_add_child.py +0 -0
  585. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_dispatch.py +0 -0
  586. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_gate_b.py +0 -0
  587. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_gate_c.py +0 -0
  588. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_order.py +0 -0
  589. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  590. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_ship.py +0 -0
  591. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_network.py +0 -0
  592. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_new_issue_chat.py +0 -0
  593. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_plans.py +0 -0
  594. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_portal.py +0 -0
  595. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_pull_artifact.py +0 -0
  596. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_queue.py +0 -0
  597. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_reattach_sessions.py +0 -0
  598. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_refine_board.py +0 -0
  599. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_preflight.py +0 -0
  600. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_propagate.py +0 -0
  601. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_window.py +0 -0
  602. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_repo_2220.py +0 -0
  603. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_scorecard.py +0 -0
  604. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_set_review_findings.py +0 -0
  605. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_advisory_terminal.py +0 -0
  606. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_merge_queue.py +0 -0
  607. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_provider.py +0 -0
  608. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_review_finalizing.py +0 -0
  609. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_test_failed_tag.py +0 -0
  610. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_usage_limit.py +0 -0
  611. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_sync_comments_873.py +0 -0
  612. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_test_plan.py +0 -0
  613. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_track.py +0 -0
  614. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_tui_update.py +0 -0
  615. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_wait.py +0 -0
  616. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_client_base_install.py +0 -0
  617. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_comments.py +0 -0
  618. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_completion_summary.py +0 -0
  619. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config.py +0 -0
  620. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_acceptance.py +0 -0
  621. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_audit.py +0 -0
  622. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_pricing.py +0 -0
  623. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  624. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_usage_gate.py +0 -0
  625. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_conflict_fix.py +0 -0
  626. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_conflict_fix_semantic.py +0 -0
  627. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test.py +0 -0
  628. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_baseline.py +0 -0
  629. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_populated_home.py +0 -0
  630. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_routing.py +0 -0
  631. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_toolchain.py +0 -0
  632. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_terminal.py +0 -0
  636. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_terminal_live.py +0 -0
  637. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_db.py +0 -0
  638. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dead_end.py +0 -0
  639. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_db_backup.py +0 -0
  640. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_web_dist.py +0 -0
  641. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_web_rollback.py +0 -0
  642. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_drive_queue_unit.py +0 -0
  643. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_manifest.py +0 -0
  644. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_units_lane.py +0 -0
  645. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_web_unit.py +0 -0
  646. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deps.py +0 -0
  647. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_diagnose.py +0 -0
  648. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dispatch.py +0 -0
  649. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dispatch_target_validation.py +0 -0
  650. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dist_name.py +0 -0
  651. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_done_housekeeping.py +0 -0
  652. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_state.py +0 -0
  653. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_tmux.py +0 -0
  654. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_capability_detection.py +0 -0
  655. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  656. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_image_provenance.py +0 -0
  657. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_errors.py +0 -0
  658. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_events.py +0 -0
  659. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_failure_class.py +0 -0
  660. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_filelock.py +0 -0
  661. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  662. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fix_of_force_override.py +0 -0
  663. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_config_health.py +0 -0
  664. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_health_probes.py +0 -0
  665. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_health_snapshot.py +0 -0
  666. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_freshness.py +0 -0
  667. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_a.py +0 -0
  668. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_b.py +0 -0
  669. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_snapshot_staleness.py +0 -0
  670. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gates.py +0 -0
  671. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  672. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_generated_types_fixture.py +0 -0
  673. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_github_ops.py +0 -0
  674. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_goal.py +0 -0
  675. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_graph_health.py +0 -0
  676. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_graph_selfheal_absent_2237.py +0 -0
  677. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_handoff.py +0 -0
  678. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_checks.py +0 -0
  679. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_cli.py +0 -0
  680. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_cli_graph.py +0 -0
  681. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_config.py +0 -0
  682. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_context.py +0 -0
  683. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_deploy_lane_facts.py +0 -0
  684. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_incident_regression.py +0 -0
  685. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_pypi.py +0 -0
  686. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_registry.py +0 -0
  687. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_timer_active.py +0 -0
  688. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_toolchain.py +0 -0
  689. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_unit_drift.py +0 -0
  690. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_unit_enablement.py +0 -0
  691. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_hooks.py +0 -0
  692. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_human_attended_437.py +0 -0
  693. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_init.py +0 -0
  694. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_integration.py +0 -0
  695. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_briefing_echo.py +0 -0
  696. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_prefill_state.py +0 -0
  697. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_session_relaunch.py +0 -0
  698. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_test_verdict_backstop.py +0 -0
  699. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_token_attribution.py +0 -0
  700. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_worktree.py +0 -0
  701. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_issue_store_seam.py +0 -0
  702. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_liveness_auditor.py +0 -0
  703. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_liveness_notify.py +0 -0
  704. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_machine_pause.py +0 -0
  705. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_merge_queue.py +0 -0
  706. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_merge_verify.py +0 -0
  707. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_chat.py +0 -0
  708. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_dispatch.py +0 -0
  709. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_gate.py +0 -0
  710. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_order.py +0 -0
  711. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_seam.py +0 -0
  712. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_mock_author.py +0 -0
  713. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_model_tiering.py +0 -0
  714. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_models.py +0 -0
  715. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_models_config_labels.py +0 -0
  716. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_needs_attention.py +0 -0
  717. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_network.py +0 -0
  718. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_new_issue_chat.py +0 -0
  719. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_next_release_tag.py +0 -0
  720. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_no_direct_gh_calls.py +0 -0
  721. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_node_shim.py +0 -0
  722. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_baseline.py +0 -0
  723. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_cli.py +0 -0
  724. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_collect.py +0 -0
  725. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_config.py +0 -0
  726. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_drive_seam.py +0 -0
  727. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_isolation.py +0 -0
  728. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_predicate.py +0 -0
  729. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_quiet_hours.py +0 -0
  730. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_service.py +0 -0
  731. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notify.py +0 -0
  732. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notify_drain.py +0 -0
  733. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_openapi.py +0 -0
  734. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_operational_defaults.py +0 -0
  735. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_overlap_fence.py +0 -0
  736. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_overlap_predict.py +0 -0
  737. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_packaged_deploy_units.py +0 -0
  738. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_parentage.py +0 -0
  739. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_paste_landed.py +0 -0
  740. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_pipeline.py +0 -0
  741. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_approve_plan_command.py +0 -0
  742. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_pr_command.py +0 -0
  743. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_review_command.py +0 -0
  744. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_only.py +0 -0
  745. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_parser.py +0 -0
  746. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_platform_paths.py +0 -0
  747. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_bridge.py +0 -0
  748. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_config.py +0 -0
  749. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_sync.py +0 -0
  750. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_pr_body_lint.py +0 -0
  751. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_prereqs.py +0 -0
  752. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_production_db_guard.py +0 -0
  753. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_progress.py +0 -0
  754. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_provider_seam.py +0 -0
  755. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers.py +0 -0
  756. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers_config_labels.py +0 -0
  757. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers_pty.py +0 -0
  758. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_quiet_hours.py +0 -0
  759. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_quiet_hours_store_2146.py +0 -0
  760. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reap_merged_sessions.py +0 -0
  761. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reap_stale_interactive_tick.py +0 -0
  762. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile.py +0 -0
  763. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_branch.py +0 -0
  764. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_completions.py +0 -0
  765. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_merges.py +0 -0
  766. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_no_agent_record.py +0 -0
  767. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_tick.py +0 -0
  768. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_usage_limit_done.py +0 -0
  769. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_refine_chat.py +0 -0
  770. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_2101.py +0 -0
  771. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  772. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_deadlock_2240.py +0 -0
  773. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_propagate.py +0 -0
  774. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_unified_1242.py +0 -0
  775. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_verify.py +0 -0
  776. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_window.py +0 -0
  777. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_remote_auto_prune.py +0 -0
  778. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_remote_interactive_reaper.py +0 -0
  779. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_edit_2220.py +0 -0
  780. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_graph_fleet_2237.py +0 -0
  781. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_onboard_2220.py +0 -0
  782. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_report_result_push.py +0 -0
  783. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reports.py +0 -0
  784. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry.py +0 -0
  785. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry_advisory_1606.py +0 -0
  786. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry_type_1636.py +0 -0
  787. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_revalidate.py +0 -0
  788. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review.py +0 -0
  789. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_end_review_without_verdict.py +0 -0
  790. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_parse_failure_diagnostic.py +0 -0
  791. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_reaffirm.py +0 -0
  792. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_state.py +0 -0
  793. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_backstop.py +0 -0
  794. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_override_audit.py +0 -0
  795. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_relay.py +0 -0
  796. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_zero_commits.py +0 -0
  797. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_scoped_review_wiring.py +0 -0
  798. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_scorecard.py +0 -0
  799. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_self_health.py +0 -0
  800. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_serve.py +0 -0
  801. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_serve_app_board_trim.py +0 -0
  802. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_session.py +0 -0
  803. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_slice_issue_attribution.py +0 -0
  804. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke.py +0 -0
  805. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke_live_checkout_restore.py +0 -0
  806. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke_workflow.py +0 -0
  807. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_spend_ceiling.py +0 -0
  808. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_spend_ceiling_coordinator.py +0 -0
  809. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_split.py +0 -0
  810. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_split_work.py +0 -0
  811. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stage_projection.py +0 -0
  812. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stalled_pipeline.py +0 -0
  813. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_state.py +0 -0
  814. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_state_review_findings_daemon.py +0 -0
  815. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_status_fleet_footer.py +0 -0
  816. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stop_1567.py +0 -0
  817. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stuck.py +0 -0
  818. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_terminal_command.py +0 -0
  819. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_author.py +0 -0
  820. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_chat.py +0 -0
  821. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_orchestrator.py +0 -0
  822. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_report.py +0 -0
  823. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_verdict_parsing.py +0 -0
  824. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_verdict_transcript_floor.py +0 -0
  825. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_board_audit.py +0 -0
  826. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_config_load_1080.py +0 -0
  827. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_daemon_routing_906.py +0 -0
  828. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_tmux_host.py +0 -0
  829. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_tmux_session.py +0 -0
  830. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_transcript_floor.py +0 -0
  831. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage.py +0 -0
  832. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage_limits.py +0 -0
  833. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage_rollup.py +0 -0
  834. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_venv_live_install_2121.py +0 -0
  835. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_version_single_source.py +0 -0
  836. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_watch.py +0 -0
  837. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  838. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_events.py +0 -0
  839. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_image_pin_sync.py +0 -0
  840. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_safety.py +0 -0
  841. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_test_scoping.py +0 -0
  842. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worktree.py +0 -0
  843. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  844. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/Cargo.lock +0 -0
  845. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/Cargo.toml +0 -0
  846. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/cargo-config-local-quadraui.toml.example +0 -0
  847. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/audit.rs +0 -0
  848. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/chat.rs +0 -0
  849. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/data.rs +0 -0
  850. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/dialogs.rs +0 -0
  851. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/doc_tabs.rs +0 -0
  852. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/drive.rs +0 -0
  853. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/drive_queue.rs +0 -0
  854. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/escalation.rs +0 -0
  855. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/events.rs +0 -0
  856. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fixtures.rs +0 -0
  857. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_health.rs +0 -0
  858. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_sessions.rs +0 -0
  859. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_terminals.rs +0 -0
  860. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/format.rs +0 -0
  861. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/milestone_dag.rs +0 -0
  862. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/mod.rs +0 -0
  863. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/msv.rs +0 -0
  864. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/pipeline.rs +0 -0
  865. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/plans.rs +0 -0
  866. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/render.rs +0 -0
  867. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/reports.rs +0 -0
  868. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/sessions.rs +0 -0
  869. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/settings_ui.rs +0 -0
  870. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/sidebar.rs +0 -0
  871. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/terminal.rs +0 -0
  872. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/tests.rs +0 -0
  873. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/types.rs +0 -0
  874. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/workspace.rs +0 -0
  875. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/bin/gtk.rs +0 -0
  876. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/commands.rs +0 -0
  877. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/lib.rs +0 -0
  878. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/main.rs +0 -0
  879. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/settings.rs +0 -0
  880. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/tests/acceptance.rs +0 -0
  881. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/tests/cli.rs +0 -0
  882. {code_coordinator-0.5.171 → code_coordinator-0.5.173}/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.171
3
+ Version: 0.5.173
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.171
3
+ Version: 0.5.173
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,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.171",
2
+ "tag": "0.5.173",
3
3
  "distance": 0,
4
- "node": "ga2bdfedae4a53fa1092820a1d38f8c7e925a87d7",
4
+ "node": "g3e3dcca5954ea1c1094878c1f81ed18e515e641f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-19"
@@ -510,6 +510,36 @@ def fetch_drive_queue_entry(
510
510
  return None
511
511
 
512
512
 
513
+ def post_drive_queue(
514
+ svc: ServiceConfig,
515
+ action: str,
516
+ *,
517
+ timeout: float = _WRITE_TIMEOUT,
518
+ **fields,
519
+ ) -> dict:
520
+ """POST /drive-queue {action, ...fields} — the write side of
521
+ :func:`fetch_drive_queue` (#2429 DQW-2).
522
+
523
+ *fields* are forwarded verbatim as sibling keys next to ``action``,
524
+ e.g. ``post_drive_queue(svc, "move", repo_name="api", issue_number=1,
525
+ to_position=0)`` or ``post_drive_queue(svc, "update", repo_name="api",
526
+ issue_number=1, fields={"hold_state": "released"})`` — same body shape
527
+ ``coord/serve_app.py``'s ``post_drive_queue`` route (``action`` in
528
+ ``{enqueue, dequeue, update, move}``) already accepts, so a caller just
529
+ passes through whatever ``coord/dashboard/server.py``'s
530
+ ``/api/drive-queue/action`` handler decided to send. Returns the
531
+ decoded per-action response (``{"moved": bool}`` / ``{"deleted": bool}``
532
+ / ``{"updated": bool}`` / ``{"entry_id": int}``).
533
+
534
+ Unlike :func:`fetch_drive_queue` this is NOT fail-soft: it raises
535
+ ``httpx.HTTPError`` on transport/HTTP failure, the same posture as
536
+ :func:`post_cordon`/:func:`post_pause`/:func:`post_quiet_hours` — a
537
+ move/remove/unblock/resume that silently failed to reach the daemon
538
+ would leave the operator believing the queue changed when it didn't.
539
+ """
540
+ return post_record(svc, "/drive-queue", {"action": action, **fields}, timeout=timeout)
541
+
542
+
513
543
  def fetch_gate_a_approval(
514
544
  svc: ServiceConfig,
515
545
  repo_name: str,
@@ -37,7 +37,13 @@ from coord.events import (
37
37
  from coord.board_service import read_board, write_board
38
38
  from coord.dao import _JSON_COLUMNS
39
39
  from coord.db import _ensure_schema
40
- from coord.drive_queue import DriveQueueSummary, entries_from_rows, summarize_drive_queue
40
+ from coord.drive_queue import (
41
+ HOLD_FIRED,
42
+ STATE_BLOCKED,
43
+ DriveQueueSummary,
44
+ entries_from_rows,
45
+ summarize_drive_queue,
46
+ )
41
47
  from coord.models import Assignment
42
48
  from coord.network import check_all, fetch_status
43
49
  from coord.openapi import (
@@ -441,6 +447,51 @@ def openapi_spec() -> dict:
441
447
  },
442
448
  }
443
449
  },
450
+ "/api/drive-queue/action": {
451
+ "post": {
452
+ "summary": (
453
+ "move/remove/unblock/resume a `coord drive` queue row "
454
+ "(#2429 DQW-2)"
455
+ ),
456
+ "requestBody": {
457
+ "required": True,
458
+ "content": {
459
+ "application/json": {
460
+ "schema": {
461
+ "type": "object",
462
+ "properties": {
463
+ "repo_name": {"type": "string"},
464
+ "issue_number": {"type": "integer"},
465
+ "action": {
466
+ "type": "string",
467
+ "enum": ["move", "remove", "unblock", "resume"],
468
+ },
469
+ "to_position": {
470
+ "type": "integer",
471
+ "description": "Required when action == 'move'.",
472
+ },
473
+ },
474
+ "required": ["repo_name", "issue_number", "action"],
475
+ }
476
+ }
477
+ },
478
+ },
479
+ "responses": {
480
+ "200": {
481
+ "description": "OK",
482
+ "content": {"application/json": {"schema": ok_response}},
483
+ },
484
+ "400": {
485
+ "description": (
486
+ "Missing/unknown field, missing to_position for "
487
+ "'move', 'unblock' on a non-blocked row, or "
488
+ "'resume' on a row whose gate hasn't fired"
489
+ )
490
+ },
491
+ "404": {"description": "drive-queue entry not found"},
492
+ },
493
+ }
494
+ },
444
495
  "/api/approve": {
445
496
  "post": {
446
497
  "summary": "Dispatch one or more proposals by id",
@@ -706,6 +757,72 @@ def build_app(
706
757
  return _fixture.drive_queue()
707
758
  return list_drive_queue()
708
759
 
760
+ def _drive_queue_write(action: str, **fields) -> dict:
761
+ """POST /drive-queue's ``{action, ...fields}`` shape (#2429 DQW-2).
762
+
763
+ Live mode only — callers check ``_fixture is not None`` themselves
764
+ (mirrors ``_write_board``, whose fixture no-op lives at the call
765
+ site in ``api_pipeline_action``, not inside ``_write_board`` itself).
766
+
767
+ Resolves daemon-vs-local by hand, the same decision
768
+ ``_read_board()``/``_write_board()`` make for the board, rather than
769
+ going through ``coord.state``'s own routed ``enqueue_drive_queue``/
770
+ ``dequeue_drive_queue``/``update_drive_queue_entry``/
771
+ ``move_drive_queue_entry`` wrappers — those already do this exact
772
+ dance internally, but routing here keeps the dashboard's thin-client
773
+ posture visible in this file instead of buried behind a
774
+ `coord.state` implementation detail.
775
+
776
+ Returns the daemon's per-action response dict verbatim
777
+ (``{"moved": bool}`` / ``{"deleted": bool}`` / ``{"updated": bool}``
778
+ / ``{"entry_id": int}``), whether it came from the wire or from the
779
+ matching local ``_*_local`` function directly — the same functions
780
+ ``coord/serve_app.py``'s own ``post_drive_queue`` route calls.
781
+ """
782
+ from coord import board_service
783
+
784
+ svc = board_service.resolve()
785
+ if svc is not None:
786
+ from coord.client import post_drive_queue
787
+
788
+ return post_drive_queue(svc, action, **fields)
789
+
790
+ from coord.state import (
791
+ _dequeue_drive_queue_local,
792
+ _enqueue_drive_queue_local,
793
+ _move_drive_queue_entry_local,
794
+ _update_drive_queue_entry_local,
795
+ )
796
+
797
+ if action == "dequeue":
798
+ return {
799
+ "deleted": _dequeue_drive_queue_local(
800
+ fields["repo_name"], fields["issue_number"]
801
+ )
802
+ }
803
+ if action == "enqueue":
804
+ entry_id = _enqueue_drive_queue_local(
805
+ fields["repo_name"],
806
+ fields["issue_number"],
807
+ machine=fields.get("machine"),
808
+ after=fields.get("after") or [],
809
+ position=fields.get("position"),
810
+ )
811
+ return {"entry_id": entry_id}
812
+ if action == "update":
813
+ return {
814
+ "updated": _update_drive_queue_entry_local(
815
+ fields["repo_name"], fields["issue_number"], **fields["fields"]
816
+ )
817
+ }
818
+ if action == "move":
819
+ return {
820
+ "moved": _move_drive_queue_entry_local(
821
+ fields["repo_name"], fields["issue_number"], fields["to_position"]
822
+ )
823
+ }
824
+ raise ValueError(f"unknown drive-queue action: {action!r}")
825
+
709
826
  # ── Real-time event bus ────────────────────────────────────────────────
710
827
  event_source = EventSource()
711
828
 
@@ -1024,6 +1141,150 @@ def build_app(
1024
1141
  entries = [r for r in rows if r.get("repo_name") == repo] if repo else rows
1025
1142
  return JSONResponse({"entries": entries, "summary": asdict(summary)})
1026
1143
 
1144
+ async def api_drive_queue_action(request: Request) -> JSONResponse:
1145
+ """POST /api/drive-queue/action — move/remove/unblock/resume a
1146
+ `coord drive` queue row (#2429 DQW-2).
1147
+
1148
+ Body: ``{"repo_name": "...", "issue_number": N, "action": "move" |
1149
+ "remove" | "unblock" | "resume", ...}``. Response:
1150
+ ``{"ok": bool, "error"?: str}`` — the same envelope
1151
+ ``api_pipeline_action`` uses, not a new one.
1152
+
1153
+ All four actions ride the daemon's already-implemented
1154
+ ``POST /drive-queue`` ops (``coord/serve_app.py``'s
1155
+ ``post_drive_queue``) via ``_drive_queue_write`` — no new
1156
+ queue-mutation logic here, just routing plus the two client-side
1157
+ guards the TUI already enforces (``tui/src/app/drive_queue.rs``'s
1158
+ ``queue_unblock_selected``/``queue_resume_selected``):
1159
+
1160
+ * ``move`` -> ``{action: "move", to_position}`` -> daemon op ``move``.
1161
+ * ``remove`` -> daemon op ``dequeue``.
1162
+ * ``unblock`` -> dequeue then re-enqueue with the row's ``machine``
1163
+ preserved and ``after`` DROPPED — the exact recipe
1164
+ ``dispatch_drive_queue_unblock`` (and its Python precedent,
1165
+ ``coord/commands/drive_queue.py``'s ``_requeue_command``) uses: an
1166
+ unsatisfiable pre-req is one of the two things that blocks a row,
1167
+ so re-adding with the same ``after`` would just re-block it.
1168
+ Refused with 400 on anything but a ``state == "blocked"`` row.
1169
+ * ``resume`` -> daemon op ``update`` with
1170
+ ``fields={hold_state: "released", hold_probes: 0}``. Refused with
1171
+ 400 on a row whose gate hasn't fired (``hold_state != "fired"``).
1172
+
1173
+ In fixture mode (#1538) every one of these is **recorded, not
1174
+ executed** — mirrors ``api_pipeline_action``'s ``_fixture_action``.
1175
+ """
1176
+ try:
1177
+ body = await request.json()
1178
+ except ValueError:
1179
+ return JSONResponse({"error": "invalid JSON"}, status_code=400)
1180
+
1181
+ repo_name = body.get("repo_name")
1182
+ issue_number = body.get("issue_number")
1183
+ action = body.get("action")
1184
+ if not repo_name or issue_number is None or not action:
1185
+ return JSONResponse(
1186
+ {"error": "repo_name, issue_number and action are required"},
1187
+ status_code=400,
1188
+ )
1189
+ try:
1190
+ issue_number = int(issue_number)
1191
+ except (TypeError, ValueError):
1192
+ return JSONResponse({"error": "issue_number must be an int"}, status_code=400)
1193
+
1194
+ if action not in ("move", "remove", "unblock", "resume"):
1195
+ return JSONResponse({"error": f"unknown action: {action!r}"}, status_code=400)
1196
+
1197
+ to_position = None
1198
+ if action == "move":
1199
+ try:
1200
+ to_position = int(body.get("to_position"))
1201
+ except (TypeError, ValueError):
1202
+ return JSONResponse(
1203
+ {"error": "to_position must be an int"}, status_code=400
1204
+ )
1205
+
1206
+ rows = _fixture.drive_queue() if _fixture is not None else _read_drive_queue()
1207
+ entry = next(
1208
+ (
1209
+ r for r in rows
1210
+ if r.get("repo_name") == repo_name
1211
+ and int(r.get("issue_number", -1)) == issue_number
1212
+ ),
1213
+ None,
1214
+ )
1215
+ if entry is None:
1216
+ return JSONResponse({"error": "drive-queue entry not found"}, status_code=404)
1217
+
1218
+ if action == "unblock" and entry.get("state") != STATE_BLOCKED:
1219
+ return JSONResponse(
1220
+ {"ok": False, "error": "only a blocked entry can be unblocked"},
1221
+ status_code=400,
1222
+ )
1223
+ if action == "resume" and entry.get("hold_state") != HOLD_FIRED:
1224
+ return JSONResponse(
1225
+ {
1226
+ "ok": False,
1227
+ "error": "only an entry whose deploy gate has fired can be resumed",
1228
+ },
1229
+ status_code=400,
1230
+ )
1231
+
1232
+ if _fixture is not None:
1233
+ _fixture.record("/api/drive-queue/action", body, action=action)
1234
+ return JSONResponse({"ok": True})
1235
+
1236
+ try:
1237
+ if action == "move":
1238
+ result = _drive_queue_write(
1239
+ "move",
1240
+ repo_name=repo_name,
1241
+ issue_number=issue_number,
1242
+ to_position=to_position,
1243
+ )
1244
+ ok = bool(result.get("moved"))
1245
+ elif action == "remove":
1246
+ result = _drive_queue_write(
1247
+ "dequeue", repo_name=repo_name, issue_number=issue_number
1248
+ )
1249
+ ok = bool(result.get("deleted"))
1250
+ elif action == "unblock":
1251
+ dequeue_result = _drive_queue_write(
1252
+ "dequeue", repo_name=repo_name, issue_number=issue_number
1253
+ )
1254
+ if bool(dequeue_result.get("deleted")):
1255
+ enqueue_result = _drive_queue_write(
1256
+ "enqueue",
1257
+ repo_name=repo_name,
1258
+ issue_number=issue_number,
1259
+ machine=entry.get("machine"),
1260
+ after=[],
1261
+ )
1262
+ ok = enqueue_result.get("entry_id") is not None
1263
+ else:
1264
+ # The guard read above (``_read_drive_queue()``) is not
1265
+ # atomic with this write: the row can be removed/changed
1266
+ # by a concurrent dequeue/resume/daemon tick between the
1267
+ # two. If there was nothing to dequeue, there is nothing
1268
+ # to re-enqueue either — doing so anyway would silently
1269
+ # resurrect a row someone else legitimately removed.
1270
+ ok = False
1271
+ else: # resume
1272
+ result = _drive_queue_write(
1273
+ "update",
1274
+ repo_name=repo_name,
1275
+ issue_number=issue_number,
1276
+ fields={"hold_state": "released", "hold_probes": 0},
1277
+ )
1278
+ ok = bool(result.get("updated"))
1279
+ except Exception as exc: # noqa: BLE001
1280
+ return JSONResponse({"ok": False, "error": str(exc)}, status_code=500)
1281
+
1282
+ if not ok:
1283
+ return JSONResponse(
1284
+ {"ok": False, "error": "drive-queue entry not found"}, status_code=404
1285
+ )
1286
+ return JSONResponse({"ok": True})
1287
+
1027
1288
  async def api_approve(request: Request) -> JSONResponse:
1028
1289
  from coord.dispatch import dispatch, post_briefing, compute_do_not_touch
1029
1290
  from coord.state import (
@@ -1944,6 +2205,7 @@ def build_app(
1944
2205
  Route("/api/sessions", api_sessions, methods=["GET"]),
1945
2206
  Route("/api/proposals", api_proposals, methods=["GET"]),
1946
2207
  Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
2208
+ Route("/api/drive-queue/action", api_drive_queue_action, methods=["POST"]),
1947
2209
  Route("/api/approve", api_approve, methods=["POST"]),
1948
2210
  Route("/api/reject", api_reject, methods=["POST"]),
1949
2211
  Route("/api/diff/{id}", api_diff, methods=["GET"]),
@@ -114,6 +114,7 @@ from coord.failure_class import (
114
114
  plan_usage_limit_resume,
115
115
  )
116
116
  from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
117
+ from coord.self_health import self_freshness
117
118
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
118
119
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
119
120
  # import lived in a hunk #1590 rewrote, so the merge came out textually clean
@@ -181,6 +182,20 @@ EXIT_DISPATCH_REFUSED = 5
181
182
  # vimcode#635 for the two live incidents (140 minutes and ~25 minutes of a
182
183
  # held queue slot, respectively, producing nothing).
183
184
  EXIT_DEAD_END = 6
185
+ # #2443: a deliberate SELF-HEAL exit, not a failure — the drive loop noticed
186
+ # it was stuck repeating the identical WAIT reason (see `_SELF_HEAL_WAIT_
187
+ # STREAK`) while its OWN on-disk `coord` install had moved since this
188
+ # session started. Python never reloads an already-imported module, so a
189
+ # fix landing mid-run is otherwise invisible to a live session for as long
190
+ # as `--deadline` allows — the claude-coordinator#2286 incident this closes
191
+ # polled one unfetchable path every ~60s for 2+ hours after the fix was
192
+ # already on disk. Distinct from EXIT_DISPATCH_REFUSED/EXIT_DEAD_END on
193
+ # purpose: this condition is NOT permanent — relaunching is exactly the fix
194
+ # — so it must fall through `coord.drive_queue._reconcile_running`'s
195
+ # ordinary `retry` branch rather than either of those two `blocked`
196
+ # branches, which is why nothing in drive_queue.py needs to special-case
197
+ # this code at all.
198
+ EXIT_SELF_STALE = 7
184
199
 
185
200
 
186
201
  class DriveError(Exception):
@@ -218,6 +233,31 @@ _CAPTURED_OUTPUT_LIMIT = 4000
218
233
  # never *tightened* for the environmental case.
219
234
  _ENVIRONMENTAL_WORK_RETRY_BUDGET = 5
220
235
 
236
+ # #2443: how many CONSECUTIVE polls of the IDENTICAL `Action.label` to
237
+ # tolerate before `Driver._loop` checks whether its own on-disk `coord`
238
+ # install has moved since this session started. Below this, a same-label
239
+ # repeat is indistinguishable from an ordinary slow-but-progressing wait (a
240
+ # 10-20 minute test, a slow CI check) and checking would just be wasted
241
+ # subprocess calls; at/above it, the check itself is a single local `git
242
+ # rev-parse HEAD` (no network — see `coord.self_health.self_freshness
243
+ # (fetch=False)`), cheap enough to run on every remaining poll of the
244
+ # streak. At the default `--poll` of 60s this is ~10 minutes — fast enough
245
+ # to matter against a multi-hour `--deadline`, slow enough that a routine
246
+ # wait is never mistaken for the stuck case this exists to catch.
247
+ _SELF_HEAL_WAIT_STREAK = 10
248
+
249
+
250
+ def _current_self_head() -> str | None:
251
+ """Real default for `Driver.self_head_probe` (#2443): THIS process's own
252
+ on-disk `coord` install's current HEAD, or ``None`` when it can't be
253
+ determined (not a git checkout, unreadable HEAD — see
254
+ :func:`coord.self_health.self_freshness`). ``fetch=False``: this only
255
+ needs to notice code that has ALREADY landed locally (e.g. a prior `git
256
+ pull`), never reaches the network, and therefore never blocks the poll
257
+ loop on a slow/unreachable origin.
258
+ """
259
+ return self_freshness(fetch=False).head_sha
260
+
221
261
 
222
262
  def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
223
263
  """*text*, or its last *limit* characters if longer — the tail, because
@@ -3685,8 +3725,19 @@ class Driver:
3685
3725
  # real `claude -p "/usage"` subprocess — mirrors *verifier*/*oracle_gate*
3686
3726
  # above. Defaults to the real (cached, ~60s) probe.
3687
3727
  usage_prober: Callable[[], PlanLimits] = get_plan_limits
3728
+ # #2443: injected so tests can script a fake on-disk HEAD sequence
3729
+ # without a real git checkout — same shape as *usage_prober* above.
3730
+ # Defaults to the real, local-only (`fetch=False`) probe.
3731
+ self_head_probe: Callable[[], str | None] = _current_self_head
3688
3732
 
3689
3733
  _run_log: Path | None = field(default=None, init=False, repr=False)
3734
+ # #2443: this session's own on-disk `coord` HEAD, captured once by
3735
+ # `_loop()` right as the poll loop begins — the baseline every later
3736
+ # `_self_heal_drift_message` check compares against. `None` when it
3737
+ # could not be determined (not a git checkout, unreadable HEAD), which
3738
+ # keeps the self-heal check permanently a no-op for this run rather than
3739
+ # ever comparing against a placeholder.
3740
+ _start_head_sha: str | None = field(default=None, init=False, repr=False)
3690
3741
  # #1499: the terminating Action's own message, captured by `_loop()` right
3691
3742
  # before it returns — `run()` folds this into the `drive_exited` audit
3692
3743
  # summary/details so a non-exceptional terminal exit (e.g. `decide()`
@@ -3818,6 +3869,36 @@ class Driver:
3818
3869
  finally:
3819
3870
  lock.release()
3820
3871
 
3872
+ # ── self-heal (#2443) ──────────────────────────────────────────────
3873
+ def _self_heal_drift_message(self, label: str, streak: int) -> str | None:
3874
+ """Has THIS process's own on-disk ``coord`` install moved since this
3875
+ drive session started? ``None`` when it hasn't — or when freshness
3876
+ can't be determined at all, which must never be misread as drift —
3877
+ the overwhelmingly common case, so the caller just keeps waiting
3878
+ exactly as before.
3879
+
3880
+ Only ever consulted once *label* (a WAIT ``Action``'s own reason)
3881
+ has repeated *streak* times in a row (``_loop``'s
3882
+ ``_SELF_HEAL_WAIT_STREAK`` gate) — this is specifically the #2286
3883
+ shape: ``_decide_acceptance_author``'s "could not verify commits
3884
+ (git fetch failed), retrying" arm returned the IDENTICAL label every
3885
+ ~60s for 2+ hours after the fix that would have resolved it had
3886
+ already landed on disk, because Python never reloads an
3887
+ already-imported module. A stale in-memory `coord/drive.py` has no
3888
+ way to notice that on its own — this is the bounded check that lets
3889
+ it notice anyway.
3890
+ """
3891
+ current = self.self_head_probe()
3892
+ if not current or not self._start_head_sha or current == self._start_head_sha:
3893
+ return None
3894
+ return (
3895
+ "code changed underneath this session — on-disk coord moved "
3896
+ f"from {self._start_head_sha[:8]} to {current[:8]} while stuck "
3897
+ f"repeating the same wait {streak}x: {label!r}. Exiting "
3898
+ "(EXIT_SELF_STALE) so coord drive-queue relaunches with "
3899
+ f"current code instead of continuing to wait on stale logic (#2443)."
3900
+ )
3901
+
3821
3902
  def _post_escalation_comment(self, state: IssueState, message: str) -> None:
3822
3903
  """#1526: durably surface an escalation's reason onto the issue
3823
3904
  itself, not just this run's tmux pane and the ``coord escalate``
@@ -4061,6 +4142,15 @@ class Driver:
4061
4142
  # nudge) while guaranteeing a stalled stage is never more than one
4062
4143
  # `stall_secs` window away from a fresh check.
4063
4144
  last_nudge: float | None = None
4145
+ # #2443: this session's own on-disk `coord` HEAD, captured once,
4146
+ # right as the poll loop begins — see `_self_heal_drift_message`.
4147
+ self._start_head_sha = self.self_head_probe()
4148
+ # A distinct object (never equal to any real `Action.label`, empty
4149
+ # string included) so the very first WAIT of the run always starts
4150
+ # its streak at 1 rather than accidentally matching an unset
4151
+ # sentinel.
4152
+ last_wait_label: object = object()
4153
+ same_wait_streak = 0
4064
4154
 
4065
4155
  while True:
4066
4156
  now = self.clock()
@@ -4155,6 +4245,36 @@ class Driver:
4155
4245
  for warning in action.warnings:
4156
4246
  self.warn(warning)
4157
4247
 
4248
+ # #2443: self-heal — see `_self_heal_drift_message`. Tracked off
4249
+ # the Action's own `label`, NOT `fingerprint` above: a WAIT can
4250
+ # (and, in the #2286 shape, does) repeat the identical reason
4251
+ # poll after poll while the board fingerprint itself is static
4252
+ # for the same underlying reason, so this is really the same
4253
+ # signal — but keying directly on what the loop is ABOUT TO DO
4254
+ # keeps this correct even for a WAIT arm whose label happens to
4255
+ # be static text unrelated to fingerprint (e.g. "TEST: in
4256
+ # progress on a capability-matched machine") without needing to
4257
+ # reason about the two staying in lockstep. A non-WAIT action
4258
+ # (RUN or EXIT) always resets the streak: dispatching something
4259
+ # is progress by definition.
4260
+ if action.kind == WAIT:
4261
+ if action.label == last_wait_label:
4262
+ same_wait_streak += 1
4263
+ else:
4264
+ last_wait_label = action.label
4265
+ same_wait_streak = 1
4266
+ if same_wait_streak >= _SELF_HEAL_WAIT_STREAK:
4267
+ drift = self._self_heal_drift_message(
4268
+ action.label, same_wait_streak
4269
+ )
4270
+ if drift:
4271
+ self._last_exit_message = drift
4272
+ self.warn(drift)
4273
+ return EXIT_SELF_STALE
4274
+ else:
4275
+ last_wait_label = object()
4276
+ same_wait_streak = 0
4277
+
4158
4278
  if action.is_exit:
4159
4279
  # #1499: capture the exit reason for the audit boundary before
4160
4280
  # anything below can fail — the escalation write is explicitly
@@ -2558,12 +2558,34 @@ def _reconcile_running(
2558
2558
  dispatch_only = _dispatch_produced_nothing(
2559
2559
  entry, facts
2560
2560
  ) and not _is_merge_gate_block_reason(own_reason)
2561
- dispatch_note = (
2562
- " no assignment was ever created for this run (#2273): likely an "
2563
- "infrastructure/dispatch-layer failure, not a code defect"
2564
- if dispatch_only
2565
- else ""
2566
- )
2561
+ if not dispatch_only:
2562
+ dispatch_note = ""
2563
+ elif own_reason:
2564
+ # A clean exit that still names no assignment — `own_reason` is
2565
+ # present and already ruled out as a merge-gate block above, so the
2566
+ # confident diagnosis is warranted: the drive itself narrated a
2567
+ # death, and that death happened before `coord assign` ever ran.
2568
+ dispatch_note = (
2569
+ " — no assignment was ever created for this run (#2273): likely "
2570
+ "an infrastructure/dispatch-layer failure, not a code defect"
2571
+ )
2572
+ else:
2573
+ # #2442: a REAP, not a clean exit — the session was killed/crashed
2574
+ # and left no `own_reason` text at all, so there is nothing for
2575
+ # `_is_merge_gate_block_reason` to match against. That is not
2576
+ # evidence the cause WAS a dispatch failure; it just means this
2577
+ # branch has no way to rule one in or out. #2286 is the live
2578
+ # escalation this produced: a session parked 2.3h inside a
2579
+ # legitimate, already-diagnosed JIT-slice wait loop (#2426/#2437)
2580
+ # looked, to `_dispatch_produced_nothing` alone, identical to one
2581
+ # that never got dispatched — and got the same confident-but-wrong
2582
+ # "infrastructure/dispatch-layer failure" wording #2424 already
2583
+ # established was unreliable for the merge-gate case. Name the
2584
+ # effect (no assignment) without asserting the unknowable cause.
2585
+ dispatch_note = (
2586
+ " — no assignment was ever created for this run (#2273), and "
2587
+ "the session left no exit reason to diagnose why"
2588
+ )
2567
2589
 
2568
2590
  # #2363: the "claimed success, wrote nothing" signature gets a WIDER
2569
2591
  # ceiling than every other death reason — see `EMPTY_BRANCH_MAX_ATTEMPTS`
@@ -44,6 +44,23 @@ doc's guess) and reports STALE with a commit count when it hasn't been pulled
44
44
  since a `coord/**` fix merged — the checkable gate for this row, the same way
45
45
  `coord diagnose --graph` is the checkable gate for graphify freshness.
46
46
 
47
+ **#2443: a LIVE `coord drive` session now self-heals mid-run too.** #2436
48
+ above only helps *before* a new launch — it says nothing about a session
49
+ that was already running, with the OLD code loaded into memory, when the fix
50
+ landed. Python never reloads an already-imported module, so a stale live
51
+ session has no way to notice a fix on its own. `coord/drive.py`'s poll loop
52
+ now watches its own `WAIT` actions: once the identical wait reason repeats
53
+ `_SELF_HEAL_WAIT_STREAK` (10) polls in a row, it compares its own on-disk
54
+ `coord` HEAD (captured once, at session start) against the current one
55
+ (`coord.self_health.self_freshness(fetch=False)` — a local `git rev-parse
56
+ HEAD`, no network). If the checkout moved underneath it, the session exits
57
+ `EXIT_SELF_STALE` — a clean, non-permanent exit `coord drive-queue`'s
58
+ ordinary retry/relaunch path picks straight back up under the current code —
59
+ instead of continuing to poll dead logic for the rest of `--deadline`. This
60
+ is the actual fix for the incident #2436 diagnosed after the fact: a live
61
+ session on dellserver polled one unfetchable path every ~60s for 2+ hours
62
+ after the #2319/#2320 fix that would have resolved it was already on disk.
63
+
47
64
  Not academic. #1394 (worker strands uncommitted work, then cleanup destroys it)
48
65
  sat merged-but-undeployed, and the very next dispatch — #1402 — hit the
49
66
  identical bug: **$3.44 and 10 minutes lost to something already fixed on