code-coordinator 0.5.141__tar.gz → 0.5.143__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (866) hide show
  1. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/merge_queue.py +119 -15
  5. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/reconcile.py +22 -0
  6. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_drive_queue.py +56 -6
  7. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_merge_queue.py +140 -0
  8. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile.py +58 -0
  9. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/.gitignore +0 -0
  24. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/GOAL.md +0 -0
  26. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/LICENSE +0 -0
  27. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/README.md +0 -0
  29. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/board_bool_guard.py +0 -0
  49. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/ci_store.py +0 -0
  57. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/claim.py +0 -0
  58. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/cli.py +0 -0
  59. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/client.py +0 -0
  60. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/__init__.py +0 -0
  61. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/_common.py +0 -0
  62. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/acceptance.py +0 -0
  63. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/agent_ops.py +0 -0
  64. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/audit.py +0 -0
  65. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/chat.py +0 -0
  66. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/dispatch.py +0 -0
  67. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/dispatch_workers.py +0 -0
  68. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/drive.py +0 -0
  69. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/drive_queue.py +0 -0
  70. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/gate_a.py +0 -0
  71. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/gates.py +0 -0
  72. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/issues.py +0 -0
  73. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/lifecycle.py +0 -0
  74. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/merge.py +0 -0
  75. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/milestone.py +0 -0
  76. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/plan_followup.py +0 -0
  77. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/plans.py +0 -0
  78. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/portal.py +0 -0
  79. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/release.py +0 -0
  80. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/repo.py +0 -0
  81. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/report.py +0 -0
  82. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/review.py +0 -0
  83. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/scorecard.py +0 -0
  84. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/sessions.py +0 -0
  85. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/setup.py +0 -0
  86. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/status.py +0 -0
  87. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/terminal.py +0 -0
  88. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/test_gate.py +0 -0
  89. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/commands/tui.py +0 -0
  90. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/comments.py +0 -0
  91. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/config.py +0 -0
  92. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/config_reload.py +0 -0
  93. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/conflict_fix.py +0 -0
  94. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dao.py +0 -0
  95. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/__init__.py +0 -0
  96. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/fixture.py +0 -0
  97. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/index.html +0 -0
  98. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/server.py +0 -0
  99. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/terminal.py +0 -0
  100. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/.gitignore +0 -0
  101. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/components.json +0 -0
  102. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  103. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  104. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  105. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  106. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  107. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  108. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  109. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  110. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  111. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/index.html +0 -0
  112. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  113. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/sw.js +0 -0
  114. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  115. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  116. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  117. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  118. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  119. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  120. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  121. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  122. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  123. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  124. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/eslint.config.js +0 -0
  125. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/index.html +0 -0
  126. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  127. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/package-lock.json +0 -0
  128. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/package.json +0 -0
  129. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  130. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/playwright.config.ts +0 -0
  131. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/postcss.config.js +0 -0
  132. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  133. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  134. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  135. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/App.tsx +0 -0
  136. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/api/client.ts +0 -0
  137. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  138. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  139. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  140. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  141. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  142. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  143. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  144. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  145. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  146. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  147. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  148. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  149. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  150. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  151. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  152. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  153. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  154. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  155. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  156. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  157. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  158. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  159. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  160. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  161. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  162. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  163. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  164. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  165. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  166. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  167. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  168. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  169. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  170. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  171. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  172. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/index.css +0 -0
  173. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  174. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  175. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/main.tsx +0 -0
  176. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  177. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  178. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  179. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  180. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  181. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  182. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  183. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  184. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  185. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  186. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  187. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  188. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  189. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  190. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  191. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  192. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  193. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  194. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  195. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  196. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  197. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  198. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  199. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/tailwind.config.js +0 -0
  200. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/tsconfig.json +0 -0
  201. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  202. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dashboard/webapp/vite.config.ts +0 -0
  203. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/db.py +0 -0
  204. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dead_end.py +0 -0
  205. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/README.md +0 -0
  206. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-agent.service +0 -0
  207. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-db-backup.service +0 -0
  208. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-db-backup.sh +0 -0
  209. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-db-backup.timer +0 -0
  210. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-drive-queue.service +0 -0
  211. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-drive-queue.timer +0 -0
  212. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-notify.service +0 -0
  213. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-notify.timer +0 -0
  214. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-release-propagate.service +0 -0
  215. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-release-propagate.timer +0 -0
  216. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-release-window.service +0 -0
  217. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-release-window.timer +0 -0
  218. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-serve.service +0 -0
  219. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-web-dist-build.service +0 -0
  220. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-web-dist-build.timer +0 -0
  221. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy/coord-web.service +0 -0
  222. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy_manifest.py +0 -0
  223. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deploy_units.py +0 -0
  224. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/deps.py +0 -0
  225. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/diagnose.py +0 -0
  226. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dispatch.py +0 -0
  227. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/dist_name.py +0 -0
  228. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/drive.py +0 -0
  229. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/drive_queue.py +0 -0
  230. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/drive_state.py +0 -0
  231. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/events.py +0 -0
  232. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/failure_class.py +0 -0
  233. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/filelock.py +0 -0
  234. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/fleet_config_health.py +0 -0
  235. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/freshness.py +0 -0
  236. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/gate_a.py +0 -0
  237. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/gate_b.py +0 -0
  238. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/gate_snapshot.py +0 -0
  239. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/gates.py +0 -0
  240. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/github_ops.py +0 -0
  241. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/goal.py +0 -0
  242. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/graph_health.py +0 -0
  243. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/__init__.py +0 -0
  244. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/aggregate.py +0 -0
  245. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/__init__.py +0 -0
  246. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/agent_install.py +0 -0
  247. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/cargo_targets.py +0 -0
  248. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/claude_binary.py +0 -0
  249. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/deploy_lane_facts.py +0 -0
  250. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/disk.py +0 -0
  251. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/fleet_board.py +0 -0
  252. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  253. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/fleet_phantom.py +0 -0
  254. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/fleet_unit_drift.py +0 -0
  255. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/graph.py +0 -0
  256. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/graphify_cli.py +0 -0
  257. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/index_lock.py +0 -0
  258. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/plan_usage.py +0 -0
  259. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/repo_state.py +0 -0
  260. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/spawned_coord.py +0 -0
  261. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/timer_active.py +0 -0
  262. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/toolchain.py +0 -0
  263. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/unit_drift.py +0 -0
  264. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/unit_enablement.py +0 -0
  265. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/checks/worktrees.py +0 -0
  266. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/cli.py +0 -0
  267. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/context.py +0 -0
  268. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/fleet_snapshot.py +0 -0
  269. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/models.py +0 -0
  270. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/pypi.py +0 -0
  271. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/registry.py +0 -0
  272. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/render.py +0 -0
  273. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/health/units.py +0 -0
  274. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/hooks.py +0 -0
  275. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/housekeeping.py +0 -0
  276. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/interactive.py +0 -0
  277. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/issue_store.py +0 -0
  278. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/liveness_auditor.py +0 -0
  279. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/machine_pause.py +0 -0
  280. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/milestone_chat.py +0 -0
  281. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/milestone_dispatch.py +0 -0
  282. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/milestone_gate.py +0 -0
  283. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/milestone_order.py +0 -0
  284. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/mock_author.py +0 -0
  285. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/models.py +0 -0
  286. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/network.py +0 -0
  287. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/new_issue_chat.py +0 -0
  288. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/__init__.py +0 -0
  289. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/baseline.py +0 -0
  290. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/cli.py +0 -0
  291. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/collect.py +0 -0
  292. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/digest.py +0 -0
  293. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/models.py +0 -0
  294. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/predicate.py +0 -0
  295. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/service.py +0 -0
  296. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/store.py +0 -0
  297. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notifier/transport.py +0 -0
  298. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/notify.py +0 -0
  299. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/openapi.py +0 -0
  300. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/overlap_fence.py +0 -0
  301. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/overlap_predict.py +0 -0
  302. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/parentage.py +0 -0
  303. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/parentage_github.py +0 -0
  304. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/pipeline.py +0 -0
  305. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/plan_parser.py +0 -0
  306. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/plans.py +0 -0
  307. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/platform_paths.py +0 -0
  308. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/portal_bridge.py +0 -0
  309. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/portal_store.py +0 -0
  310. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/portal_sync.py +0 -0
  311. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/pr_body_lint.py +0 -0
  312. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/prereqs.py +0 -0
  313. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/progress.py +0 -0
  314. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/providers/__init__.py +0 -0
  315. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/providers/base.py +0 -0
  316. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/providers/claude.py +0 -0
  317. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/providers/claude_pty.py +0 -0
  318. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/providers/opencode.py +0 -0
  319. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/queue_diagnose.py +0 -0
  320. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/reconcile_tick.py +0 -0
  321. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/refine_chat.py +0 -0
  322. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/release_cordon.py +0 -0
  323. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/release_propagate.py +0 -0
  324. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/release_verify.py +0 -0
  325. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/release_window.py +0 -0
  326. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/repo_edit.py +0 -0
  327. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/repo_onboard.py +0 -0
  328. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/reports.py +0 -0
  329. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/revalidate.py +0 -0
  330. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/review.py +0 -0
  331. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/scorecard.py +0 -0
  332. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/serve_app.py +0 -0
  333. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/skills/portal-followup/SKILL.md +0 -0
  334. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/skills/update-issue/SKILL.md +0 -0
  335. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/smoke.py +0 -0
  336. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/state.py +0 -0
  340. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/test_author.py +0 -0
  341. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/ARCHITECTURE.md +0 -0
  371. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/ARCH_SECURITY_GATES.md +0 -0
  372. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/COCKPIT.md +0 -0
  373. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/COST_DISCIPLINE.md +0 -0
  375. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/CROSS_PLATFORM.md +0 -0
  376. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/CUSTOMER_PORTAL.md +0 -0
  377. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/DRIVE_QUEUE.md +0 -0
  378. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/EPHEMERAL_WORKERS.md +0 -0
  379. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/FORGE_MIGRATION.md +0 -0
  380. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/GRAPHIFY_SETUP.md +0 -0
  381. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/ISSUE_GUIDANCE.md +0 -0
  382. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/MAC_MINI.md +0 -0
  383. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  384. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/NOTIFIER.md +0 -0
  385. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/OPENCODE_VERIFICATION.md +0 -0
  386. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/OPERATING_GOTCHAS.md +0 -0
  387. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/ORACLE_LOOP.md +0 -0
  388. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/PHONE_WEBAPP.md +0 -0
  389. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/PIPELINE_V2.md +0 -0
  390. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/PLATFORM_EVOLUTION.md +0 -0
  391. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/SECOND_BACKEND.md +0 -0
  392. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/STORE_SERVICE.md +0 -0
  393. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  394. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/WEB_CONTROL_CENTER.md +0 -0
  395. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/WSL_WINDOWS_WORKER.md +0 -0
  396. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/coord-test-runner.sh +0 -0
  417. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/drive-batch.sh +0 -0
  418. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/next_release_tag.py +0 -0
  420. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/smoke_437_interactive.py +0 -0
  423. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/verify_878_review_capture.py +0 -0
  424. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/verify_release_published.py +0 -0
  425. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/scripts/verify_release_wheel.py +0 -0
  426. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/setup.cfg +0 -0
  427. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/SMOKE_SET.md +0 -0
  428. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/__init__.py +0 -0
  429. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  430. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/contract.md +0 -0
  431. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/manifest.yml +0 -0
  432. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  433. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  434. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  435. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  436. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-37/conftest.py +0 -0
  437. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-37/contract.md +0 -0
  438. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-37/manifest.yml +0 -0
  439. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  440. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  441. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/contract.md +0 -0
  442. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/manifest.yml +0 -0
  443. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  444. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  445. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  446. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  447. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  448. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  449. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  450. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  451. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  452. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  453. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/contract.md +0 -0
  454. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  455. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  456. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/manifest.yml +0 -0
  457. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  458. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-51/tsconfig.json +0 -0
  459. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  460. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  461. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/contract.md +0 -0
  462. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/manifest.yml +0 -0
  463. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  464. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  465. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  466. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  467. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  468. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  469. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  470. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  471. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  472. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/conftest.py +0 -0
  473. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/board-pipeline-basic.json +0 -0
  474. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  475. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  476. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  477. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  478. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/all_pass.json +0 -0
  479. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  480. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/mixed_fail.json +0 -0
  481. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  482. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  483. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/skip.json +0 -0
  484. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/playwright/truncated.json +0 -0
  485. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  486. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  487. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  488. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  489. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  490. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  491. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  492. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  493. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_acceptance.py +0 -0
  494. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_acceptance_drivers.py +0 -0
  495. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent.py +0 -0
  496. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_api_error.py +0 -0
  497. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_app.py +0 -0
  498. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_branch_base.py +0 -0
  499. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_branch_capture.py +0 -0
  500. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_config_free_1712.py +0 -0
  501. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_deploy_units_endpoint.py +0 -0
  502. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_dirty_worktree.py +0 -0
  503. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  504. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_graph_self_heal.py +0 -0
  505. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_health_h3.py +0 -0
  506. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_idle_restart.py +0 -0
  507. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_push_failure.py +0 -0
  508. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_reap.py +0 -0
  509. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_repos_and_pull.py +0 -0
  510. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_restart_services_endpoint.py +0 -0
  511. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_startup_diagnostics.py +0 -0
  512. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_update.py +0 -0
  513. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_update_bluegreen.py +0 -0
  514. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_usage_limit.py +0 -0
  515. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_agent_zero_commit.py +0 -0
  516. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_ambient_home_isolation.py +0 -0
  517. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_approve_reject_plan.py +0 -0
  518. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_approve_usage_gate.py +0 -0
  519. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_assignment_already_recorded_daemon.py +0 -0
  520. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_audit_log.py +0 -0
  521. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_audit_outcome.py +0 -0
  522. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_audit_query.py +0 -0
  523. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_auto_loop.py +0 -0
  524. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_auto_release_publish_2035.py +0 -0
  525. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_base_checkout_restore.py +0 -0
  526. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_block_log.py +0 -0
  527. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_cap_762.py +0 -0
  528. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_fixture.py +0 -0
  529. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_read_path.py +0 -0
  530. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_service.py +0 -0
  531. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_state.py +0 -0
  532. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_board_wire.py +0 -0
  533. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_brain.py +0 -0
  534. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_branch_model.py +0 -0
  535. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_bug_intake.py +0 -0
  536. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_build_worker_image_env_update.py +0 -0
  537. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cargo_cache.py +0 -0
  538. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_ci_acceptance_gate_1950.py +0 -0
  539. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_ci_parity_2091.py +0 -0
  540. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_ci_store.py +0 -0
  541. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_claim.py +0 -0
  542. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_acceptance.py +0 -0
  543. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_assign.py +0 -0
  544. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  545. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_assign_interactive_remote.py +0 -0
  546. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_assign_provider.py +0 -0
  547. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  548. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_audit.py +0 -0
  549. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_chat_continue.py +0 -0
  550. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_decide.py +0 -0
  551. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_diagnose_config_provenance.py +0 -0
  552. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_diagnose_graph.py +0 -0
  553. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_doctor.py +0 -0
  554. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_doctor_config_free_1801.py +0 -0
  555. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  556. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_drive.py +0 -0
  557. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_escalate.py +0 -0
  558. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_fix_headless_review.py +0 -0
  559. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_gate_a.py +0 -0
  560. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_install_drift.py +0 -0
  561. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_install_skills.py +0 -0
  562. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_issue_create_label.py +0 -0
  563. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_issue_reopen.py +0 -0
  564. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_merge.py +0 -0
  565. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_assign.py +0 -0
  566. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_capture.py +0 -0
  567. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_chat_add_child.py +0 -0
  568. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_dispatch.py +0 -0
  569. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_gate_b.py +0 -0
  570. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_gate_c.py +0 -0
  571. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_order.py +0 -0
  572. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  573. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_milestone_ship.py +0 -0
  574. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_network.py +0 -0
  575. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_new_issue_chat.py +0 -0
  576. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_plans.py +0 -0
  577. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_portal.py +0 -0
  578. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_scorecard.py +0 -0
  587. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_set_review_findings.py +0 -0
  588. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_advisory_terminal.py +0 -0
  589. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_merge_queue.py +0 -0
  590. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_provider.py +0 -0
  591. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_review_finalizing.py +0 -0
  592. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_test_failed_tag.py +0 -0
  593. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_status_usage_limit.py +0 -0
  594. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_sync_comments_873.py +0 -0
  595. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_test_plan.py +0 -0
  596. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_track.py +0 -0
  597. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_tui_update.py +0 -0
  598. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cli_wait.py +0 -0
  599. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_client_base_install.py +0 -0
  600. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_comments.py +0 -0
  601. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_completion_summary.py +0 -0
  602. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config.py +0 -0
  603. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config_acceptance.py +0 -0
  604. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config_audit.py +0 -0
  605. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config_pricing.py +0 -0
  606. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  607. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_config_usage_gate.py +0 -0
  608. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_conflict_fix.py +0 -0
  609. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_conflict_fix_semantic.py +0 -0
  610. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_test.py +0 -0
  611. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_test_runner_baseline.py +0 -0
  612. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_test_runner_populated_home.py +0 -0
  613. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_test_runner_routing.py +0 -0
  614. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_test_runner_toolchain.py +0 -0
  615. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coord_web_sse_restart_live.py +0 -0
  616. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_coordinator_machine.py +0 -0
  617. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_cross_platform_imports.py +0 -0
  618. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dashboard.py +0 -0
  619. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dashboard_fixture.py +0 -0
  620. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dashboard_terminal.py +0 -0
  621. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dashboard_terminal_live.py +0 -0
  622. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_db.py +0 -0
  623. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dead_end.py +0 -0
  624. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_coord_db_backup.py +0 -0
  625. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_coord_web_dist.py +0 -0
  626. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_coord_web_rollback.py +0 -0
  627. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_drive_queue_unit.py +0 -0
  628. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_manifest.py +0 -0
  629. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_units_lane.py +0 -0
  630. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deploy_web_unit.py +0 -0
  631. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_deps.py +0 -0
  632. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_diagnose.py +0 -0
  633. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dispatch.py +0 -0
  634. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dispatch_target_validation.py +0 -0
  635. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_dist_name.py +0 -0
  636. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_done_housekeeping.py +0 -0
  637. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_drive.py +0 -0
  638. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_drive_queue.py +0 -0
  639. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_drive_state.py +0 -0
  640. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_drive_tmux.py +0 -0
  641. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_epic_up_capability_detection.py +0 -0
  642. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  643. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_epic_up_image_provenance.py +0 -0
  644. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_errors.py +0 -0
  645. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_events.py +0 -0
  646. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_failure_class.py +0 -0
  647. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_filelock.py +0 -0
  648. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  649. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_fix_of_force_override.py +0 -0
  650. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_fleet_config_health.py +0 -0
  651. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_fleet_health_probes.py +0 -0
  652. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_fleet_health_snapshot.py +0 -0
  653. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_freshness.py +0 -0
  654. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_gate_a.py +0 -0
  655. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_gate_b.py +0 -0
  656. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_gate_snapshot_staleness.py +0 -0
  657. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_gates.py +0 -0
  658. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  659. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_generated_types_fixture.py +0 -0
  660. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_github_ops.py +0 -0
  661. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_goal.py +0 -0
  662. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_graph_health.py +0 -0
  663. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_graph_selfheal_absent_2237.py +0 -0
  664. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_handoff.py +0 -0
  665. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_checks.py +0 -0
  666. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_cli.py +0 -0
  667. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_cli_graph.py +0 -0
  668. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_config.py +0 -0
  669. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_context.py +0 -0
  670. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_deploy_lane_facts.py +0 -0
  671. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_incident_regression.py +0 -0
  672. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_pypi.py +0 -0
  673. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_registry.py +0 -0
  674. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_timer_active.py +0 -0
  675. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_toolchain.py +0 -0
  676. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_unit_drift.py +0 -0
  677. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_health_unit_enablement.py +0 -0
  678. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_hooks.py +0 -0
  679. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_human_attended_437.py +0 -0
  680. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_init.py +0 -0
  681. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_integration.py +0 -0
  682. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_briefing_echo.py +0 -0
  683. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_prefill_state.py +0 -0
  684. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_session_relaunch.py +0 -0
  685. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_test_verdict_backstop.py +0 -0
  686. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_token_attribution.py +0 -0
  687. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_interactive_worktree.py +0 -0
  688. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_issue_store_seam.py +0 -0
  689. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_liveness_auditor.py +0 -0
  690. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_liveness_notify.py +0 -0
  691. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_machine_pause.py +0 -0
  692. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_merge_verify.py +0 -0
  693. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_milestone_chat.py +0 -0
  694. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_milestone_dispatch.py +0 -0
  695. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_milestone_gate.py +0 -0
  696. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_milestone_order.py +0 -0
  697. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_milestone_seam.py +0 -0
  698. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_mock_author.py +0 -0
  699. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_model_tiering.py +0 -0
  700. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_models.py +0 -0
  701. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_models_config_labels.py +0 -0
  702. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_needs_attention.py +0 -0
  703. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_network.py +0 -0
  704. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_new_issue_chat.py +0 -0
  705. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_next_release_tag.py +0 -0
  706. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_no_direct_gh_calls.py +0 -0
  707. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_node_shim.py +0 -0
  708. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_baseline.py +0 -0
  709. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_cli.py +0 -0
  710. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_collect.py +0 -0
  711. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_config.py +0 -0
  712. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_drive_seam.py +0 -0
  713. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_isolation.py +0 -0
  714. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_predicate.py +0 -0
  715. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_quiet_hours.py +0 -0
  716. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notifier_service.py +0 -0
  717. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notify.py +0 -0
  718. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_notify_drain.py +0 -0
  719. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_openapi.py +0 -0
  720. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_operational_defaults.py +0 -0
  721. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_overlap_fence.py +0 -0
  722. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_overlap_predict.py +0 -0
  723. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_packaged_deploy_units.py +0 -0
  724. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_parentage.py +0 -0
  725. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_paste_landed.py +0 -0
  726. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_pipeline.py +0 -0
  727. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_plan_followup_approve_plan_command.py +0 -0
  728. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_plan_followup_pr_command.py +0 -0
  729. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_plan_followup_review_command.py +0 -0
  730. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_plan_only.py +0 -0
  731. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_plan_parser.py +0 -0
  732. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_platform_paths.py +0 -0
  733. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_portal_bridge.py +0 -0
  734. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_portal_config.py +0 -0
  735. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_portal_sync.py +0 -0
  736. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_pr_body_lint.py +0 -0
  737. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_prereqs.py +0 -0
  738. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_production_db_guard.py +0 -0
  739. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_progress.py +0 -0
  740. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_provider_seam.py +0 -0
  741. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_providers.py +0 -0
  742. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_providers_config_labels.py +0 -0
  743. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_providers_pty.py +0 -0
  744. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_quiet_hours.py +0 -0
  745. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_quiet_hours_store_2146.py +0 -0
  746. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reap_merged_sessions.py +0 -0
  747. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reap_stale_interactive_tick.py +0 -0
  748. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_branch.py +0 -0
  749. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_completions.py +0 -0
  750. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_merges.py +0 -0
  751. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_no_agent_record.py +0 -0
  752. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_tick.py +0 -0
  753. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reconcile_usage_limit_done.py +0 -0
  754. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_refine_chat.py +0 -0
  755. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_cordon_2101.py +0 -0
  756. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  757. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_cordon_deadlock_2240.py +0 -0
  758. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_propagate.py +0 -0
  759. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_unified_1242.py +0 -0
  760. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_verify.py +0 -0
  761. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_release_window.py +0 -0
  762. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_remote_auto_prune.py +0 -0
  763. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_remote_interactive_reaper.py +0 -0
  764. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_repo_edit_2220.py +0 -0
  765. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_repo_graph_fleet_2237.py +0 -0
  766. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_repo_onboard_2220.py +0 -0
  767. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_report_result_push.py +0 -0
  768. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_reports.py +0 -0
  769. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_retry.py +0 -0
  770. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_retry_advisory_1606.py +0 -0
  771. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_retry_type_1636.py +0 -0
  772. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_revalidate.py +0 -0
  773. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review.py +0 -0
  774. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_end_review_without_verdict.py +0 -0
  775. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_parse_failure_diagnostic.py +0 -0
  776. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_reaffirm.py +0 -0
  777. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_state.py +0 -0
  778. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_verdict_backstop.py +0 -0
  779. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_verdict_override_audit.py +0 -0
  780. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_verdict_relay.py +0 -0
  781. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_review_zero_commits.py +0 -0
  782. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_scoped_review_wiring.py +0 -0
  783. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_scorecard.py +0 -0
  784. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_serve.py +0 -0
  785. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_serve_app_board_trim.py +0 -0
  786. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_session.py +0 -0
  787. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_slice_issue_attribution.py +0 -0
  788. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_smoke.py +0 -0
  789. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_smoke_live_checkout_restore.py +0 -0
  790. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_smoke_workflow.py +0 -0
  791. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_spend_ceiling.py +0 -0
  792. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_spend_ceiling_coordinator.py +0 -0
  793. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_split.py +0 -0
  794. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_split_work.py +0 -0
  795. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_stage_projection.py +0 -0
  796. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_stalled_pipeline.py +0 -0
  797. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_state.py +0 -0
  798. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_state_review_findings_daemon.py +0 -0
  799. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_status_fleet_footer.py +0 -0
  800. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_stop_1567.py +0 -0
  801. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_stuck.py +0 -0
  802. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_terminal_command.py +0 -0
  803. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_author.py +0 -0
  804. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_chat.py +0 -0
  805. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_orchestrator.py +0 -0
  806. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_report.py +0 -0
  807. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_verdict_parsing.py +0 -0
  808. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_test_verdict_transcript_floor.py +0 -0
  809. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_thin_client_board_audit.py +0 -0
  810. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_thin_client_config_load_1080.py +0 -0
  811. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_thin_client_daemon_routing_906.py +0 -0
  812. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_tmux_host.py +0 -0
  813. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_tmux_session.py +0 -0
  814. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_transcript_floor.py +0 -0
  815. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_usage.py +0 -0
  816. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_usage_limits.py +0 -0
  817. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_usage_rollup.py +0 -0
  818. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_venv_live_install_2121.py +0 -0
  819. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_version_single_source.py +0 -0
  820. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_watch.py +0 -0
  821. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  822. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worker_events.py +0 -0
  823. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worker_image_pin_sync.py +0 -0
  824. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worker_safety.py +0 -0
  825. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worker_test_scoping.py +0 -0
  826. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worktree.py +0 -0
  827. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  828. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/Cargo.lock +0 -0
  829. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/Cargo.toml +0 -0
  830. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/cargo-config-local-quadraui.toml.example +0 -0
  831. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/audit.rs +0 -0
  832. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/chat.rs +0 -0
  833. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/data.rs +0 -0
  834. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/dialogs.rs +0 -0
  835. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/doc_tabs.rs +0 -0
  836. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/drive.rs +0 -0
  837. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/drive_queue.rs +0 -0
  838. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/escalation.rs +0 -0
  839. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/events.rs +0 -0
  840. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/fixtures.rs +0 -0
  841. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/fleet_health.rs +0 -0
  842. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/fleet_sessions.rs +0 -0
  843. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/fleet_terminals.rs +0 -0
  844. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/format.rs +0 -0
  845. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/milestone_dag.rs +0 -0
  846. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/mod.rs +0 -0
  847. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/msv.rs +0 -0
  848. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/pipeline.rs +0 -0
  849. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/plans.rs +0 -0
  850. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/render.rs +0 -0
  851. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/reports.rs +0 -0
  852. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/sessions.rs +0 -0
  853. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/settings_ui.rs +0 -0
  854. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/sidebar.rs +0 -0
  855. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/terminal.rs +0 -0
  856. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/tests.rs +0 -0
  857. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/types.rs +0 -0
  858. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/app/workspace.rs +0 -0
  859. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/bin/gtk.rs +0 -0
  860. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/commands.rs +0 -0
  861. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/lib.rs +0 -0
  862. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/main.rs +0 -0
  863. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/src/settings.rs +0 -0
  864. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/tests/acceptance.rs +0 -0
  865. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/tui/tests/cli.rs +0 -0
  866. {code_coordinator-0.5.141 → code_coordinator-0.5.143}/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.141
3
+ Version: 0.5.143
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.141
3
+ Version: 0.5.143
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.141",
2
+ "tag": "0.5.143",
3
3
  "distance": 0,
4
- "node": "gef1e71db0f0c6bc0d0346e3020abaeabac680993",
4
+ "node": "g5b8b819c6ba27f432a333e8d026cb66272211710",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -1588,6 +1588,43 @@ def _ci_unreadable_reason(failed: "list[CheckRun]") -> str | None:
1588
1588
  )
1589
1589
 
1590
1590
 
1591
+ # #2380: a bare check-list FETCH failure (`_ci_unreadable_reason`, above) has
1592
+ # TWO readings, exactly like `checks == []` already does (#1877): "GitHub is
1593
+ # genuinely unreachable right now" (real, self-healing — keep retrying), and
1594
+ # "this PR is DIRTY/CONFLICTING against its base, so GitHub can never build a
1595
+ # merge ref for it and `gh pr checks` has nothing to read" (definitive,
1596
+ # self-*never*-healing — no amount of retrying a CI read produces CI that
1597
+ # will never run). The two are indistinguishable from the check list alone;
1598
+ # GitHub's own `mergeable` field is the one thing that tells them apart, and
1599
+ # — unlike CI — it is always computable, conflict or not.
1600
+ def _pr_reports_conflicting(gh_ops, repo: str | None, number: int | None) -> bool:
1601
+ """True only when GitHub's live ``mergeable`` field reads ``CONFLICTING``
1602
+ for PR *number* — definitive, readable evidence a CI-unreadable park can
1603
+ never resolve on its own (#2380).
1604
+
1605
+ Duck-typed the same way the sibling #1877 checks-absent conflict probe
1606
+ (a few lines above each of this function's call sites) already is:
1607
+ ``gh_ops`` on the board/plan read path may be a :class:`~coord.gate_
1608
+ snapshot.GateSnapshot` with no ``check_pr_mergeable`` at all (#1336
1609
+ Invariant 1 — no third-party I/O there), and any of "no probe available",
1610
+ "the probe raised", or a ``True``/``None`` verdict (cleanly mergeable, or
1611
+ GitHub still computing it) must read as "not confirmed conflicting" —
1612
+ never as false evidence of one. This is intentionally narrower than the
1613
+ design's "``mergeable == CONFLICTING`` or ``mergeStateStatus == DIRTY``"
1614
+ framing: :func:`coord.github_ops.check_pr_mergeable` already reads GitHub's
1615
+ ``mergeable`` field, which is exactly ``CONFLICTING`` whenever
1616
+ ``mergeStateStatus`` would read ``DIRTY`` — one probe, one `gh` call,
1617
+ same readable-and-definitive signal either way.
1618
+ """
1619
+ probe = getattr(gh_ops, "check_pr_mergeable", None)
1620
+ if probe is None or not repo or number is None:
1621
+ return False
1622
+ try:
1623
+ return probe(repo, number) is False
1624
+ except Exception: # noqa: BLE001 — inconclusive, not a confirmed conflict
1625
+ return False
1626
+
1627
+
1591
1628
  def _ci_infra_reason(
1592
1629
  ci: "CiStore", repo: str, number: int, failed: "list[CheckRun]"
1593
1630
  ) -> str | None:
@@ -3820,21 +3857,36 @@ def _entry_gate_status(
3820
3857
  # `process()`'s own live reading.
3821
3858
  unreadable_reason = _ci_unreadable_reason(failed)
3822
3859
  if unreadable_reason is not None:
3823
- return PLAN_BLOCKED, unreadable_reason
3824
- summary = ", ".join(f"{c.name} ({c.conclusion})" for c in failed)
3825
- return PLAN_BLOCKED, f"CI failed: {summary}"
3826
- pending = in_flight_checks(checks)
3827
- if pending:
3828
- summary = ", ".join(c.name for c in pending)
3829
- return PLAN_BLOCKED, f"{CI_PENDING_PREFIX} {summary}"
3830
- if checks and _ci_checks_are_stale(
3831
- checks, gh_ops, entry.repo_github, entry.target_branch, smoke
3832
- ):
3833
- return (
3834
- PLAN_BLOCKED,
3835
- f"{CI_STALE_PREFIX} checks predate the current base — "
3836
- "re-run CI (`coord merge --revalidate`) before merging",
3837
- )
3860
+ # #2380: a fetch failure this uniform (EVERY failing check is
3861
+ # the synthetic unreadable stand-in) is ALSO exactly what a
3862
+ # DIRTY/CONFLICTING PR produces — see
3863
+ # :func:`_pr_reports_conflicting`'s docstring. Same "don't
3864
+ # block, mirror `process()`, let the real conflict surface"
3865
+ # response as the #1877 checks-absent case immediately above
3866
+ # deliberately NOT falling into the `pending`/staleness
3867
+ # checks below, which assume (per `_ci_checks_are_stale`'s
3868
+ # own docstring) a *non-empty, no-failed-entries* check list;
3869
+ # this one is neither.
3870
+ if not _pr_reports_conflicting(
3871
+ gh_ops, entry.repo_github, entry.pr_number
3872
+ ):
3873
+ return PLAN_BLOCKED, unreadable_reason
3874
+ else:
3875
+ summary = ", ".join(f"{c.name} ({c.conclusion})" for c in failed)
3876
+ return PLAN_BLOCKED, f"CI failed: {summary}"
3877
+ else:
3878
+ pending = in_flight_checks(checks)
3879
+ if pending:
3880
+ summary = ", ".join(c.name for c in pending)
3881
+ return PLAN_BLOCKED, f"{CI_PENDING_PREFIX} {summary}"
3882
+ if checks and _ci_checks_are_stale(
3883
+ checks, gh_ops, entry.repo_github, entry.target_branch, smoke
3884
+ ):
3885
+ return (
3886
+ PLAN_BLOCKED,
3887
+ f"{CI_STALE_PREFIX} checks predate the current base — "
3888
+ "re-run CI (`coord merge --revalidate`) before merging",
3889
+ )
3838
3890
  if gh_ops is not None and entry.pr_number:
3839
3891
  try:
3840
3892
  commit_messages = gh_ops.get_pr_commit_messages(
@@ -5176,6 +5228,25 @@ def process(
5176
5228
  # checked first, mirroring the live path's
5177
5229
  # ordering — see `_ci_unreadable_reason`.
5178
5230
  unreadable_reason = _ci_unreadable_reason(failed)
5231
+ # #2380: mirror the real path's straight-to-
5232
+ # conflict routing — see the identical check a
5233
+ # few lines above (#1877) and the live path's own
5234
+ # `_pr_reports_conflicting` branch. Preview-only:
5235
+ # never mutates `entry.state`, same as every
5236
+ # other branch in this dry-run block.
5237
+ if unreadable_reason is not None and _pr_reports_conflicting(
5238
+ gh_ops, entry.repo_github, entry.pr_number
5239
+ ):
5240
+ events.append(MergeEvent(
5241
+ entry, "conflict",
5242
+ f"(dry run) {entry.branch} conflicts "
5243
+ f"with {entry.target_branch} and its CI "
5244
+ "check-list fetch fails for the same "
5245
+ "reason — a real run would route to the "
5246
+ "#241 conflict-fix path rather than park "
5247
+ "on an unreadable CI retry (#2380)",
5248
+ ))
5249
+ continue
5179
5250
  infra_reason = None if unreadable_reason else _ci_infra_reason(
5180
5251
  ci, entry.repo_github, entry.pr_number, failed
5181
5252
  )
@@ -5528,6 +5599,39 @@ def process(
5528
5599
  # to evaluate unconditionally, every time.
5529
5600
  unreadable_reason = _ci_unreadable_reason(failed)
5530
5601
  if unreadable_reason is not None:
5602
+ # #2380: a check-list fetch failure this uniform
5603
+ # (EVERY failing check is the synthetic unreadable
5604
+ # stand-in) is ALSO exactly what GitHub reports for a
5605
+ # DIRTY/CONFLICTING PR — it can never build a merge
5606
+ # ref, so `gh pr checks` has nothing to read either.
5607
+ # `_pr_reports_conflicting` tells the two apart the
5608
+ # same way the #1877 checks-absent branch above does:
5609
+ # GitHub's own `mergeable` field, definitive and
5610
+ # always computable, conflict or not. When it reads
5611
+ # CONFLICTING, retrying the CI read can never
5612
+ # succeed — route STRAIGHT to the same `conflict`
5613
+ # event / `_dispatch_conflict_fixes` path a readable
5614
+ # CONFLICT merge-queue status already triggers
5615
+ # (#1474/#241), instead of parking behind a read that
5616
+ # will never resolve.
5617
+ if _pr_reports_conflicting(
5618
+ gh_ops, entry.repo_github, entry.pr_number
5619
+ ):
5620
+ msg = (
5621
+ f"merge conflict: GitHub reports PR "
5622
+ f"#{entry.pr_number} ({entry.branch}) as "
5623
+ f"CONFLICTING against {entry.target_branch} "
5624
+ "— no CI ever ran because GitHub cannot "
5625
+ "build a merge ref for a conflicting PR, so "
5626
+ "the check-list fetch failure was never a "
5627
+ "transient GitHub outage (#2380). Rebase "
5628
+ f"the branch onto {entry.target_branch} and "
5629
+ "resolve."
5630
+ )
5631
+ entry.state = CONFLICT
5632
+ entry.error = msg
5633
+ events.append(MergeEvent(entry, "conflict", msg))
5634
+ continue # #292: skip, don't halt the group
5531
5635
  if entry.ci_unreadable_reruns < MAX_CI_UNREADABLE_RERUNS:
5532
5636
  entry.ci_unreadable_reruns += 1
5533
5637
  _log.info(
@@ -1242,6 +1242,28 @@ def _reassign(
1242
1242
  repo_path = machine.repo_path(failed.repo_name)
1243
1243
 
1244
1244
  retry_model = model if model is not None else failed.model
1245
+ # #2383: `failed.model` can name a model an operator has since REMOVED
1246
+ # from `models.escalation` (e.g. a run auto-escalated onto it before the
1247
+ # ladder was edited) — inheriting it here forever, on every subsequent
1248
+ # auto-reassign of the same lineage, would silently keep dispatching a
1249
+ # model the current config no longer sanctions. Only the inherited
1250
+ # (`model is None`) path needs this: an explicit caller-supplied `model`
1251
+ # is a deliberate choice and passes through unclamped. And only a
1252
+ # CLAUDE-family retry needs it — `models.escalation` is a claude-only
1253
+ # concept (#2323's "the claude escalation ladder means nothing to
1254
+ # another provider"), so an opencode/other-provider model like
1255
+ # `opencode/glm-5.2` must never be walked onto the claude ladder just
1256
+ # because it doesn't happen to appear on it.
1257
+ if (
1258
+ model is None
1259
+ and resolved_provider_name == "claude"
1260
+ and retry_model not in (*config.models.escalation, config.models.default)
1261
+ ):
1262
+ retry_model = (
1263
+ config.models.escalation[-1]
1264
+ if config.models.escalation
1265
+ else config.models.default
1266
+ )
1245
1267
  # The Assignment keeps the alias for legibility; the wire payload is
1246
1268
  # resolved through models.versions when an exact id is pinned.
1247
1269
  retry_model_wire = config.models.resolve(retry_model)
@@ -1724,17 +1724,29 @@ def live_ci_backend(monkeypatch):
1724
1724
  """Fake the live `ci_store`/`github_ops` seam #2182's re-check calls.
1725
1725
 
1726
1726
  Patches `coord.ci_store.build_ci_store` (what constructs the live
1727
- backend) and the two `coord.github_ops` functions the CI gate reaches
1727
+ backend) and the three `coord.github_ops` functions the CI gate reaches
1728
1728
  for once the checks themselves resolve (`get_branch_commit_timestamp`
1729
1729
  for the #1851 staleness check, `get_pr_commit_messages` for the #1318
1730
- epic-closing-keyword gate) the same seams `tests/test_board_read_
1731
- path.py` fakes for the equivalent `/board`-side gate. Returns a setter,
1732
- `live_ci_backend(checks)`.
1730
+ epic-closing-keyword gate, and `check_pr_mergeable` for the #1877 /
1731
+ #2380 "is this PR actually CONFLICTING?" disambiguation) the same
1732
+ seams `tests/test_board_read_path.py` fakes for the equivalent
1733
+ `/board`-side gate. Returns a setter, `live_ci_backend(checks,
1734
+ mergeable=...)`.
1735
+
1736
+ `mergeable` defaults to `None` — GitHub's own "still computing /
1737
+ unknown" verdict, which every gate treats as inconclusive, so the
1738
+ default leaves the pre-#2380 reading of every scenario here untouched.
1739
+ Pass `mergeable=False` for the #2380 case (a DIRTY/CONFLICTING PR,
1740
+ whose `gh pr checks` fetch fails because GitHub can never build a merge
1741
+ ref for it). Faking it matters beyond convenience: `launches`
1742
+ monkeypatches `subprocess.run` process-wide, so an unfaked probe would
1743
+ (a) really shell out to `gh` from a unit test and (b) land in
1744
+ `launches` as a phantom extra "launch".
1733
1745
  """
1734
1746
  import coord.ci_store as ci_store_module
1735
1747
  import coord.github_ops as github_ops
1736
1748
 
1737
- state: dict = {"checks": []}
1749
+ state: dict = {"checks": [], "mergeable": None}
1738
1750
  monkeypatch.setattr(
1739
1751
  ci_store_module, "build_ci_store", lambda t: _FakeLiveCi(state)
1740
1752
  )
@@ -1744,9 +1756,13 @@ def live_ci_backend(monkeypatch):
1744
1756
  github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1.0
1745
1757
  )
1746
1758
  monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
1759
+ monkeypatch.setattr(
1760
+ github_ops, "check_pr_mergeable", lambda repo, n: state["mergeable"]
1761
+ )
1747
1762
 
1748
- def _set(checks: list) -> None:
1763
+ def _set(checks: list, *, mergeable: bool | None = None) -> None:
1749
1764
  state["checks"] = checks
1765
+ state["mergeable"] = mergeable
1750
1766
 
1751
1767
  return _set
1752
1768
 
@@ -1885,6 +1901,40 @@ def test_a_parked_entrys_reason_is_corrected_when_github_is_unreachable(
1885
1901
  assert queued(2159)["state"] == "running"
1886
1902
 
1887
1903
 
1904
+ def test_a_parked_entry_whose_pr_is_confirmed_conflicting_stops_waiting_on_ci(
1905
+ cli_no_gates, seed, launches, coord_db, live_ci_backend,
1906
+ ):
1907
+ """#2380 at the drive-queue tick: the SAME unreadable check list as the
1908
+ #2347 test above, but GitHub's `mergeable` field reads CONFLICTING.
1909
+
1910
+ That combination is not a transient outage and never becomes readable
1911
+ on its own — GitHub cannot build a merge ref for a conflicting PR, so
1912
+ `gh pr checks` has nothing to read, forever. Parking on "retry the CI
1913
+ read" therefore wedges the entry until the 45-minute ceiling, every
1914
+ ceiling, with zero forward progress (the live incident: claude-
1915
+ coordinator#2375 / PR #2379 parked 6x). The live re-check must stop
1916
+ treating it as still-blocked-on-CI and let the entry move again, so the
1917
+ merge path can route it to the #241 conflict-fix dispatch.
1918
+ """
1919
+ _park_with_pr(cli_no_gates, seed, coord_db)
1920
+ assert queued(2159)["state"] == "parked"
1921
+ assert len(launches) == 1, launches
1922
+
1923
+ from coord.ci_github import _unreadable_check
1924
+ live_ci_backend(
1925
+ [_unreadable_check(REPO, 2159, "HTTP 503: No server is currently available")],
1926
+ mergeable=False,
1927
+ )
1928
+
1929
+ result = cli_no_gates("tick")
1930
+ assert result.exit_code == 0, result.output
1931
+ entry = queued(2159)
1932
+ assert entry["state"] != "parked", entry # no longer wedged on a dead read
1933
+ from coord.merge_queue import is_ci_unreadable_reason
1934
+ assert not is_ci_unreadable_reason(entry["last_reason"] or ""), entry
1935
+ assert "parked" not in cli_no_gates("status").output
1936
+
1937
+
1888
1938
  def test_a_live_ready_wins_even_over_a_stale_cached_plan_reading(
1889
1939
  cli_no_gates, seed, launches, coord_db, live_ci_backend, board_merge_plan,
1890
1940
  ):
@@ -5515,6 +5515,69 @@ class TestPlan:
5515
5515
  assert not mq.is_ci_unreadable_reason(plan[0].reason)
5516
5516
  assert "CI failed" in (plan[0].reason or "")
5517
5517
 
5518
+ def test_ready_when_conflicted_and_checks_unreadable(self, coord_db) -> None:
5519
+ """#2380: a DIRTY/CONFLICTING PR's `gh pr checks` fetch can itself
5520
+ fail (GitHub can't build a merge ref to run anything against), which
5521
+ reads identically to a transient GitHub-unreachable blip —
5522
+ CI_UNREADABLE_PREFIX. Confirmed via `check_pr_mergeable` reading
5523
+ CONFLICTING, this must NOT block on "retry the read" (which can
5524
+ never succeed for a conflicting PR) — mirror the #1877 checks-absent
5525
+ fall-through immediately above so `coord merge` reaches the real
5526
+ merge attempt and routes to the #241 conflict-fix path."""
5527
+ from types import SimpleNamespace
5528
+
5529
+ class FakeCi:
5530
+ is_available = True
5531
+ def list_checks_for_pr(self, repo, number):
5532
+ return [SimpleNamespace(
5533
+ name="coord: could not read CI status for acme/api#99 "
5534
+ "(HTTP 503: No server is currently available)",
5535
+ status="completed", conclusion="unknown",
5536
+ )]
5537
+
5538
+ items = [_q("w1", size=50, pr=99)]
5539
+ save_queue(items)
5540
+ board = self._board(completed=[
5541
+ self._work("w1", test_state="passed"),
5542
+ self._review("w1", verdict="approve"),
5543
+ ])
5544
+ cfg = self._config()
5545
+ gh = FakeGh(mergeable_results={99: False})
5546
+ plan = mq.plan(board, cfg, ci_store=FakeCi(), gh_ops=gh)
5547
+ assert plan[0].status == mq.PLAN_READY
5548
+ assert plan[0].reason is None
5549
+ assert ("acme/api", 99) in gh.mergeable_calls
5550
+
5551
+ def test_blocked_ci_unreadable_stays_blocked_when_not_confirmed_conflicted(
5552
+ self, coord_db
5553
+ ) -> None:
5554
+ """#2380 companion (acceptance criterion): an UNKNOWN mergeability
5555
+ read (still computing, or no probe at all) must keep today's
5556
+ CI_UNREADABLE_PREFIX park — this is additive, not a general
5557
+ loosening of the CI-unreadable path."""
5558
+ from types import SimpleNamespace
5559
+
5560
+ class FakeCi:
5561
+ is_available = True
5562
+ def list_checks_for_pr(self, repo, number):
5563
+ return [SimpleNamespace(
5564
+ name="coord: could not read CI status for acme/api#99 "
5565
+ "(HTTP 503: No server is currently available)",
5566
+ status="completed", conclusion="unknown",
5567
+ )]
5568
+
5569
+ cfg = self._config()
5570
+ board = self._board(completed=[
5571
+ self._work("w1", test_state="passed"),
5572
+ self._review("w1", verdict="approve"),
5573
+ ])
5574
+
5575
+ for gh_ops in (FakeGh(mergeable_results={99: True}), FakeGh(mergeable_results={99: None}), None):
5576
+ save_queue([_q("w1", size=50, pr=99)])
5577
+ plan = mq.plan(board, cfg, ci_store=FakeCi(), gh_ops=gh_ops)
5578
+ assert plan[0].status == mq.PLAN_BLOCKED
5579
+ assert mq.is_ci_unreadable_reason(plan[0].reason)
5580
+
5518
5581
  def test_blocked_ci_absent_when_repo_declares_ci(self, coord_db) -> None:
5519
5582
  """#1904: an empty check list for a repo that declares CI must show
5520
5583
  BLOCKED with a `checks_absent`-style reason — not READY, the
@@ -6516,6 +6579,83 @@ class TestProcessConflictedEmptyChecks:
6516
6579
  assert items[0].state == PENDING
6517
6580
 
6518
6581
 
6582
+ class TestProcessConflictedUnreadableChecks:
6583
+ """#2380: a DIRTY/CONFLICTING PR whose `gh pr checks` FETCH itself fails
6584
+ (GitHub can't build a merge ref, so `gh pr checks` has nothing to read)
6585
+ reads identically to a transient GitHub-unreachable blip —
6586
+ CI_UNREADABLE_PREFIX. Before this fix that parked forever behind
6587
+ `checks_unreadable`'s "retry the read" logic: no amount of retrying
6588
+ reads GitHub cannot ever answer differently, so the park never resolved
6589
+ (the live incident behind this issue, claude-coordinator#2375 / PR
6590
+ #2379, parked 6x with zero forward progress). `process()` must consult
6591
+ `check_pr_mergeable` — same probe, same fail-closed contract as #1877's
6592
+ sibling checks-absent fix — and, for a CONFIRMED conflict only, route
6593
+ STRAIGHT to the `conflict` event / #241 conflict-fix dispatch instead of
6594
+ parking behind a read that can never succeed."""
6595
+
6596
+ @staticmethod
6597
+ def _ci_unreadable():
6598
+ from types import SimpleNamespace
6599
+
6600
+ class _Ci:
6601
+ is_available = True
6602
+ def list_checks_for_pr(self, repo, number):
6603
+ return [SimpleNamespace(
6604
+ name="coord: could not read CI status for acme/api#99 "
6605
+ "(HTTP 503: No server is currently available)",
6606
+ status="completed", conclusion="unknown",
6607
+ )]
6608
+ return _Ci()
6609
+
6610
+ def test_confirmed_conflict_routes_directly_to_conflict_event(self) -> None:
6611
+ items = [_q("w1", pr=99)]
6612
+ gh = FakeGh(mergeable_results={99: False})
6613
+ events = process(items, gh, ci_store=self._ci_unreadable())
6614
+
6615
+ assert gh.mergeable_calls == [("acme/api", 99)]
6616
+ # Unlike #1877's empty-checks case, this routes DIRECTLY to a
6617
+ # conflict event/state — there is no real `gh pr merge` attempt to
6618
+ # fall through to, because the CI gate never reaches the merge
6619
+ # section for a non-empty (if unreadable) check list.
6620
+ assert gh.merge_calls == [], "no live merge attempt needed for this route"
6621
+ kinds = [e.kind for e in events]
6622
+ assert "conflict" in kinds
6623
+ assert "checks_unreadable" not in kinds
6624
+ assert items[0].state == CONFLICT
6625
+ # Routes through the SAME classifier #241 already uses — this fix
6626
+ # only changes reachability, not the classify-and-dispatch machinery.
6627
+ assert mq.classify_conflict(items[0].error) == "rebaseable"
6628
+
6629
+ def test_unknown_mergeability_keeps_parking_as_checks_unreadable(self) -> None:
6630
+ """Acceptance criterion: a genuinely UNKNOWN mergeability read
6631
+ (still computing, no probe available, or the probe errored) must
6632
+ keep today's park-and-wait behavior unchanged — this is additive,
6633
+ not a general loosening of the CI-unreadable path."""
6634
+ for verdict in (True, None):
6635
+ items = [_q("w1", pr=99)]
6636
+ gh = FakeGh(mergeable_results={99: verdict})
6637
+ events = process(items, gh, ci_store=self._ci_unreadable())
6638
+
6639
+ assert gh.merge_calls == [], verdict
6640
+ kinds = [e.kind for e in events]
6641
+ assert "checks_unreadable" in kinds, verdict
6642
+ assert "conflict" not in kinds, verdict
6643
+ assert items[0].state == PENDING, verdict
6644
+ assert mq.is_ci_unreadable_reason(items[0].error), verdict
6645
+
6646
+ def test_dry_run_previews_conflict_route_without_merging(self) -> None:
6647
+ items = [_q("w1", pr=99)]
6648
+ gh = FakeGh(mergeable_results={99: False})
6649
+ events = process(items, gh, ci_store=self._ci_unreadable(), dry_run=True)
6650
+
6651
+ assert gh.merge_calls == []
6652
+ kinds = [e.kind for e in events]
6653
+ assert "conflict" in kinds
6654
+ assert "checks_failed" not in kinds
6655
+ assert "merged" not in kinds
6656
+ assert items[0].state == PENDING
6657
+
6658
+
6519
6659
  class TestCiInfraReason:
6520
6660
  """#1892: `_ci_infra_reason` — the classification helper, isolated from
6521
6661
  `process()`'s I/O. `getattr(ci, "list_jobs_for_run", None)` is the
@@ -262,6 +262,64 @@ class TestReassignThreadsProvider:
262
262
  payload = mock_post.call_args.kwargs["json"]
263
263
  assert "provider" not in payload
264
264
 
265
+ @patch("coord.reconcile.httpx.post")
266
+ def test_a_model_dropped_from_the_ladder_is_not_inherited_forever(
267
+ self, mock_post: MagicMock,
268
+ ) -> None:
269
+ """#2383: `failed.model` names a model an operator has since
270
+ removed from `models.escalation` — the auto-reassign call site
271
+ never passes `model=` explicitly (reconcile.py's `newly_failed`
272
+ loop), so without a clamp this would be inherited on EVERY future
273
+ retry of the same lineage, forever, regardless of what the current
274
+ ladder says."""
275
+ resp = MagicMock()
276
+ resp.json.return_value = {"id": "newid"}
277
+ mock_post.return_value = resp
278
+ cfg = Config(
279
+ repos=[Repo(name="api", github="acme/api")],
280
+ machines=[
281
+ Machine(name="laptop", host="l", repos=["api"], repo_paths={"api": "/tmp"}),
282
+ Machine(name="server", host="s", repos=["api"], repo_paths={"api": "/tmp"}),
283
+ ],
284
+ )
285
+ assert "fable" not in cfg.models.escalation # sanity: not on the ladder
286
+ board = Board()
287
+ failed = _failed(model="fable")
288
+
289
+ result = _reassign(failed, board, cfg)
290
+
291
+ assert result is not None
292
+ payload = mock_post.call_args.kwargs["json"]
293
+ assert payload["model"] != "claude-fable-5"
294
+ assert payload["model"] == cfg.models.resolve(cfg.models.escalation[-1])
295
+
296
+ @patch("coord.reconcile.httpx.post")
297
+ def test_an_explicit_model_override_is_never_clamped(
298
+ self, mock_post: MagicMock,
299
+ ) -> None:
300
+ """The clamp is scoped to the INHERITED (`model=None`) path only —
301
+ a caller that explicitly asks for a specific model (e.g. #1291's
302
+ semantic-conflict escalation) must get exactly that model, even one
303
+ off the ordinary ladder."""
304
+ resp = MagicMock()
305
+ resp.json.return_value = {"id": "newid"}
306
+ mock_post.return_value = resp
307
+ cfg = Config(
308
+ repos=[Repo(name="api", github="acme/api")],
309
+ machines=[
310
+ Machine(name="laptop", host="l", repos=["api"], repo_paths={"api": "/tmp"}),
311
+ Machine(name="server", host="s", repos=["api"], repo_paths={"api": "/tmp"}),
312
+ ],
313
+ )
314
+ board = Board()
315
+ failed = _failed(model="sonnet")
316
+
317
+ result = _reassign(failed, board, cfg, model="opus")
318
+
319
+ assert result is not None
320
+ payload = mock_post.call_args.kwargs["json"]
321
+ assert payload["model"] == cfg.models.resolve("opus")
322
+
265
323
 
266
324
  # ── #1711: the provider-availability gate, applied to retry routing ────────
267
325