code-coordinator 0.5.163__tar.gz → 0.5.165__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 (879) hide show
  1. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive.py +96 -17
  5. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive_queue.py +96 -3
  6. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive.py +95 -1
  7. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_queue.py +177 -0
  8. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/acceptance-web.yml +0 -0
  18. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.gitignore +0 -0
  24. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/GOAL.md +0 -0
  26. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/LICENSE +0 -0
  27. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/README.md +0 -0
  29. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_bool_guard.py +0 -0
  49. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/ci_store.py +0 -0
  57. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/claim.py +0 -0
  58. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/cli.py +0 -0
  59. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/client.py +0 -0
  60. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/__init__.py +0 -0
  61. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/_common.py +0 -0
  62. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/acceptance.py +0 -0
  63. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/agent_ops.py +0 -0
  64. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/audit.py +0 -0
  65. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/chat.py +0 -0
  66. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/dispatch.py +0 -0
  67. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/dispatch_workers.py +0 -0
  68. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/drive.py +0 -0
  69. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/drive_queue.py +0 -0
  70. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/gate_a.py +0 -0
  71. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/gates.py +0 -0
  72. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/issues.py +0 -0
  73. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/lifecycle.py +0 -0
  74. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/merge.py +0 -0
  75. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/milestone.py +0 -0
  76. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/plan_followup.py +0 -0
  77. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/plans.py +0 -0
  78. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/portal.py +0 -0
  79. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/release.py +0 -0
  80. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/repo.py +0 -0
  81. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/report.py +0 -0
  82. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/review.py +0 -0
  83. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/scorecard.py +0 -0
  84. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/sessions.py +0 -0
  85. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/setup.py +0 -0
  86. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/status.py +0 -0
  87. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/terminal.py +0 -0
  88. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/test_gate.py +0 -0
  89. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/tui.py +0 -0
  90. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/comments.py +0 -0
  91. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/config.py +0 -0
  92. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/config_reload.py +0 -0
  93. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/conflict_fix.py +0 -0
  94. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dao.py +0 -0
  95. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/__init__.py +0 -0
  96. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/fixture.py +0 -0
  97. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/index.html +0 -0
  98. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/server.py +0 -0
  99. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/terminal.py +0 -0
  100. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/.gitignore +0 -0
  101. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/components.json +0 -0
  102. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  103. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  104. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  105. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  106. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  107. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  108. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  109. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  110. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  111. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/index.html +0 -0
  112. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  113. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/sw.js +0 -0
  114. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  115. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  116. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  117. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  118. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  119. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  120. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  121. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  122. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  123. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  124. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/eslint.config.js +0 -0
  125. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/index.html +0 -0
  126. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  127. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/package-lock.json +0 -0
  128. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/package.json +0 -0
  129. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  130. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/playwright.config.ts +0 -0
  131. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/postcss.config.js +0 -0
  132. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  133. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  134. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  135. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/App.tsx +0 -0
  136. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/api/client.ts +0 -0
  137. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  138. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  139. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  140. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  141. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  142. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  143. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  144. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  145. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  146. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  147. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  148. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  149. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  150. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  151. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  152. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  153. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  154. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  155. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  156. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  157. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  158. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  159. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  160. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  161. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  162. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  163. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  164. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  165. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  166. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  167. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  168. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  169. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  170. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  171. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  172. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/index.css +0 -0
  173. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  174. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  175. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/main.tsx +0 -0
  176. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  177. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  178. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  179. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  180. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  181. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  182. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  183. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  184. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  185. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  186. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  187. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  188. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  189. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  190. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  191. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  192. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  193. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  194. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  195. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  196. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  197. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  198. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  199. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tailwind.config.js +0 -0
  200. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tsconfig.json +0 -0
  201. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  202. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/vite.config.ts +0 -0
  203. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/db.py +0 -0
  204. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dead_end.py +0 -0
  205. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/README.md +0 -0
  206. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-agent.service +0 -0
  207. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.service +0 -0
  208. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.sh +0 -0
  209. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.timer +0 -0
  210. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-drive-queue.service +0 -0
  211. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-drive-queue.timer +0 -0
  212. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-notify.service +0 -0
  213. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-notify.timer +0 -0
  214. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-propagate.service +0 -0
  215. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-propagate.timer +0 -0
  216. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-window.service +0 -0
  217. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-window.timer +0 -0
  218. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-serve.service +0 -0
  219. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web-dist-build.service +0 -0
  220. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web-dist-build.timer +0 -0
  221. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web.service +0 -0
  222. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy_manifest.py +0 -0
  223. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy_units.py +0 -0
  224. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deps.py +0 -0
  225. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/diagnose.py +0 -0
  226. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dispatch.py +0 -0
  227. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dist_name.py +0 -0
  228. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive_state.py +0 -0
  229. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/events.py +0 -0
  230. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/failure_class.py +0 -0
  231. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/filelock.py +0 -0
  232. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/fleet_config_health.py +0 -0
  233. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/freshness.py +0 -0
  234. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_a.py +0 -0
  235. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_b.py +0 -0
  236. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_snapshot.py +0 -0
  237. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gates.py +0 -0
  238. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/github_ops.py +0 -0
  239. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/goal.py +0 -0
  240. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/graph_health.py +0 -0
  241. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/__init__.py +0 -0
  242. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/aggregate.py +0 -0
  243. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/__init__.py +0 -0
  244. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/agent_install.py +0 -0
  245. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/cargo_targets.py +0 -0
  246. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/claude_binary.py +0 -0
  247. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/deploy_lane_facts.py +0 -0
  248. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/disk.py +0 -0
  249. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_board.py +0 -0
  250. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  251. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_phantom.py +0 -0
  252. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_unit_drift.py +0 -0
  253. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/graph.py +0 -0
  254. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/graphify_cli.py +0 -0
  255. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/index_lock.py +0 -0
  256. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/plan_usage.py +0 -0
  257. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/repo_state.py +0 -0
  258. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/spawned_coord.py +0 -0
  259. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/timer_active.py +0 -0
  260. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/toolchain.py +0 -0
  261. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/unit_drift.py +0 -0
  262. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/unit_enablement.py +0 -0
  263. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/worktrees.py +0 -0
  264. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/cli.py +0 -0
  265. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/context.py +0 -0
  266. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/fleet_snapshot.py +0 -0
  267. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/models.py +0 -0
  268. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/pypi.py +0 -0
  269. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/registry.py +0 -0
  270. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/render.py +0 -0
  271. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/units.py +0 -0
  272. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/hooks.py +0 -0
  273. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/housekeeping.py +0 -0
  274. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/interactive.py +0 -0
  275. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/issue_store.py +0 -0
  276. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/liveness_auditor.py +0 -0
  277. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/machine_pause.py +0 -0
  278. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/merge_queue.py +0 -0
  279. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_chat.py +0 -0
  280. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_dispatch.py +0 -0
  281. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_gate.py +0 -0
  282. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_order.py +0 -0
  283. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/mock_author.py +0 -0
  284. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/models.py +0 -0
  285. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/network.py +0 -0
  286. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/new_issue_chat.py +0 -0
  287. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/__init__.py +0 -0
  288. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/baseline.py +0 -0
  289. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/cli.py +0 -0
  290. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/collect.py +0 -0
  291. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/digest.py +0 -0
  292. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/models.py +0 -0
  293. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/predicate.py +0 -0
  294. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/service.py +0 -0
  295. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/store.py +0 -0
  296. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/transport.py +0 -0
  297. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notify.py +0 -0
  298. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/openapi.py +0 -0
  299. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/overlap_fence.py +0 -0
  300. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/overlap_predict.py +0 -0
  301. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/parentage.py +0 -0
  302. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/parentage_github.py +0 -0
  303. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/pipeline.py +0 -0
  304. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/plan_parser.py +0 -0
  305. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/plans.py +0 -0
  306. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/platform_paths.py +0 -0
  307. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_bridge.py +0 -0
  308. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_store.py +0 -0
  309. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_sync.py +0 -0
  310. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/pr_body_lint.py +0 -0
  311. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/prereqs.py +0 -0
  312. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/progress.py +0 -0
  313. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/__init__.py +0 -0
  314. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/base.py +0 -0
  315. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/claude.py +0 -0
  316. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/claude_pty.py +0 -0
  317. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/opencode.py +0 -0
  318. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/queue_diagnose.py +0 -0
  319. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reconcile.py +0 -0
  320. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reconcile_tick.py +0 -0
  321. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/refine_chat.py +0 -0
  322. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_cordon.py +0 -0
  323. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_propagate.py +0 -0
  324. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_verify.py +0 -0
  325. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_window.py +0 -0
  326. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/repo_edit.py +0 -0
  327. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/repo_onboard.py +0 -0
  328. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reports.py +0 -0
  329. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/revalidate.py +0 -0
  330. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/review.py +0 -0
  331. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/scorecard.py +0 -0
  332. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/serve_app.py +0 -0
  333. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  334. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  335. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  336. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  337. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  338. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/portal-followup/SKILL.md +0 -0
  339. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  340. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  341. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/update-issue/SKILL.md +0 -0
  342. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/smoke.py +0 -0
  343. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/spend_ceiling.py +0 -0
  344. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/split_work.py +0 -0
  345. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/stage_projection.py +0 -0
  346. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/state.py +0 -0
  347. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_author.py +0 -0
  348. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_chat.py +0 -0
  349. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_orchestrator.py +0 -0
  350. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_report.py +0 -0
  351. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/tui_release.py +0 -0
  352. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage.py +0 -0
  353. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage_limits.py +0 -0
  354. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage_rollup.py +0 -0
  355. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/worker_events.py +0 -0
  356. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coordinator.example.yml +0 -0
  357. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-agent.service +0 -0
  358. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.service +0 -0
  359. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.sh +0 -0
  360. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.timer +0 -0
  361. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-drive-queue.service +0 -0
  362. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-drive-queue.timer +0 -0
  363. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-notify.service +0 -0
  364. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-notify.timer +0 -0
  365. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-propagate.service +0 -0
  366. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-propagate.timer +0 -0
  367. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-window.service +0 -0
  368. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-window.timer +0 -0
  369. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-serve.service +0 -0
  370. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.service +0 -0
  371. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.sh +0 -0
  372. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.timer +0 -0
  373. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-rollback.sh +0 -0
  374. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web.service +0 -0
  375. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/node-shim.sh +0 -0
  376. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ADR_COORD_WEB_DIST.md +0 -0
  377. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/AGENT_OPERATIONS.md +0 -0
  378. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ARCHITECTURE.md +0 -0
  379. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ARCH_SECURITY_GATES.md +0 -0
  380. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/COCKPIT.md +0 -0
  381. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CONTROL_CENTER.md +0 -0
  382. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/COST_DISCIPLINE.md +0 -0
  383. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CROSS_PLATFORM.md +0 -0
  384. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CUSTOMER_PORTAL.md +0 -0
  385. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/DRIVE_QUEUE.md +0 -0
  386. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/EPHEMERAL_WORKERS.md +0 -0
  387. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/FORGE_MIGRATION.md +0 -0
  388. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/GRAPHIFY_SETUP.md +0 -0
  389. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ISSUE_GUIDANCE.md +0 -0
  390. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/MAC_MINI.md +0 -0
  391. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  392. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/NOTIFIER.md +0 -0
  393. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/OPENCODE_VERIFICATION.md +0 -0
  394. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/OPERATING_GOTCHAS.md +0 -0
  395. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ORACLE_LOOP.md +0 -0
  396. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PHONE_WEBAPP.md +0 -0
  397. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PIPELINE_V2.md +0 -0
  398. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PLATFORM_EVOLUTION.md +0 -0
  399. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/SECOND_BACKEND.md +0 -0
  400. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/STORE_SERVICE.md +0 -0
  401. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  402. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/WEB_CONTROL_CENTER.md +0 -0
  403. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/WSL_WINDOWS_WORKER.md +0 -0
  404. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/README.md +0 -0
  405. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/_tokens.css +0 -0
  406. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/issue-detail.html +0 -0
  407. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/pipeline-narrow.html +0 -0
  408. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/pipeline-wide.html +0 -0
  409. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/graphify-out/.gitignore +0 -0
  410. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/install-agent.sh +0 -0
  411. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/pyproject.toml +0 -0
  412. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/audit_review_verdict_overrides.py +0 -0
  413. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  414. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/build-worker-image.sh +0 -0
  415. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/coordinator-machine.py +0 -0
  416. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/epic-down.sh +0 -0
  417. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/epic-up.sh +0 -0
  418. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/preflight.sh +0 -0
  419. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/provision-worker.sh +0 -0
  420. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  421. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  422. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/verify-github-token.sh +0 -0
  423. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/codegen.py +0 -0
  424. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/coord-test-runner.sh +0 -0
  425. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/drive-batch.sh +0 -0
  426. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/gen_board_fixture.py +0 -0
  427. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/next_release_tag.py +0 -0
  428. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/run_tests_in_populated_home.sh +0 -0
  429. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/run_tests_without_gh.sh +0 -0
  430. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/smoke_437_interactive.py +0 -0
  431. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_878_review_capture.py +0 -0
  432. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_release_published.py +0 -0
  433. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_release_wheel.py +0 -0
  434. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/setup.cfg +0 -0
  435. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/SMOKE_SET.md +0 -0
  436. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/__init__.py +0 -0
  437. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  438. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/contract.md +0 -0
  439. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/manifest.yml +0 -0
  440. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  441. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  442. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  443. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  444. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/conftest.py +0 -0
  445. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/contract.md +0 -0
  446. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/manifest.yml +0 -0
  447. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  448. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  449. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/contract.md +0 -0
  450. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/manifest.yml +0 -0
  451. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  452. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  453. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  454. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  455. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  456. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  457. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  458. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  459. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  460. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  461. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/contract.md +0 -0
  462. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  463. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  464. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/manifest.yml +0 -0
  465. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  466. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/tsconfig.json +0 -0
  467. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  468. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  469. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/contract.md +0 -0
  470. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  471. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/manifest.yml +0 -0
  472. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  473. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  474. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  475. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  476. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  477. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  478. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  479. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  480. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  481. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  482. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  483. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/conftest.py +0 -0
  484. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/board-pipeline-basic.json +0 -0
  485. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  486. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  487. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  488. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  489. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/all_pass.json +0 -0
  490. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  491. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/mixed_fail.json +0 -0
  492. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  493. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  494. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/skip.json +0 -0
  495. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/truncated.json +0 -0
  496. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  497. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  498. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  499. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  500. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  501. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  502. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  503. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  504. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_acceptance.py +0 -0
  505. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_acceptance_drivers.py +0 -0
  506. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent.py +0 -0
  507. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_api_error.py +0 -0
  508. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_app.py +0 -0
  509. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_branch_base.py +0 -0
  510. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_branch_capture.py +0 -0
  511. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_config_free_1712.py +0 -0
  512. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_deploy_units_endpoint.py +0 -0
  513. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_dirty_worktree.py +0 -0
  514. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  515. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_graph_self_heal.py +0 -0
  516. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_health_h3.py +0 -0
  517. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_idle_restart.py +0 -0
  518. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_push_failure.py +0 -0
  519. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_reap.py +0 -0
  520. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_repos_and_pull.py +0 -0
  521. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_restart_services_endpoint.py +0 -0
  522. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_skills_self_heal.py +0 -0
  523. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_startup_diagnostics.py +0 -0
  524. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_update.py +0 -0
  525. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_update_bluegreen.py +0 -0
  526. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_usage_limit.py +0 -0
  527. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_zero_commit.py +0 -0
  528. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ambient_home_isolation.py +0 -0
  529. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_approve_reject_plan.py +0 -0
  530. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_approve_usage_gate.py +0 -0
  531. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_assignment_already_recorded_daemon.py +0 -0
  532. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_log.py +0 -0
  533. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_outcome.py +0 -0
  534. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_query.py +0 -0
  535. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_auto_loop.py +0 -0
  536. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_auto_release_publish_2035.py +0 -0
  537. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_base_checkout_restore.py +0 -0
  538. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_block_log.py +0 -0
  539. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_cap_762.py +0 -0
  540. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_fixture.py +0 -0
  541. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_read_path.py +0 -0
  542. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_service.py +0 -0
  543. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_state.py +0 -0
  544. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_wire.py +0 -0
  545. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_brain.py +0 -0
  546. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_branch_model.py +0 -0
  547. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_bug_intake.py +0 -0
  548. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_build_worker_image_env_update.py +0 -0
  549. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cargo_cache.py +0 -0
  550. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_acceptance_gate_1950.py +0 -0
  551. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_parity_2091.py +0 -0
  552. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_store.py +0 -0
  553. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_claim.py +0 -0
  554. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_acceptance.py +0 -0
  555. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign.py +0 -0
  556. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  557. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_interactive_remote.py +0 -0
  558. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_provider.py +0 -0
  559. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  560. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_audit.py +0 -0
  561. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_chat_continue.py +0 -0
  562. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_decide.py +0 -0
  563. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_diagnose_config_provenance.py +0 -0
  564. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_diagnose_graph.py +0 -0
  565. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor.py +0 -0
  566. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor_config_free_1801.py +0 -0
  567. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  568. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_drive.py +0 -0
  569. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_drive_queue.py +0 -0
  570. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_escalate.py +0 -0
  571. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_fix_headless_review.py +0 -0
  572. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_gate_a.py +0 -0
  573. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_install_drift.py +0 -0
  574. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_install_skills.py +0 -0
  575. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_issue_create_label.py +0 -0
  576. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_issue_reopen.py +0 -0
  577. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_merge.py +0 -0
  578. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_assign.py +0 -0
  579. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_capture.py +0 -0
  580. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_chat_add_child.py +0 -0
  581. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_dispatch.py +0 -0
  582. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_gate_b.py +0 -0
  583. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_gate_c.py +0 -0
  584. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_order.py +0 -0
  585. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  586. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_ship.py +0 -0
  587. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_network.py +0 -0
  588. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_new_issue_chat.py +0 -0
  589. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_plans.py +0 -0
  590. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_portal.py +0 -0
  591. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_pull_artifact.py +0 -0
  592. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_queue.py +0 -0
  593. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_reattach_sessions.py +0 -0
  594. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_refine_board.py +0 -0
  595. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_preflight.py +0 -0
  596. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_propagate.py +0 -0
  597. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_window.py +0 -0
  598. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_repo_2220.py +0 -0
  599. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_scorecard.py +0 -0
  600. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_set_review_findings.py +0 -0
  601. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_advisory_terminal.py +0 -0
  602. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_merge_queue.py +0 -0
  603. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_provider.py +0 -0
  604. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_review_finalizing.py +0 -0
  605. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_test_failed_tag.py +0 -0
  606. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_usage_limit.py +0 -0
  607. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_sync_comments_873.py +0 -0
  608. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_test_plan.py +0 -0
  609. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_track.py +0 -0
  610. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_tui_update.py +0 -0
  611. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_wait.py +0 -0
  612. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_client_base_install.py +0 -0
  613. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_comments.py +0 -0
  614. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_completion_summary.py +0 -0
  615. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config.py +0 -0
  616. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_acceptance.py +0 -0
  617. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_audit.py +0 -0
  618. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_pricing.py +0 -0
  619. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  620. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_usage_gate.py +0 -0
  621. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_conflict_fix.py +0 -0
  622. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_conflict_fix_semantic.py +0 -0
  623. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test.py +0 -0
  624. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_baseline.py +0 -0
  625. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_populated_home.py +0 -0
  626. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_routing.py +0 -0
  627. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_toolchain.py +0 -0
  628. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_web_sse_restart_live.py +0 -0
  629. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coordinator_machine.py +0 -0
  630. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cross_platform_imports.py +0 -0
  631. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard.py +0 -0
  632. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_fixture.py +0 -0
  633. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_terminal.py +0 -0
  634. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_terminal_live.py +0 -0
  635. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_db.py +0 -0
  636. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dead_end.py +0 -0
  637. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_db_backup.py +0 -0
  638. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_web_dist.py +0 -0
  639. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_web_rollback.py +0 -0
  640. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_drive_queue_unit.py +0 -0
  641. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_manifest.py +0 -0
  642. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_units_lane.py +0 -0
  643. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_web_unit.py +0 -0
  644. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deps.py +0 -0
  645. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_diagnose.py +0 -0
  646. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dispatch.py +0 -0
  647. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dispatch_target_validation.py +0 -0
  648. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dist_name.py +0 -0
  649. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_done_housekeeping.py +0 -0
  650. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_state.py +0 -0
  651. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_tmux.py +0 -0
  652. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_capability_detection.py +0 -0
  653. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  654. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_image_provenance.py +0 -0
  655. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_errors.py +0 -0
  656. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_events.py +0 -0
  657. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_failure_class.py +0 -0
  658. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_filelock.py +0 -0
  659. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  660. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fix_of_force_override.py +0 -0
  661. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_config_health.py +0 -0
  662. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_health_probes.py +0 -0
  663. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_health_snapshot.py +0 -0
  664. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_freshness.py +0 -0
  665. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_a.py +0 -0
  666. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_b.py +0 -0
  667. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_snapshot_staleness.py +0 -0
  668. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gates.py +0 -0
  669. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  670. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_generated_types_fixture.py +0 -0
  671. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_github_ops.py +0 -0
  672. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_goal.py +0 -0
  673. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_graph_health.py +0 -0
  674. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_graph_selfheal_absent_2237.py +0 -0
  675. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_handoff.py +0 -0
  676. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_checks.py +0 -0
  677. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_cli.py +0 -0
  678. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_cli_graph.py +0 -0
  679. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_config.py +0 -0
  680. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_context.py +0 -0
  681. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_deploy_lane_facts.py +0 -0
  682. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_incident_regression.py +0 -0
  683. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_pypi.py +0 -0
  684. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_registry.py +0 -0
  685. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_timer_active.py +0 -0
  686. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_toolchain.py +0 -0
  687. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_unit_drift.py +0 -0
  688. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_unit_enablement.py +0 -0
  689. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_hooks.py +0 -0
  690. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_human_attended_437.py +0 -0
  691. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_init.py +0 -0
  692. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_integration.py +0 -0
  693. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_briefing_echo.py +0 -0
  694. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_prefill_state.py +0 -0
  695. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_session_relaunch.py +0 -0
  696. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_test_verdict_backstop.py +0 -0
  697. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_token_attribution.py +0 -0
  698. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_worktree.py +0 -0
  699. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_issue_store_seam.py +0 -0
  700. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_liveness_auditor.py +0 -0
  701. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_liveness_notify.py +0 -0
  702. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_machine_pause.py +0 -0
  703. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_merge_queue.py +0 -0
  704. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_merge_verify.py +0 -0
  705. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_chat.py +0 -0
  706. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_dispatch.py +0 -0
  707. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_gate.py +0 -0
  708. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_order.py +0 -0
  709. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_seam.py +0 -0
  710. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_mock_author.py +0 -0
  711. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_model_tiering.py +0 -0
  712. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_models.py +0 -0
  713. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_models_config_labels.py +0 -0
  714. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_needs_attention.py +0 -0
  715. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_network.py +0 -0
  716. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_new_issue_chat.py +0 -0
  717. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_next_release_tag.py +0 -0
  718. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_no_direct_gh_calls.py +0 -0
  719. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_node_shim.py +0 -0
  720. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_baseline.py +0 -0
  721. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_cli.py +0 -0
  722. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_collect.py +0 -0
  723. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_config.py +0 -0
  724. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_drive_seam.py +0 -0
  725. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_isolation.py +0 -0
  726. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_predicate.py +0 -0
  727. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_quiet_hours.py +0 -0
  728. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_service.py +0 -0
  729. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notify.py +0 -0
  730. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notify_drain.py +0 -0
  731. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_openapi.py +0 -0
  732. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_operational_defaults.py +0 -0
  733. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_overlap_fence.py +0 -0
  734. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_overlap_predict.py +0 -0
  735. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_packaged_deploy_units.py +0 -0
  736. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_parentage.py +0 -0
  737. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_paste_landed.py +0 -0
  738. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_pipeline.py +0 -0
  739. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_approve_plan_command.py +0 -0
  740. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_pr_command.py +0 -0
  741. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_review_command.py +0 -0
  742. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_only.py +0 -0
  743. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_parser.py +0 -0
  744. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_platform_paths.py +0 -0
  745. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_bridge.py +0 -0
  746. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_config.py +0 -0
  747. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_sync.py +0 -0
  748. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_pr_body_lint.py +0 -0
  749. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_prereqs.py +0 -0
  750. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_production_db_guard.py +0 -0
  751. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_progress.py +0 -0
  752. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_provider_seam.py +0 -0
  753. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers.py +0 -0
  754. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers_config_labels.py +0 -0
  755. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers_pty.py +0 -0
  756. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_quiet_hours.py +0 -0
  757. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_quiet_hours_store_2146.py +0 -0
  758. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reap_merged_sessions.py +0 -0
  759. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reap_stale_interactive_tick.py +0 -0
  760. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile.py +0 -0
  761. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_branch.py +0 -0
  762. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_completions.py +0 -0
  763. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_merges.py +0 -0
  764. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_no_agent_record.py +0 -0
  765. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_tick.py +0 -0
  766. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_usage_limit_done.py +0 -0
  767. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_refine_chat.py +0 -0
  768. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_2101.py +0 -0
  769. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  770. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_deadlock_2240.py +0 -0
  771. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_propagate.py +0 -0
  772. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_unified_1242.py +0 -0
  773. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_verify.py +0 -0
  774. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_window.py +0 -0
  775. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_remote_auto_prune.py +0 -0
  776. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_remote_interactive_reaper.py +0 -0
  777. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_edit_2220.py +0 -0
  778. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_graph_fleet_2237.py +0 -0
  779. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_onboard_2220.py +0 -0
  780. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_report_result_push.py +0 -0
  781. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reports.py +0 -0
  782. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry.py +0 -0
  783. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry_advisory_1606.py +0 -0
  784. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry_type_1636.py +0 -0
  785. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_revalidate.py +0 -0
  786. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review.py +0 -0
  787. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_end_review_without_verdict.py +0 -0
  788. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_parse_failure_diagnostic.py +0 -0
  789. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_reaffirm.py +0 -0
  790. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_state.py +0 -0
  791. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_backstop.py +0 -0
  792. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_override_audit.py +0 -0
  793. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_relay.py +0 -0
  794. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_zero_commits.py +0 -0
  795. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_scoped_review_wiring.py +0 -0
  796. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_scorecard.py +0 -0
  797. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_serve.py +0 -0
  798. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_serve_app_board_trim.py +0 -0
  799. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_session.py +0 -0
  800. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_slice_issue_attribution.py +0 -0
  801. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke.py +0 -0
  802. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke_live_checkout_restore.py +0 -0
  803. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke_workflow.py +0 -0
  804. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_spend_ceiling.py +0 -0
  805. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_spend_ceiling_coordinator.py +0 -0
  806. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_split.py +0 -0
  807. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_split_work.py +0 -0
  808. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stage_projection.py +0 -0
  809. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stalled_pipeline.py +0 -0
  810. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_state.py +0 -0
  811. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_state_review_findings_daemon.py +0 -0
  812. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_status_fleet_footer.py +0 -0
  813. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stop_1567.py +0 -0
  814. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stuck.py +0 -0
  815. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_terminal_command.py +0 -0
  816. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_author.py +0 -0
  817. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_chat.py +0 -0
  818. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_orchestrator.py +0 -0
  819. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_report.py +0 -0
  820. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_verdict_parsing.py +0 -0
  821. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_verdict_transcript_floor.py +0 -0
  822. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_board_audit.py +0 -0
  823. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_config_load_1080.py +0 -0
  824. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_daemon_routing_906.py +0 -0
  825. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_tmux_host.py +0 -0
  826. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_tmux_session.py +0 -0
  827. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_transcript_floor.py +0 -0
  828. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage.py +0 -0
  829. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage_limits.py +0 -0
  830. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage_rollup.py +0 -0
  831. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_venv_live_install_2121.py +0 -0
  832. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_version_single_source.py +0 -0
  833. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_watch.py +0 -0
  834. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  835. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_events.py +0 -0
  836. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_image_pin_sync.py +0 -0
  837. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_safety.py +0 -0
  838. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_test_scoping.py +0 -0
  839. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worktree.py +0 -0
  840. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  841. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/Cargo.lock +0 -0
  842. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/Cargo.toml +0 -0
  843. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/cargo-config-local-quadraui.toml.example +0 -0
  844. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/audit.rs +0 -0
  845. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/chat.rs +0 -0
  846. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/data.rs +0 -0
  847. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/dialogs.rs +0 -0
  848. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/doc_tabs.rs +0 -0
  849. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/drive.rs +0 -0
  850. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/drive_queue.rs +0 -0
  851. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/escalation.rs +0 -0
  852. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/events.rs +0 -0
  853. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fixtures.rs +0 -0
  854. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_health.rs +0 -0
  855. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_sessions.rs +0 -0
  856. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_terminals.rs +0 -0
  857. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/format.rs +0 -0
  858. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/milestone_dag.rs +0 -0
  859. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/mod.rs +0 -0
  860. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/msv.rs +0 -0
  861. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/pipeline.rs +0 -0
  862. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/plans.rs +0 -0
  863. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/render.rs +0 -0
  864. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/reports.rs +0 -0
  865. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/sessions.rs +0 -0
  866. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/settings_ui.rs +0 -0
  867. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/sidebar.rs +0 -0
  868. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/terminal.rs +0 -0
  869. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/tests.rs +0 -0
  870. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/types.rs +0 -0
  871. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/workspace.rs +0 -0
  872. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/bin/gtk.rs +0 -0
  873. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/commands.rs +0 -0
  874. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/lib.rs +0 -0
  875. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/main.rs +0 -0
  876. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/settings.rs +0 -0
  877. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/tests/acceptance.rs +0 -0
  878. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/tests/cli.rs +0 -0
  879. {code_coordinator-0.5.163 → code_coordinator-0.5.165}/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.163
3
+ Version: 0.5.165
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.163
3
+ Version: 0.5.165
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.163",
2
+ "tag": "0.5.165",
3
3
  "distance": 0,
4
- "node": "g6fa07c5850b078c8d3d43576ceee2b342698e255",
4
+ "node": "g5bd13e9adba9bf24c0bf6aedd8cb4bd19bb41bb1",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-19"
@@ -996,22 +996,35 @@ def _decide_acceptance_landing(
996
996
  something that will happen, and waiting for the fourth is the #1526
997
997
  defect: an unbounded wait for an event that cannot occur.
998
998
 
999
- Three shapes get an immediate, actionable exit instead of a wait,
1000
- because for each of them the corrective action belongs to a loop that
1001
- will never run for this row:
999
+ Two shapes get an immediate, actionable exit instead of a wait, because
1000
+ for each of them the corrective action belongs to a loop that will never
1001
+ run for this row:
1002
1002
 
1003
1003
  * a FAILED slice test — the work row's equivalent dispatches
1004
1004
  ``coord fix``, but nothing dispatches one for a ``test-author`` row
1005
1005
  whose Test stage failed;
1006
- * a ``request-changes`` slice review — ``auto_loop`` accepts a
1007
- ``test-author`` fix (``FIX_DISPATCH_TYPES``), but the daemon drain
1008
- deliberately excludes fix dispatch (#476/#477, and #1692's own
1009
- analysis), so for the work row it is THIS driver that runs
1010
- ``coord fix``; there was no such arm for the slice;
1011
1006
  * ``--no-merge`` — the slice merge is a hard prerequisite for
1012
1007
  dispatching any work at all (#1138), so with merging switched off the
1013
1008
  run cannot progress, and saying so beats idling to the deadline.
1014
1009
 
1010
+ A third shape — a ``request-changes`` slice review — used to be a fourth
1011
+ immediate exit for the identical reason (``auto_loop`` accepts a
1012
+ ``test-author`` fix via ``FIX_DISPATCH_TYPES``, but the daemon drain
1013
+ deliberately excludes fix dispatch — #476/#477, and #1692's own
1014
+ analysis — so for the work row it is THIS driver that runs
1015
+ ``coord fix``, and there was no such arm for the slice). #2425: it no
1016
+ longer is. Every retry of this lane re-dispatched a fresh author on the
1017
+ SAME branch name instead of fixing the one review blocking it
1018
+ (claude-coordinator#2286 — 11 re-authoring attempts over ~11h with the
1019
+ review's findings never once addressed), because re-authoring was the
1020
+ only path this lane had. Below, ``request-changes`` now gets the same
1021
+ bounded ``coord fix <acceptance_review_aid>`` arm :func:`decide` already
1022
+ runs for the work row's own review (the ``REVIEW: request-changes → fix
1023
+ round`` arm), spending :attr:`DriveCounters.acceptance`'s OWN
1024
+ ``fix_rounds`` — not the work row's — for the same #2079 reason the
1025
+ slice's merge attempts get their own budget: a struggling slice review
1026
+ must not silently leave the issue's real fix budget at zero.
1027
+
1015
1028
  The merge itself reuses :func:`_decide_merge` verbatim against a shadow
1016
1029
  :class:`~coord.drive_state.IssueState` whose "work row" IS the slice —
1017
1030
  that is what carries #1891 (CI not reported → wait, don't retry), #1892
@@ -1049,15 +1062,81 @@ def _decide_acceptance_landing(
1049
1062
  )
1050
1063
 
1051
1064
  if state.acceptance_review_verdict == "request-changes":
1052
- return _die(
1053
- f"the JIT acceptance slice {aid} was reviewed REQUEST-CHANGES "
1054
- f"(review {state.acceptance_review_aid or 'unknown'}) — it will "
1055
- "never reach the merge queue until that is addressed, and no "
1056
- "loop dispatches the fix for a test-author row on its own.\n"
1057
- f" Findings: coord log {state.acceptance_review_aid or aid}\n"
1058
- f" Fix it: coord fix {state.acceptance_review_aid or aid}\n"
1059
- " or re-run coord drive with --no-acceptance to skip JIT "
1060
- "authoring."
1065
+ # #2425: the slice's own twin of `decide()`'s `REVIEW: request-
1066
+ # changes → fix round` arm — see the docstring above for why this
1067
+ # used to be a bare `_die()`. `coord fix` already accepts a
1068
+ # `type="test-author"` review id (#1622/#1692:
1069
+ # `auto_loop.FIX_DISPATCH_TYPES` includes `SEALED_PATH_AUTHOR_TYPES`,
1070
+ # which is where "test-author" lives), so this is the SAME command
1071
+ # the work-row arm dispatches, not a second implementation of it.
1072
+ slice_counters = counters.slice_budget()
1073
+ if not state.auto_loop:
1074
+ return _die(
1075
+ "the JIT acceptance slice's review requested changes, but "
1076
+ "pipeline.auto_loop is OFF — the review→fix path is "
1077
+ "switched off in coordinator.yml, so no fix can be "
1078
+ "dispatched.\n"
1079
+ f" Findings: coord log {state.acceptance_review_aid or aid}\n"
1080
+ " Continue by hand: coord assign --interactive --fix-of "
1081
+ f"{state.acceptance_review_aid or aid}"
1082
+ )
1083
+ # Belt-and-braces, mirroring the work-row arm: `acceptance_review_
1084
+ # verdict` and `acceptance_review_aid` are read off the SAME board
1085
+ # row (drive_state.project), so a verdict without an id is
1086
+ # impossible today. Refuse to guess rather than dispatch `coord fix`
1087
+ # against the wrong assignment.
1088
+ if not state.acceptance_review_aid:
1089
+ return _die(
1090
+ "the JIT acceptance slice's review verdict is "
1091
+ "'request-changes' but no review assignment id is on the "
1092
+ "board — refusing to guess which review to fix. Inspect: "
1093
+ f"coord gates {state.repo} {state.issue}"
1094
+ )
1095
+ # Same de-duplication latch as `review_fix_dispatched_for` on the
1096
+ # work row's own arm, just on the slice's own counters: `coord fix`
1097
+ # returns as soon as the fix worker is dispatched, and the board
1098
+ # this driver polls needs a beat to show the new row.
1099
+ if slice_counters.review_fix_dispatched_for == state.acceptance_review_aid:
1100
+ return _wait(
1101
+ label=(
1102
+ "ACCEPTANCE: fix already dispatched for "
1103
+ f"{state.acceptance_review_aid} — waiting for the fix "
1104
+ "row to appear on the board"
1105
+ )
1106
+ )
1107
+ if slice_counters.fix_rounds >= opts.max_fix_rounds:
1108
+ return _die(
1109
+ f"the JIT acceptance slice {aid} was reviewed REQUEST-"
1110
+ f"CHANGES (review {state.acceptance_review_aid}) after "
1111
+ f"{slice_counters.fix_rounds} fix round(s) this drive spent "
1112
+ "landing the slice — stopping.\n"
1113
+ f" Findings: coord log {state.acceptance_review_aid}\n"
1114
+ f" Continue by hand: coord fix {state.acceptance_review_aid}\n"
1115
+ " or re-run coord drive with --no-acceptance to skip JIT "
1116
+ "authoring."
1117
+ )
1118
+ slice_counters.fix_rounds += 1
1119
+ slice_counters.review_fix_dispatched_for = state.acceptance_review_aid
1120
+ return Action(
1121
+ kind=RUN,
1122
+ label=(
1123
+ "ACCEPTANCE: review request-changes → fix round "
1124
+ f"{slice_counters.fix_rounds}/{opts.max_fix_rounds} "
1125
+ f"(coord fix {state.acceptance_review_aid})"
1126
+ ),
1127
+ command=("fix", state.acceptance_review_aid),
1128
+ error_message=(
1129
+ f"coord fix {state.acceptance_review_aid} failed to "
1130
+ "dispatch a fix for the JIT acceptance slice's review.\n"
1131
+ " Its refusals are all guards doing their job: auto_loop "
1132
+ "disabled, no structured\n"
1133
+ " findings, approve-with-nits (#476), max_review_"
1134
+ "iterations, or the #522\n"
1135
+ " terminal-work guard — the message above names which.\n"
1136
+ f" Check: coord log {state.acceptance_review_aid} / "
1137
+ "continue by hand: coord assign --interactive --fix-of "
1138
+ f"{state.acceptance_review_aid}"
1139
+ ),
1061
1140
  )
1062
1141
 
1063
1142
  if not opts.do_merge:
@@ -97,6 +97,7 @@ from coord.merge_queue import (
97
97
  is_ci_infra_reason,
98
98
  is_ci_pending_reason,
99
99
  is_ci_unreadable_reason,
100
+ is_stale_smoke_reason,
100
101
  )
101
102
  from coord.models import is_policy_refusal_reason
102
103
 
@@ -1810,6 +1811,57 @@ def _dispatch_produced_nothing(entry: QueueEntry, facts: IssueFacts) -> bool:
1810
1811
  return facts.last_dispatched_at < entry.launched_at
1811
1812
 
1812
1813
 
1814
+ def _is_merge_gate_block_reason(reason: str | None) -> bool:
1815
+ """#2424: does *reason* already name a merge-gate block — a death whose
1816
+ real cause is a LATER stage (merge), not a dispatch-layer failure?
1817
+
1818
+ `_dispatch_produced_nothing`'s own comparison (``facts.last_dispatched_at
1819
+ < entry.launched_at``) goes stale specifically for a relaunch whose only
1820
+ job is retrying the Merge stage: by design, that relaunch dispatches no
1821
+ new assignment (there is nothing left to dispatch — Work/Test/Review
1822
+ already completed), so the comparison reads exactly like a genuine
1823
+ dispatch failure even though three real assignments did real work. This
1824
+ is the textual escape hatch for that case: when *reason* itself already
1825
+ names a merge-gate block, the generic "#2273 no assignment was ever
1826
+ created" note must not be layered on top of it — see
1827
+ claude-coordinator#2405 (stale smoke verdict) and coord-web#2 (red CI),
1828
+ both live escalations where the dispatch-note actively misdirected an
1829
+ operator toward `drive-queue remove && add` (a wasted Work/Test/Review
1830
+ cycle) instead of the real one-line fix (`coord merge --revalidate`, or
1831
+ fixing the failing CI check).
1832
+
1833
+ Four shapes, all written by `coord/drive.py`'s own merge-stage decision
1834
+ functions — none of them a "no assignment created" signal:
1835
+
1836
+ * `_die`'s exhausted-merge-attempts wording ("merge attempted N times
1837
+ without landing") — `coord assign` succeeded and Work/Test/Review all
1838
+ completed; the LOOP inside a single drive session that kept retrying
1839
+ `coord merge --only` simply ran out of its own attempt budget
1840
+ (#1505/#2078).
1841
+ * `is_stale_smoke_reason` — the #1479 staleness race: the merge base
1842
+ moved out from under a still-valid smoke verdict.
1843
+ * "checks failed" — `coord.merge_queue`'s own `checks_failed` prose
1844
+ (``f"checks failed: {summary}"``): red CI on a PR that was dispatched,
1845
+ built, and reviewed fine.
1846
+ * `_escalate_merge`'s own gate-divergence/terminal-status wording
1847
+ ("smoke_required —" / "review_required —" / "merge_status=...") — the
1848
+ #1505/#1526 immediate-escalation path, which already recorded its own
1849
+ accurate `coord escalate record` before this drive exited.
1850
+ """
1851
+ if not reason:
1852
+ return False
1853
+ lowered = reason.lower()
1854
+ if "merge attempted" in lowered:
1855
+ return True
1856
+ if is_stale_smoke_reason(reason):
1857
+ return True
1858
+ if "checks failed" in lowered:
1859
+ return True
1860
+ if "smoke_required —" in lowered or "review_required —" in lowered:
1861
+ return True
1862
+ return "merge_status=" in lowered
1863
+
1864
+
1813
1865
  def _is_empty_branch_death_reason(reason: str | None) -> bool:
1814
1866
  """#2363: does *reason* name the "claimed success, wrote nothing"
1815
1867
  signature — an acceptance-author or plain work session that exited
@@ -1858,6 +1910,7 @@ def _retry_backoff_reason(
1858
1910
  now: float | None,
1859
1911
  attempts: int,
1860
1912
  retry_backoff_at: float | None,
1913
+ own_reason: str | None = None,
1861
1914
  ) -> str:
1862
1915
  """#2273's launch-side guard: ``''`` unless *entry* is still inside its
1863
1916
  post-death backoff window.
@@ -1898,6 +1951,23 @@ def _retry_backoff_reason(
1898
1951
  ``retry_backoff_at is None`` (a pure-logic caller with no clock, or a row
1899
1952
  predating this column — both degrade to the pre-#2273 behaviour exactly,
1900
1953
  the same posture every other clock-gated check in this module takes).
1954
+
1955
+ *own_reason* (#2424 follow-up): the same text the launch-side dispatch
1956
+ note is gated on (see the comment above `dispatch_only` in
1957
+ `_reconcile_running`'s retry/exhausted branches). Passed through so the
1958
+ widened `DISPATCH_FAILURE_MIN_BACKOFF_SECONDS` spacing below answers the
1959
+ identical "was this actually a dispatch failure" question the launch-side
1960
+ note already answers, rather than recomputing it from
1961
+ `_dispatch_produced_nothing` alone — which, like the note before #2424,
1962
+ cannot tell a genuine pre-`coord assign` crash from a merge-only relaunch
1963
+ that dispatches no new assignment by design. Once `own_reason` already
1964
+ names a merge-gate block (`_is_merge_gate_block_reason`), the 300s floor
1965
+ would be pure mispacing: the rationale for widening it ("a transient
1966
+ dispatch failure cannot spend the whole retry budget inside one tick
1967
+ cadence") does not apply once the cause is known to be a merge-gate
1968
+ block, not a dispatch failure. ``None`` (the default) degrades to the
1969
+ pre-#2424-follow-up behaviour exactly, for callers that have not been
1970
+ updated to pass it.
1901
1971
  """
1902
1972
  if now is None or attempts <= 0 or retry_backoff_at is None:
1903
1973
  return ""
@@ -1906,7 +1976,9 @@ def _retry_backoff_reason(
1906
1976
  return ""
1907
1977
  idx = min(attempts - 1, len(RETRY_BACKOFF_SECONDS) - 1)
1908
1978
  backoff = RETRY_BACKOFF_SECONDS[idx]
1909
- if _dispatch_produced_nothing(entry, facts):
1979
+ if _dispatch_produced_nothing(entry, facts) and not _is_merge_gate_block_reason(
1980
+ own_reason
1981
+ ):
1910
1982
  backoff = max(backoff, DISPATCH_FAILURE_MIN_BACKOFF_SECONDS)
1911
1983
  if age >= backoff:
1912
1984
  return ""
@@ -2347,7 +2419,21 @@ def _reconcile_running(
2347
2419
  # — or the escalation this produces once the budget IS exhausted — sees
2348
2420
  # "no assignment was ever created" instead of a bare exit code that
2349
2421
  # could mean anything.
2350
- dispatch_only = _dispatch_produced_nothing(entry, facts)
2422
+ #
2423
+ # #2424: EXCEPT when `own_reason` already names a merge-gate block
2424
+ # ("merge attempted N times without landing", a stale smoke verdict, red
2425
+ # CI, ...) — a relaunch whose only job is retrying the Merge stage
2426
+ # dispatches no new assignment BY DESIGN (Work/Test/Review already
2427
+ # completed; there is nothing left to dispatch), so the comparison above
2428
+ # reads exactly like a dispatch failure even though it plainly is not.
2429
+ # The generic note is additive evidence for when nothing more specific is
2430
+ # known; it must never be layered on top of a reason that already
2431
+ # contradicts it — see `_is_merge_gate_block_reason` for the two live
2432
+ # escalations (claude-coordinator#2405, coord-web#2) this false-positive
2433
+ # actually produced.
2434
+ dispatch_only = _dispatch_produced_nothing(
2435
+ entry, facts
2436
+ ) and not _is_merge_gate_block_reason(own_reason)
2351
2437
  dispatch_note = (
2352
2438
  " — no assignment was ever created for this run (#2273): likely an "
2353
2439
  "infrastructure/dispatch-layer failure, not a code defect"
@@ -3604,17 +3690,24 @@ def plan_tick(
3604
3690
  `effective_last_reason`) so both call sites below — the report-only
3605
3691
  dry-run pass and the persisted `last_reason` write — get the combined
3606
3692
  text for free, with no change needed at either site.
3693
+
3694
+ #2424 follow-up: that same `effective_last_reason` resolution is also
3695
+ what `_retry_backoff_reason` needs to answer its own "was this
3696
+ actually a dispatch failure" question — see its `own_reason`
3697
+ parameter's docstring — so it is resolved once, here, and passed to
3698
+ both.
3607
3699
  """
3700
+ previous = effective_last_reason.get(candidate.key, candidate.last_reason)
3608
3701
  backoff = _retry_backoff_reason(
3609
3702
  candidate,
3610
3703
  board.facts(candidate.key),
3611
3704
  now,
3612
3705
  effective_attempts.get(candidate.key, candidate.attempts),
3613
3706
  retry_backoff_at_map.get(candidate.key, candidate.retry_backoff_at),
3707
+ own_reason=previous,
3614
3708
  )
3615
3709
  if not backoff:
3616
3710
  return ""
3617
- previous = effective_last_reason.get(candidate.key, candidate.last_reason)
3618
3711
  return _augment_backoff_reason(previous, backoff)
3619
3712
 
3620
3713
  # #1972's projection of per-repo occupancy AS THE WALK SEES IT: the board
@@ -1304,18 +1304,112 @@ def test_failed_slice_test_stops_with_the_fix_command():
1304
1304
  assert "coord fix ta1" in action.message
1305
1305
 
1306
1306
 
1307
- def test_slice_review_request_changes_stops_with_the_fix_command():
1307
+ def test_slice_review_request_changes_dispatches_a_fix():
1308
+ """#2425: the JIT lane's own twin of the work row's `REVIEW:
1309
+ request-changes → fix round` arm — before this, a request-changes
1310
+ verdict on the slice was a dead end nothing ever dispatched a fix for
1311
+ (claude-coordinator#2286: 11 re-authoring retries over ~11h, never once
1312
+ addressing the review)."""
1313
+ counters = DriveCounters()
1314
+ action = landing_step(
1315
+ landing_state(
1316
+ acceptance_review_verdict="request-changes",
1317
+ acceptance_merge_status="",
1318
+ ),
1319
+ counters=counters,
1320
+ )
1321
+ assert action.kind == RUN
1322
+ assert action.command == ("fix", "rv1")
1323
+ assert "rv1" in action.label
1324
+ assert not action.is_exit
1325
+ # Spends the SLICE's own budget, not the work row's (#2079's rule,
1326
+ # extended to fix rounds): landing the slice must not silently leave
1327
+ # the issue's own fix budget at zero.
1328
+ assert counters.fix_rounds == 0
1329
+ assert counters.acceptance is not None
1330
+ assert counters.acceptance.fix_rounds == 1
1331
+ assert counters.acceptance.review_fix_dispatched_for == "rv1"
1332
+
1333
+
1334
+ def test_slice_review_fix_already_dispatched_waits_for_the_board():
1335
+ """The de-dup latch: a second poll against the SAME review id must not
1336
+ spawn a second fix worker on the same branch (#476/#477)."""
1337
+ counters = DriveCounters()
1338
+ counters.slice_budget().review_fix_dispatched_for = "rv1"
1308
1339
  action = landing_step(
1309
1340
  landing_state(
1310
1341
  acceptance_review_verdict="request-changes",
1311
1342
  acceptance_merge_status="",
1343
+ ),
1344
+ counters=counters,
1345
+ )
1346
+ assert action.kind == WAIT
1347
+ assert "rv1" in action.label
1348
+ assert counters.acceptance.fix_rounds == 0
1349
+
1350
+
1351
+ def test_slice_review_fix_rounds_are_bounded_then_die():
1352
+ """Bounded the same way the work row's fix loop is — a slice review that
1353
+ keeps coming back request-changes must eventually escalate, not spin."""
1354
+ opts = DriveOptions(machine="precision", max_fix_rounds=2)
1355
+ counters = DriveCounters()
1356
+ for expected_round in (1, 2):
1357
+ action = landing_step(
1358
+ landing_state(
1359
+ acceptance_review_verdict="request-changes",
1360
+ acceptance_merge_status="",
1361
+ ),
1362
+ opts,
1363
+ counters=counters,
1312
1364
  )
1365
+ assert action.kind == RUN
1366
+ assert action.command == ("fix", "rv1")
1367
+ assert counters.acceptance.fix_rounds == expected_round
1368
+ # Clear the latch between rounds the same way a changed review row
1369
+ # would on the real board (a fresh review after the fix landed).
1370
+ counters.acceptance.review_fix_dispatched_for = ""
1371
+
1372
+ action = landing_step(
1373
+ landing_state(
1374
+ acceptance_review_verdict="request-changes",
1375
+ acceptance_merge_status="",
1376
+ ),
1377
+ opts,
1378
+ counters=counters,
1313
1379
  )
1314
1380
  assert action.is_exit
1315
1381
  assert action.exit_code == EXIT_TERMINAL_FAILURE
1382
+ assert "2 fix round(s)" in action.message
1316
1383
  assert "coord fix rv1" in action.message
1317
1384
 
1318
1385
 
1386
+ def test_slice_review_request_changes_with_auto_loop_off_dies_without_dispatching():
1387
+ action = landing_step(
1388
+ landing_state(
1389
+ acceptance_review_verdict="request-changes",
1390
+ acceptance_merge_status="",
1391
+ auto_loop=False,
1392
+ )
1393
+ )
1394
+ assert action.is_exit
1395
+ assert action.exit_code == EXIT_TERMINAL_FAILURE
1396
+ assert "auto_loop is OFF" in action.message
1397
+ assert "coord assign --interactive --fix-of rv1" in action.message
1398
+
1399
+
1400
+ def test_slice_review_request_changes_with_no_review_id_refuses_to_guess():
1401
+ action = landing_step(
1402
+ landing_state(
1403
+ acceptance_review_verdict="request-changes",
1404
+ acceptance_merge_status="",
1405
+ acceptance_review_aid="",
1406
+ )
1407
+ )
1408
+ assert action.is_exit
1409
+ assert action.exit_code == EXIT_TERMINAL_FAILURE
1410
+ assert "refusing to guess" in action.message
1411
+
1412
+
1319
1413
  def test_no_merge_refuses_up_front_instead_of_idling_to_the_deadline():
1320
1414
  """`--no-merge` makes the run unable to progress at all (#1138 refuses
1321
1415
  the work dispatch until the slice lands) — say so immediately."""
@@ -1512,6 +1512,40 @@ def test_a_dispatch_failure_that_created_no_assignment_backs_off_longer():
1512
1512
  assert len(backoff) == 1 and backoff[0].backing_off is True
1513
1513
 
1514
1514
 
1515
+ def test_a_merge_gate_block_retry_does_not_get_the_widened_backoff():
1516
+ """#2424 follow-up: identical setup to the test above (no board-visible
1517
+ assignment for this launch — by itself indistinguishable from a genuine
1518
+ dispatch failure) EXCEPT the entry's own `last_reason` already names a
1519
+ merge-gate block. `_retry_backoff_reason` must not widen the spacing to
1520
+ `DISPATCH_FAILURE_MIN_BACKOFF_SECONDS` (300s) on top of a reason that
1521
+ already says the real cause is a merge-gate block, not a dispatch
1522
+ failure — the same "one question, one answer" fix `_is_merge_gate_block_
1523
+ reason` already applies to the escalation text, now also applied to the
1524
+ retry-pacing decision that answers the same question independently."""
1525
+ launched_at = NOW - DRIVE_STARTUP_GRACE_SECONDS - 400.0
1526
+ entries = [
1527
+ entry(
1528
+ 1650,
1529
+ position=3,
1530
+ state=STATE_WAITING,
1531
+ attempts=1,
1532
+ launched_at=launched_at,
1533
+ # Same 90s elapsed as the widened-backoff test above: clears the
1534
+ # plain RETRY_BACKOFF_SECONDS[0] (60s) but not the widened 300s
1535
+ # floor.
1536
+ retry_backoff_at=NOW - 90.0,
1537
+ last_reason=(
1538
+ "merge attempted 3 times without landing. (attempt 2/5) — "
1539
+ "requeued at position 3"
1540
+ ),
1541
+ )
1542
+ ]
1543
+ facts = IssueFacts(known=True, issue_state="open") # no assignment at all
1544
+ view = BoardView(issues={entry_key(REPO, 1650): facts})
1545
+ plan = plan_tick(entries, view, capacity=1, now=NOW)
1546
+ assert plan.launch is not None and plan.launch.issue == 1650
1547
+
1548
+
1515
1549
  def test_a_dispatched_run_that_died_later_gets_the_plain_backoff_only():
1516
1550
  """The counterpart: a launch that DID dispatch (an assignment exists,
1517
1551
  created after `launched_at`) is NOT treated as a pure dispatch failure —
@@ -1555,6 +1589,149 @@ def test_exhausted_reason_names_a_dispatch_only_failure():
1555
1589
  assert "no assignment was ever created for this run" in plan.blocked[0].reason
1556
1590
 
1557
1591
 
1592
+ def test_exhausted_merge_gate_block_does_not_get_the_dispatch_note():
1593
+ """#2424: claude-coordinator#2405 / coord-web#2 — a relaunch whose only
1594
+ job is retrying the Merge stage dispatches no NEW assignment by design
1595
+ (Work/Test/Review already completed), so `_dispatch_produced_nothing`'s
1596
+ comparison reads exactly like a genuine dispatch failure. The own exit
1597
+ reason already names the real cause (a merge-gate block); the #2273 note
1598
+ must not be layered on top of it, or an operator reading the escalation
1599
+ is misdirected toward `drive-queue remove && add` (a wasted Work/Test/
1600
+ Review cycle) instead of `coord merge --revalidate`."""
1601
+ entries = [
1602
+ entry(
1603
+ 1650,
1604
+ state=STATE_RUNNING,
1605
+ attempts=DEFAULT_MAX_ATTEMPTS - 1,
1606
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
1607
+ )
1608
+ ]
1609
+ own_reason = (
1610
+ "drive exited for claude-coordinator#1650 (exit_code=1): merge "
1611
+ "attempted 3 times without landing.\n"
1612
+ " Last board state: status='CONFLICT' reason='smoke test verdict "
1613
+ "is stale'"
1614
+ )
1615
+ # No assignment dispatched AFTER `launched_at` — exactly the shape a
1616
+ # merge-only relaunch produces, and exactly what used to trip the #2273
1617
+ # note despite three real assignments already having done real work.
1618
+ facts = IssueFacts(known=True, issue_state="open")
1619
+ view = BoardView(issues={entry_key(REPO, 1650): facts})
1620
+ plan = plan_tick(
1621
+ entries, view, capacity=1, now=NOW,
1622
+ exit_reasons={entry_key(REPO, 1650): own_reason},
1623
+ )
1624
+ assert plan.reconciles[0].outcome == "exhausted"
1625
+ reason = plan.blocked[0].reason
1626
+ assert own_reason in reason
1627
+ assert "no assignment was ever created" not in reason
1628
+ assert "infrastructure/dispatch-layer failure" not in reason
1629
+
1630
+
1631
+ def test_exhausted_checks_failed_does_not_get_the_dispatch_note():
1632
+ """Same #2424 fix, the red-CI shape (coord-web#2): `own_reason` names a
1633
+ `checks_failed` merge-gate block, not a dispatch failure."""
1634
+ entries = [
1635
+ entry(
1636
+ 1650,
1637
+ state=STATE_RUNNING,
1638
+ attempts=DEFAULT_MAX_ATTEMPTS - 1,
1639
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
1640
+ )
1641
+ ]
1642
+ own_reason = (
1643
+ "drive exited for claude-coordinator#1650 (exit_code=1): merge "
1644
+ "attempted 3 times without landing.\n"
1645
+ " Last board state: status='CONFLICT' reason='checks failed: "
1646
+ "checks'"
1647
+ )
1648
+ facts = IssueFacts(known=True, issue_state="open")
1649
+ view = BoardView(issues={entry_key(REPO, 1650): facts})
1650
+ plan = plan_tick(
1651
+ entries, view, capacity=1, now=NOW,
1652
+ exit_reasons={entry_key(REPO, 1650): own_reason},
1653
+ )
1654
+ assert plan.reconciles[0].outcome == "exhausted"
1655
+ reason = plan.blocked[0].reason
1656
+ assert "no assignment was ever created" not in reason
1657
+
1658
+
1659
+ def test_exhausted_immediate_escalation_merge_status_does_not_get_the_dispatch_note():
1660
+ """#2424's fourth documented shape: `_escalate_merge`'s #1505
1661
+ immediate-escalation path (`coord/drive.py:2809`), whose `Action.message`
1662
+ is `f"merge escalated: {reason}\\n gates: {gates_summary}\\n..."`
1663
+ (`coord/drive.py:2836`) and whose `reason` for a terminal/unrecognized
1664
+ merge status is `f"merge_status={status or '(empty)'} — no number of
1665
+ retries..."`. `_drive_exit_summary` then wraps that whole message as
1666
+ `f"drive exited for {ident} (exit_code={exit_code}): {reason}"`
1667
+ (`coord/drive.py:3677`) before it is read back verbatim as `own_reason` —
1668
+ so the real string never STARTS WITH "merge_status=", it merely CONTAINS
1669
+ it (both in the `reason` line and again in `gates_summary`'s own
1670
+ `merge_status=...` pair). A prior `.startswith("merge_status=")` check
1671
+ left this one shape unmatched — dead code against real data — so a drive
1672
+ that hit this exact path still got the false #2273 dispatch-note."""
1673
+ entries = [
1674
+ entry(
1675
+ 1650,
1676
+ state=STATE_RUNNING,
1677
+ attempts=DEFAULT_MAX_ATTEMPTS - 1,
1678
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
1679
+ )
1680
+ ]
1681
+ own_reason = (
1682
+ "drive exited for claude-coordinator#1650 (exit_code=1): merge "
1683
+ "escalated: merge_status=CONFLICT — no number of retries changes "
1684
+ "this; escalating on first encounter instead of burning the "
1685
+ "merge-attempt budget (#1505)\n"
1686
+ " gates: merge_status=CONFLICT | merge_reason=(none) | "
1687
+ "review_verdict=approved | test_state=passed | pr_url=(none)\n"
1688
+ " proposed: coord merge --plan --repo claude-coordinator "
1689
+ "# inspect the gates, then decide\n"
1690
+ " Recorded on the board — see: coord escalate list --repo "
1691
+ "claude-coordinator"
1692
+ )
1693
+ facts = IssueFacts(known=True, issue_state="open")
1694
+ view = BoardView(issues={entry_key(REPO, 1650): facts})
1695
+ plan = plan_tick(
1696
+ entries, view, capacity=1, now=NOW,
1697
+ exit_reasons={entry_key(REPO, 1650): own_reason},
1698
+ )
1699
+ assert plan.reconciles[0].outcome == "exhausted"
1700
+ reason = plan.blocked[0].reason
1701
+ assert own_reason in reason
1702
+ assert "no assignment was ever created" not in reason
1703
+ assert "infrastructure/dispatch-layer failure" not in reason
1704
+
1705
+
1706
+ def test_a_genuine_dispatch_failure_still_gets_the_note_alongside_own_reason():
1707
+ """Regression guard for #2424's fix: an own_reason that does NOT name a
1708
+ merge-gate block (a genuine pre-`coord assign` crash) must still get the
1709
+ #2273 note — the fix narrows the false-positive, it does not remove the
1710
+ signal entirely."""
1711
+ entries = [
1712
+ entry(
1713
+ 1650,
1714
+ state=STATE_RUNNING,
1715
+ attempts=DEFAULT_MAX_ATTEMPTS - 1,
1716
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
1717
+ )
1718
+ ]
1719
+ own_reason = (
1720
+ "drive exited for claude-coordinator#1650 (exit_code=1): unhandled "
1721
+ "exception in dispatch"
1722
+ )
1723
+ facts = IssueFacts(known=True, issue_state="open")
1724
+ view = BoardView(issues={entry_key(REPO, 1650): facts})
1725
+ plan = plan_tick(
1726
+ entries, view, capacity=1, now=NOW,
1727
+ exit_reasons={entry_key(REPO, 1650): own_reason},
1728
+ )
1729
+ assert plan.reconciles[0].outcome == "exhausted"
1730
+ reason = plan.blocked[0].reason
1731
+ assert own_reason in reason
1732
+ assert "no assignment was ever created for this run" in reason
1733
+
1734
+
1558
1735
  def test_a_dead_drive_out_of_attempts_blocks_and_escalates():
1559
1736
  entries = [
1560
1737
  entry(1650, state=STATE_RUNNING, attempts=DEFAULT_MAX_ATTEMPTS - 1)