code-coordinator 0.5.115__tar.gz → 0.5.116__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 (846) hide show
  1. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/dispatch.py +62 -7
  7. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/reconcile.py +240 -35
  8. code_coordinator-0.5.116/tests/test_reconcile.py +638 -0
  9. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.gitignore +0 -0
  24. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/GOAL.md +0 -0
  26. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/LICENSE +0 -0
  27. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/README.md +0 -0
  29. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/block_log.py +0 -0
  46. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_bool_guard.py +0 -0
  47. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_service.py +0 -0
  48. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_wire.py +0 -0
  49. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/brain.py +0 -0
  50. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/branch_model.py +0 -0
  51. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/bug_intake.py +0 -0
  52. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/cargo_cache.py +0 -0
  53. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/ci_github.py +0 -0
  54. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/ci_store.py +0 -0
  55. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/claim.py +0 -0
  56. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/cli.py +0 -0
  57. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/client.py +0 -0
  58. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/__init__.py +0 -0
  59. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/_common.py +0 -0
  60. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/acceptance.py +0 -0
  61. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/agent_ops.py +0 -0
  62. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/audit.py +0 -0
  63. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/chat.py +0 -0
  64. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/dispatch_workers.py +0 -0
  65. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/drive.py +0 -0
  66. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/drive_queue.py +0 -0
  67. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/gate_a.py +0 -0
  68. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/gates.py +0 -0
  69. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/issues.py +0 -0
  70. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/lifecycle.py +0 -0
  71. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/merge.py +0 -0
  72. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/milestone.py +0 -0
  73. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/plan_followup.py +0 -0
  74. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/plans.py +0 -0
  75. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/portal.py +0 -0
  76. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/release.py +0 -0
  77. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/repo.py +0 -0
  78. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/report.py +0 -0
  79. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/review.py +0 -0
  80. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/scorecard.py +0 -0
  81. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/sessions.py +0 -0
  82. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/setup.py +0 -0
  83. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/status.py +0 -0
  84. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/terminal.py +0 -0
  85. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/test_gate.py +0 -0
  86. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/tui.py +0 -0
  87. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/comments.py +0 -0
  88. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/config.py +0 -0
  89. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/config_reload.py +0 -0
  90. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/conflict_fix.py +0 -0
  91. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dao.py +0 -0
  92. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/__init__.py +0 -0
  93. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/fixture.py +0 -0
  94. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/index.html +0 -0
  95. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/server.py +0 -0
  96. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/terminal.py +0 -0
  97. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/.gitignore +0 -0
  98. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/components.json +0 -0
  99. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  100. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  101. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  102. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  103. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  104. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  105. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  106. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  107. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  108. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/index.html +0 -0
  109. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  110. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/sw.js +0 -0
  111. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  112. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  113. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  114. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  115. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  116. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  117. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  118. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  119. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  120. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  121. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/eslint.config.js +0 -0
  122. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/index.html +0 -0
  123. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  124. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/package-lock.json +0 -0
  125. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/package.json +0 -0
  126. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  127. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/playwright.config.ts +0 -0
  128. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/postcss.config.js +0 -0
  129. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  130. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  131. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  132. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/App.tsx +0 -0
  133. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/api/client.ts +0 -0
  134. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  135. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  136. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  137. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  138. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  139. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  140. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  141. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  142. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  143. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  144. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  145. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  146. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  147. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  148. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  149. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  150. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  151. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  152. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  153. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  154. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  155. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  156. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  157. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  158. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  159. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  160. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  161. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  162. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  163. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  164. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  165. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  166. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  167. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  168. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  169. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/index.css +0 -0
  170. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  171. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  172. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/main.tsx +0 -0
  173. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  174. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  175. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  176. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  177. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  178. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  179. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  180. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  181. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  182. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  183. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  184. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  185. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  186. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  187. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  188. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  189. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  190. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  191. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  192. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  193. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  194. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  195. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  196. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tailwind.config.js +0 -0
  197. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tsconfig.json +0 -0
  198. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  199. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/vite.config.ts +0 -0
  200. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/db.py +0 -0
  201. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dead_end.py +0 -0
  202. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/README.md +0 -0
  203. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-agent.service +0 -0
  204. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.service +0 -0
  205. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.sh +0 -0
  206. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.timer +0 -0
  207. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-drive-queue.service +0 -0
  208. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-drive-queue.timer +0 -0
  209. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-notify.service +0 -0
  210. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-notify.timer +0 -0
  211. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-propagate.service +0 -0
  212. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-propagate.timer +0 -0
  213. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-window.service +0 -0
  214. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-window.timer +0 -0
  215. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-serve.service +0 -0
  216. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web-dist-build.service +0 -0
  217. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web-dist-build.timer +0 -0
  218. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web.service +0 -0
  219. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy_manifest.py +0 -0
  220. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy_units.py +0 -0
  221. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deps.py +0 -0
  222. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/diagnose.py +0 -0
  223. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dispatch.py +0 -0
  224. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dist_name.py +0 -0
  225. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive.py +0 -0
  226. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive_queue.py +0 -0
  227. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive_state.py +0 -0
  228. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/events.py +0 -0
  229. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/failure_class.py +0 -0
  230. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/filelock.py +0 -0
  231. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/fleet_config_health.py +0 -0
  232. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/freshness.py +0 -0
  233. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_a.py +0 -0
  234. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_b.py +0 -0
  235. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_snapshot.py +0 -0
  236. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gates.py +0 -0
  237. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/github_ops.py +0 -0
  238. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/goal.py +0 -0
  239. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/graph_health.py +0 -0
  240. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/__init__.py +0 -0
  241. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/aggregate.py +0 -0
  242. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/__init__.py +0 -0
  243. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/agent_install.py +0 -0
  244. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/cargo_targets.py +0 -0
  245. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/claude_binary.py +0 -0
  246. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/deploy_lane_facts.py +0 -0
  247. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/disk.py +0 -0
  248. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_board.py +0 -0
  249. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  250. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_phantom.py +0 -0
  251. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_unit_drift.py +0 -0
  252. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/graph.py +0 -0
  253. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/graphify_cli.py +0 -0
  254. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/index_lock.py +0 -0
  255. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/plan_usage.py +0 -0
  256. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/repo_state.py +0 -0
  257. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/spawned_coord.py +0 -0
  258. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/timer_active.py +0 -0
  259. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/toolchain.py +0 -0
  260. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/unit_drift.py +0 -0
  261. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/unit_enablement.py +0 -0
  262. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/worktrees.py +0 -0
  263. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/cli.py +0 -0
  264. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/context.py +0 -0
  265. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/fleet_snapshot.py +0 -0
  266. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/models.py +0 -0
  267. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/pypi.py +0 -0
  268. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/registry.py +0 -0
  269. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/render.py +0 -0
  270. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/units.py +0 -0
  271. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/hooks.py +0 -0
  272. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/housekeeping.py +0 -0
  273. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/interactive.py +0 -0
  274. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/issue_store.py +0 -0
  275. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/liveness_auditor.py +0 -0
  276. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/machine_pause.py +0 -0
  277. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/merge_queue.py +0 -0
  278. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_chat.py +0 -0
  279. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_dispatch.py +0 -0
  280. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_gate.py +0 -0
  281. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_order.py +0 -0
  282. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/mock_author.py +0 -0
  283. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/models.py +0 -0
  284. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/network.py +0 -0
  285. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/new_issue_chat.py +0 -0
  286. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/__init__.py +0 -0
  287. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/baseline.py +0 -0
  288. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/cli.py +0 -0
  289. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/collect.py +0 -0
  290. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/digest.py +0 -0
  291. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/models.py +0 -0
  292. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/predicate.py +0 -0
  293. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/service.py +0 -0
  294. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/store.py +0 -0
  295. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/transport.py +0 -0
  296. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notify.py +0 -0
  297. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/openapi.py +0 -0
  298. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/overlap_fence.py +0 -0
  299. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/overlap_predict.py +0 -0
  300. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/parentage.py +0 -0
  301. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/parentage_github.py +0 -0
  302. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/pipeline.py +0 -0
  303. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/plan_parser.py +0 -0
  304. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/plans.py +0 -0
  305. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/platform_paths.py +0 -0
  306. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_bridge.py +0 -0
  307. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_store.py +0 -0
  308. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_sync.py +0 -0
  309. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/pr_body_lint.py +0 -0
  310. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/prereqs.py +0 -0
  311. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/progress.py +0 -0
  312. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/__init__.py +0 -0
  313. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/base.py +0 -0
  314. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/claude.py +0 -0
  315. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/claude_pty.py +0 -0
  316. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/opencode.py +0 -0
  317. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/queue_diagnose.py +0 -0
  318. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/refine_chat.py +0 -0
  319. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_cordon.py +0 -0
  320. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_propagate.py +0 -0
  321. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_verify.py +0 -0
  322. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_window.py +0 -0
  323. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/repo_edit.py +0 -0
  324. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/repo_onboard.py +0 -0
  325. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/reports.py +0 -0
  326. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/revalidate.py +0 -0
  327. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/review.py +0 -0
  328. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/scorecard.py +0 -0
  329. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/serve_app.py +0 -0
  330. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/skills/update-issue/SKILL.md +0 -0
  331. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/smoke.py +0 -0
  332. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/spend_ceiling.py +0 -0
  333. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/split_work.py +0 -0
  334. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/stage_projection.py +0 -0
  335. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/state.py +0 -0
  336. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_author.py +0 -0
  337. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_chat.py +0 -0
  338. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_orchestrator.py +0 -0
  339. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_report.py +0 -0
  340. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/tui_release.py +0 -0
  341. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage.py +0 -0
  342. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage_limits.py +0 -0
  343. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage_rollup.py +0 -0
  344. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/worker_events.py +0 -0
  345. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coordinator.example.yml +0 -0
  346. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-agent.service +0 -0
  347. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.service +0 -0
  348. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.sh +0 -0
  349. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.timer +0 -0
  350. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-drive-queue.service +0 -0
  351. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-drive-queue.timer +0 -0
  352. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-notify.service +0 -0
  353. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-notify.timer +0 -0
  354. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-propagate.service +0 -0
  355. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-propagate.timer +0 -0
  356. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-window.service +0 -0
  357. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-window.timer +0 -0
  358. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-serve.service +0 -0
  359. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.service +0 -0
  360. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.sh +0 -0
  361. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.timer +0 -0
  362. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-rollback.sh +0 -0
  363. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web.service +0 -0
  364. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/node-shim.sh +0 -0
  365. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/AGENT_OPERATIONS.md +0 -0
  366. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ARCHITECTURE.md +0 -0
  367. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ARCH_SECURITY_GATES.md +0 -0
  368. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/COCKPIT.md +0 -0
  369. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CONTROL_CENTER.md +0 -0
  370. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/COST_DISCIPLINE.md +0 -0
  371. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CROSS_PLATFORM.md +0 -0
  372. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CUSTOMER_PORTAL.md +0 -0
  373. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/DRIVE_QUEUE.md +0 -0
  374. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/EPHEMERAL_WORKERS.md +0 -0
  375. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/FORGE_MIGRATION.md +0 -0
  376. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/GRAPHIFY_SETUP.md +0 -0
  377. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ISSUE_GUIDANCE.md +0 -0
  378. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/MAC_MINI.md +0 -0
  379. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  380. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/NOTIFIER.md +0 -0
  381. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/OPENCODE_VERIFICATION.md +0 -0
  382. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/OPERATING_GOTCHAS.md +0 -0
  383. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ORACLE_LOOP.md +0 -0
  384. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PHONE_WEBAPP.md +0 -0
  385. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PIPELINE_V2.md +0 -0
  386. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PLATFORM_EVOLUTION.md +0 -0
  387. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/SECOND_BACKEND.md +0 -0
  388. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/STORE_SERVICE.md +0 -0
  389. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  390. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/WEB_CONTROL_CENTER.md +0 -0
  391. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/README.md +0 -0
  392. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/_tokens.css +0 -0
  393. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/issue-detail.html +0 -0
  394. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/pipeline-narrow.html +0 -0
  395. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/pipeline-wide.html +0 -0
  396. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/graphify-out/.gitignore +0 -0
  397. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/install-agent.sh +0 -0
  398. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/pyproject.toml +0 -0
  399. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/audit_review_verdict_overrides.py +0 -0
  400. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  401. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/build-worker-image.sh +0 -0
  402. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/coordinator-machine.py +0 -0
  403. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/epic-down.sh +0 -0
  404. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/epic-up.sh +0 -0
  405. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/preflight.sh +0 -0
  406. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/provision-worker.sh +0 -0
  407. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  408. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  409. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/verify-github-token.sh +0 -0
  410. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/codegen.py +0 -0
  411. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/coord-test-runner.sh +0 -0
  412. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/gen_board_fixture.py +0 -0
  414. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/next_release_tag.py +0 -0
  415. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/run_tests_in_populated_home.sh +0 -0
  416. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/run_tests_without_gh.sh +0 -0
  417. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/smoke_437_interactive.py +0 -0
  418. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/setup.cfg +0 -0
  422. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  425. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/contract.md +0 -0
  426. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/manifest.yml +0 -0
  427. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  428. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  429. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  430. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  431. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/contract.md +0 -0
  437. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/manifest.yml +0 -0
  438. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  439. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  440. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  441. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  442. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  443. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  444. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  445. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  446. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  447. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  448. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/contract.md +0 -0
  449. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  450. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  451. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/manifest.yml +0 -0
  452. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  453. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/tsconfig.json +0 -0
  454. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  455. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/conftest.py +0 -0
  456. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/board-pipeline-basic.json +0 -0
  457. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  458. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  459. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  460. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  461. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/all_pass.json +0 -0
  462. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  463. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/mixed_fail.json +0 -0
  464. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  465. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  466. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/skip.json +0 -0
  467. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/truncated.json +0 -0
  468. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  469. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  470. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  471. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  472. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  473. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  474. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  475. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  476. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_acceptance.py +0 -0
  477. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_acceptance_drivers.py +0 -0
  478. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent.py +0 -0
  479. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_api_error.py +0 -0
  480. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_app.py +0 -0
  481. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_branch_base.py +0 -0
  482. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_branch_capture.py +0 -0
  483. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_config_free_1712.py +0 -0
  484. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_deploy_units_endpoint.py +0 -0
  485. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_dirty_worktree.py +0 -0
  486. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_graph_self_heal.py +0 -0
  487. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_health_h3.py +0 -0
  488. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_idle_restart.py +0 -0
  489. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_push_failure.py +0 -0
  490. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_reap.py +0 -0
  491. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_repos_and_pull.py +0 -0
  492. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_restart_services_endpoint.py +0 -0
  493. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_startup_diagnostics.py +0 -0
  494. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_update.py +0 -0
  495. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_update_bluegreen.py +0 -0
  496. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_usage_limit.py +0 -0
  497. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_zero_commit.py +0 -0
  498. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ambient_home_isolation.py +0 -0
  499. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_approve_reject_plan.py +0 -0
  500. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_approve_usage_gate.py +0 -0
  501. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_assignment_already_recorded_daemon.py +0 -0
  502. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_log.py +0 -0
  503. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_outcome.py +0 -0
  504. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_query.py +0 -0
  505. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_auto_loop.py +0 -0
  506. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_auto_release_publish_2035.py +0 -0
  507. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_block_log.py +0 -0
  509. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_cap_762.py +0 -0
  510. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_fixture.py +0 -0
  511. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_read_path.py +0 -0
  512. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_service.py +0 -0
  513. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_state.py +0 -0
  514. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_wire.py +0 -0
  515. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_brain.py +0 -0
  516. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_branch_model.py +0 -0
  517. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_bug_intake.py +0 -0
  518. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_parity_2091.py +0 -0
  522. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_store.py +0 -0
  523. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_claim.py +0 -0
  524. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_acceptance.py +0 -0
  525. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign.py +0 -0
  526. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  527. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_interactive_remote.py +0 -0
  528. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_provider.py +0 -0
  529. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  530. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_audit.py +0 -0
  531. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_chat_continue.py +0 -0
  532. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor.py +0 -0
  535. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor_config_free_1801.py +0 -0
  536. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  537. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_fix_headless_review.py +0 -0
  541. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_gate_a.py +0 -0
  542. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_install_drift.py +0 -0
  543. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_install_skills.py +0 -0
  544. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_issue_create_label.py +0 -0
  545. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_issue_reopen.py +0 -0
  546. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_merge.py +0 -0
  547. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_assign.py +0 -0
  548. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_capture.py +0 -0
  549. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_chat_add_child.py +0 -0
  550. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_dispatch.py +0 -0
  551. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_gate_b.py +0 -0
  552. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_gate_c.py +0 -0
  553. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_order.py +0 -0
  554. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  555. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_ship.py +0 -0
  556. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_network.py +0 -0
  557. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_new_issue_chat.py +0 -0
  558. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_plans.py +0 -0
  559. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_portal.py +0 -0
  560. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_pull_artifact.py +0 -0
  561. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_queue.py +0 -0
  562. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_reattach_sessions.py +0 -0
  563. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_refine_board.py +0 -0
  564. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_preflight.py +0 -0
  565. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_propagate.py +0 -0
  566. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_window.py +0 -0
  567. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_repo_2220.py +0 -0
  568. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_scorecard.py +0 -0
  569. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_set_review_findings.py +0 -0
  570. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_advisory_terminal.py +0 -0
  571. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_merge_queue.py +0 -0
  572. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_provider.py +0 -0
  573. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_review_finalizing.py +0 -0
  574. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_test_failed_tag.py +0 -0
  575. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_usage_limit.py +0 -0
  576. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_sync_comments_873.py +0 -0
  577. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_test_plan.py +0 -0
  578. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_track.py +0 -0
  579. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_tui_update.py +0 -0
  580. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_wait.py +0 -0
  581. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_client_base_install.py +0 -0
  582. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_comments.py +0 -0
  583. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_completion_summary.py +0 -0
  584. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config.py +0 -0
  585. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_acceptance.py +0 -0
  586. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_audit.py +0 -0
  587. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_pricing.py +0 -0
  588. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  589. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_usage_gate.py +0 -0
  590. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_conflict_fix.py +0 -0
  591. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_conflict_fix_semantic.py +0 -0
  592. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test.py +0 -0
  593. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_baseline.py +0 -0
  594. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_routing.py +0 -0
  595. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_toolchain.py +0 -0
  596. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_web_sse_restart_live.py +0 -0
  597. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coordinator_machine.py +0 -0
  598. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cross_platform_imports.py +0 -0
  599. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard.py +0 -0
  600. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_fixture.py +0 -0
  601. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_terminal.py +0 -0
  602. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_terminal_live.py +0 -0
  603. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_db.py +0 -0
  604. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dead_end.py +0 -0
  605. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_db_backup.py +0 -0
  606. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_web_dist.py +0 -0
  607. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_web_rollback.py +0 -0
  608. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_drive_queue_unit.py +0 -0
  609. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_manifest.py +0 -0
  610. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_units_lane.py +0 -0
  611. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_web_unit.py +0 -0
  612. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deps.py +0 -0
  613. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_diagnose.py +0 -0
  614. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dispatch.py +0 -0
  615. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dispatch_target_validation.py +0 -0
  616. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dist_name.py +0 -0
  617. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_done_housekeeping.py +0 -0
  618. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive.py +0 -0
  619. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_queue.py +0 -0
  620. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_state.py +0 -0
  621. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_tmux.py +0 -0
  622. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_capability_detection.py +0 -0
  623. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  624. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_image_provenance.py +0 -0
  625. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_errors.py +0 -0
  626. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_events.py +0 -0
  627. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_failure_class.py +0 -0
  628. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_filelock.py +0 -0
  629. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  630. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fix_of_force_override.py +0 -0
  631. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_config_health.py +0 -0
  632. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_health_probes.py +0 -0
  633. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_health_snapshot.py +0 -0
  634. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_freshness.py +0 -0
  635. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_a.py +0 -0
  636. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_b.py +0 -0
  637. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_snapshot_staleness.py +0 -0
  638. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gates.py +0 -0
  639. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  640. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_generated_types_fixture.py +0 -0
  641. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_github_ops.py +0 -0
  642. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_goal.py +0 -0
  643. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_graph_health.py +0 -0
  644. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_graph_selfheal_absent_2237.py +0 -0
  645. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_handoff.py +0 -0
  646. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_checks.py +0 -0
  647. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_cli.py +0 -0
  648. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_cli_graph.py +0 -0
  649. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_config.py +0 -0
  650. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_context.py +0 -0
  651. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_deploy_lane_facts.py +0 -0
  652. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_incident_regression.py +0 -0
  653. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_pypi.py +0 -0
  654. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_registry.py +0 -0
  655. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_timer_active.py +0 -0
  656. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_toolchain.py +0 -0
  657. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_unit_drift.py +0 -0
  658. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_unit_enablement.py +0 -0
  659. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_hooks.py +0 -0
  660. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_human_attended_437.py +0 -0
  661. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_init.py +0 -0
  662. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_integration.py +0 -0
  663. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_briefing_echo.py +0 -0
  664. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_prefill_state.py +0 -0
  665. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_session_relaunch.py +0 -0
  666. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_test_verdict_backstop.py +0 -0
  667. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_token_attribution.py +0 -0
  668. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_worktree.py +0 -0
  669. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_issue_store_seam.py +0 -0
  670. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_liveness_auditor.py +0 -0
  671. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_liveness_notify.py +0 -0
  672. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_machine_pause.py +0 -0
  673. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_merge_queue.py +0 -0
  674. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_merge_verify.py +0 -0
  675. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_chat.py +0 -0
  676. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_dispatch.py +0 -0
  677. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_gate.py +0 -0
  678. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_order.py +0 -0
  679. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_seam.py +0 -0
  680. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_mock_author.py +0 -0
  681. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_model_tiering.py +0 -0
  682. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_models.py +0 -0
  683. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_models_config_labels.py +0 -0
  684. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_needs_attention.py +0 -0
  685. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_network.py +0 -0
  686. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_new_issue_chat.py +0 -0
  687. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_next_release_tag.py +0 -0
  688. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_no_direct_gh_calls.py +0 -0
  689. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_node_shim.py +0 -0
  690. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_baseline.py +0 -0
  691. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_cli.py +0 -0
  692. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_collect.py +0 -0
  693. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_config.py +0 -0
  694. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_drive_seam.py +0 -0
  695. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_isolation.py +0 -0
  696. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_predicate.py +0 -0
  697. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_quiet_hours.py +0 -0
  698. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_service.py +0 -0
  699. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notify.py +0 -0
  700. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notify_drain.py +0 -0
  701. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_openapi.py +0 -0
  702. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_operational_defaults.py +0 -0
  703. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_overlap_fence.py +0 -0
  704. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_overlap_predict.py +0 -0
  705. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_packaged_deploy_units.py +0 -0
  706. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_parentage.py +0 -0
  707. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_paste_landed.py +0 -0
  708. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_pipeline.py +0 -0
  709. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_approve_plan_command.py +0 -0
  710. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_pr_command.py +0 -0
  711. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_review_command.py +0 -0
  712. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_only.py +0 -0
  713. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_parser.py +0 -0
  714. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_platform_paths.py +0 -0
  715. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_bridge.py +0 -0
  716. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_config.py +0 -0
  717. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_sync.py +0 -0
  718. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_pr_body_lint.py +0 -0
  719. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_prereqs.py +0 -0
  720. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_production_db_guard.py +0 -0
  721. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_progress.py +0 -0
  722. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_provider_seam.py +0 -0
  723. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers.py +0 -0
  724. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers_config_labels.py +0 -0
  725. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers_pty.py +0 -0
  726. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_quiet_hours.py +0 -0
  727. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_quiet_hours_store_2146.py +0 -0
  728. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reap_merged_sessions.py +0 -0
  729. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reap_stale_interactive_tick.py +0 -0
  730. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_branch.py +0 -0
  731. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_completions.py +0 -0
  732. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_merges.py +0 -0
  733. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_no_agent_record.py +0 -0
  734. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_usage_limit_done.py +0 -0
  735. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_refine_chat.py +0 -0
  736. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_2101.py +0 -0
  737. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  738. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_deadlock_2240.py +0 -0
  739. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_propagate.py +0 -0
  740. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_edit_2220.py +0 -0
  746. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_graph_fleet_2237.py +0 -0
  747. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_onboard_2220.py +0 -0
  748. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_report_result_push.py +0 -0
  749. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reports.py +0 -0
  750. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry.py +0 -0
  751. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry_advisory_1606.py +0 -0
  752. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry_type_1636.py +0 -0
  753. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_revalidate.py +0 -0
  754. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review.py +0 -0
  755. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_end_review_without_verdict.py +0 -0
  756. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_parse_failure_diagnostic.py +0 -0
  757. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_reaffirm.py +0 -0
  758. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_state.py +0 -0
  759. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_backstop.py +0 -0
  760. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_override_audit.py +0 -0
  761. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_relay.py +0 -0
  762. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_zero_commits.py +0 -0
  763. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_scoped_review_wiring.py +0 -0
  764. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_scorecard.py +0 -0
  765. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_serve.py +0 -0
  766. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_serve_app_board_trim.py +0 -0
  767. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_session.py +0 -0
  768. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_slice_issue_attribution.py +0 -0
  769. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke.py +0 -0
  770. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke_live_checkout_restore.py +0 -0
  771. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke_workflow.py +0 -0
  772. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_spend_ceiling.py +0 -0
  773. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_spend_ceiling_coordinator.py +0 -0
  774. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_split.py +0 -0
  775. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_split_work.py +0 -0
  776. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stage_projection.py +0 -0
  777. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stalled_pipeline.py +0 -0
  778. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_state.py +0 -0
  779. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_state_review_findings_daemon.py +0 -0
  780. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_status_fleet_footer.py +0 -0
  781. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stop_1567.py +0 -0
  782. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stuck.py +0 -0
  783. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_terminal_command.py +0 -0
  784. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_author.py +0 -0
  785. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_chat.py +0 -0
  786. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_orchestrator.py +0 -0
  787. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_report.py +0 -0
  788. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_verdict_parsing.py +0 -0
  789. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_verdict_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_board_audit.py +0 -0
  791. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_config_load_1080.py +0 -0
  792. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_daemon_routing_906.py +0 -0
  793. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_tmux_host.py +0 -0
  794. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_tmux_session.py +0 -0
  795. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage.py +0 -0
  797. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage_limits.py +0 -0
  798. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage_rollup.py +0 -0
  799. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_venv_live_install_2121.py +0 -0
  800. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_version_single_source.py +0 -0
  801. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_watch.py +0 -0
  802. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  803. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_events.py +0 -0
  804. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_image_pin_sync.py +0 -0
  805. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_safety.py +0 -0
  806. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_test_scoping.py +0 -0
  807. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worktree.py +0 -0
  808. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  809. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/Cargo.lock +0 -0
  810. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/Cargo.toml +0 -0
  811. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/cargo-config-local-quadraui.toml.example +0 -0
  812. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/audit.rs +0 -0
  813. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/chat.rs +0 -0
  814. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/data.rs +0 -0
  815. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/dialogs.rs +0 -0
  816. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/drive.rs +0 -0
  817. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/drive_queue.rs +0 -0
  818. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/escalation.rs +0 -0
  819. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/events.rs +0 -0
  820. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fixtures.rs +0 -0
  821. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_health.rs +0 -0
  822. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_sessions.rs +0 -0
  823. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_terminals.rs +0 -0
  824. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/format.rs +0 -0
  825. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/milestone_dag.rs +0 -0
  826. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/mod.rs +0 -0
  827. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/msv.rs +0 -0
  828. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/pipeline.rs +0 -0
  829. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/plans.rs +0 -0
  830. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/render.rs +0 -0
  831. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/reports.rs +0 -0
  832. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/sessions.rs +0 -0
  833. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/settings_ui.rs +0 -0
  834. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/sidebar.rs +0 -0
  835. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/terminal.rs +0 -0
  836. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/tests.rs +0 -0
  837. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/tests/acceptance.rs +0 -0
  845. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/tests/cli.rs +0 -0
  846. {code_coordinator-0.5.115 → code_coordinator-0.5.116}/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.115
3
+ Version: 0.5.116
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.115
3
+ Version: 0.5.116
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
@@ -673,6 +673,7 @@ tests/test_quiet_hours.py
673
673
  tests/test_quiet_hours_store_2146.py
674
674
  tests/test_reap_merged_sessions.py
675
675
  tests/test_reap_stale_interactive_tick.py
676
+ tests/test_reconcile.py
676
677
  tests/test_reconcile_branch.py
677
678
  tests/test_reconcile_completions.py
678
679
  tests/test_reconcile_merges.py
@@ -704,6 +704,7 @@
704
704
  "tests/test_quiet_hours_store_2146.py",
705
705
  "tests/test_reap_merged_sessions.py",
706
706
  "tests/test_reap_stale_interactive_tick.py",
707
+ "tests/test_reconcile.py",
707
708
  "tests/test_reconcile_branch.py",
708
709
  "tests/test_reconcile_completions.py",
709
710
  "tests/test_reconcile_merges.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.115",
2
+ "tag": "0.5.116",
3
3
  "distance": 0,
4
- "node": "g28e36b1a94feb56072af2832c5a0025e5b6ffa90",
4
+ "node": "gf24de3d23e8fe5dd6998c12ce6e8fee637f65f25",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-16"
@@ -1797,9 +1797,12 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1797
1797
  from coord.board_service import read_board, write_board
1798
1798
  from coord.models import WORK_LIKE_TYPES
1799
1799
  from coord.reconcile import (
1800
+ RetryProviderMismatch,
1800
1801
  UnsupportedRetryType,
1801
1802
  _reassign,
1803
+ _resolve_retry_provider,
1802
1804
  describe_no_candidate_machines,
1805
+ describe_retry_provider_mismatch,
1803
1806
  describe_unsupported_retry_type,
1804
1807
  )
1805
1808
 
@@ -1920,14 +1923,59 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1920
1923
  click.echo(f"error: {describe_unsupported_retry_type(exc)}", err=True)
1921
1924
  sys.exit(1)
1922
1925
 
1923
- # Determine escalated model for the retry.
1926
+ # #2323: resolve (and #437 TOS-guard) the provider this retry would
1927
+ # dispatch through BEFORE deciding anything about the model — printed
1928
+ # up front so it's never left for the drive's own header to contradict
1929
+ # four seconds later, and checked before the escalation message so a
1930
+ # refusal is never preceded by a reassuring "escalating model" line for
1931
+ # a retry that's about to be refused. `providers.labels` is consulted
1932
+ # the same way a first work dispatch consults it (gated to
1933
+ # `type="work"`, coord/dispatch.py:548); a genuine `harness:opencode`
1934
+ # label match here means retry lands back on `opencode`, not the
1935
+ # claude default that a label-blind resolution used to fall through to.
1936
+ from coord.state import get_cached_issue_labels # noqa: PLC0415
1937
+
1938
+ issue_labels = get_cached_issue_labels(
1939
+ assignment.repo_name, assignment.issue_number,
1940
+ )
1941
+ try:
1942
+ resolved_provider_name = _resolve_retry_provider(assignment, cfg, issue_labels)
1943
+ except RetryProviderMismatch as exc:
1944
+ click.echo(f"error: {describe_retry_provider_mismatch(exc)}", err=True)
1945
+ sys.exit(1)
1946
+ except ValueError as exc:
1947
+ click.echo(f"error: {exc}", err=True)
1948
+ sys.exit(1)
1949
+ click.echo(f" provider: {resolved_provider_name}")
1950
+
1951
+ # Determine escalated model for the retry. #2323: `cfg.models.
1952
+ # next_model` walks the claude tier ladder — only meaningful when this
1953
+ # retry actually resolves to a claude-family provider. The precheck
1954
+ # above already guarantees `resolved_provider_name` matches the failed
1955
+ # run's own provider (else it would have refused), so gating on the
1956
+ # resolved provider's TYPE here is equivalent to gating on the failed
1957
+ # run's, without a second lookup.
1958
+ from coord.config import IMPLICIT_PROVIDER_TYPES # noqa: PLC0415
1959
+ from coord.providers import provider_type_for # noqa: PLC0415
1960
+
1924
1961
  original_model = assignment.model or cfg.models.default
1925
- escalated = cfg.models.next_model(original_model)
1926
- if escalated != original_model:
1927
- click.echo(f" escalating model: {original_model} → {escalated}")
1962
+ if provider_type_for(resolved_provider_name, cfg.providers) in IMPLICIT_PROVIDER_TYPES:
1963
+ escalated = cfg.models.next_model(original_model)
1964
+ if escalated != original_model:
1965
+ click.echo(f" escalating model: {original_model} → {escalated}")
1966
+ retry_model = escalated
1967
+ else:
1968
+ # Not a claude-family provider — the escalation ladder doesn't
1969
+ # apply; reuse the failed run's own model field exactly (`None`
1970
+ # tells `_reassign` to reuse `assignment.model` verbatim, rather
1971
+ # than stamping `original_model`'s `cfg.models.default` fallback
1972
+ # onto a provider that fallback means nothing to).
1973
+ retry_model = None
1928
1974
 
1929
1975
  try:
1930
- result = _reassign(assignment, board, cfg, model=escalated)
1976
+ result = _reassign(
1977
+ assignment, board, cfg, model=retry_model, issue_labels=issue_labels,
1978
+ )
1931
1979
  except UnsupportedRetryType as exc:
1932
1980
  # Defense in depth — the precheck above already covers this, but
1933
1981
  # `_reassign` is shared with `auto_reassign` and must never silently
@@ -1935,12 +1983,19 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1935
1983
  # precheck.
1936
1984
  click.echo(f"error: {describe_unsupported_retry_type(exc)}", err=True)
1937
1985
  sys.exit(1)
1986
+ except RetryProviderMismatch as exc:
1987
+ # Defense in depth — the precheck above already covers this, but
1988
+ # `_reassign` is shared with `auto_reassign` and must never
1989
+ # silently substitute the provider even if a future caller skips
1990
+ # the precheck.
1991
+ click.echo(f"error: {describe_retry_provider_mismatch(exc)}", err=True)
1992
+ sys.exit(1)
1938
1993
  if result is None:
1939
1994
  # #1396: name the blocking machines and their apparent load instead
1940
1995
  # of a bare "no available machine" — the usual cause is a phantom
1941
1996
  # `running` row from a dead interactive session nothing reaped.
1942
1997
  click.echo(
1943
- f"error: {describe_no_candidate_machines(assignment, board, cfg)}",
1998
+ f"error: {describe_no_candidate_machines(assignment, board, cfg, issue_labels)}",
1944
1999
  err=True,
1945
2000
  )
1946
2001
  sys.exit(1)
@@ -1960,7 +2015,7 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1960
2015
  click.echo(
1961
2016
  f"Retried: {result.machine_name} → {result.repo_name} "
1962
2017
  f"#{result.issue_number} (assignment {result.assignment_id}, "
1963
- f"type={result.type})"
2018
+ f"type={result.type}, provider={resolved_provider_name})"
1964
2019
  )
1965
2020
  # #1101: surface the continued branch so it's obvious the retry picked
1966
2021
  # up existing work instead of forking a fresh branch off the default.
@@ -1028,21 +1028,140 @@ def describe_unsupported_retry_type(exc: UnsupportedRetryType) -> str:
1028
1028
  )
1029
1029
 
1030
1030
 
1031
+ class RetryProviderMismatch(ValueError):
1032
+ """Raised by :func:`_reassign` when a retry would resolve to a
1033
+ different provider than the failed run it is replacing (#2323).
1034
+
1035
+ A retry that consults ``providers.labels`` can legitimately land on a
1036
+ different provider than *this exact assignment row* if the issue's
1037
+ labels or ``coordinator.yml`` changed between the original dispatch and
1038
+ the retry — but silently substituting the provider is exactly the #1796
1039
+ failure mode one level up: an operator (or an unattended `coord drive`)
1040
+ asking to retry a `harness:opencode` leg is not asking to move it to
1041
+ `claude`, even if that is where today's precedence chain would land.
1042
+ Refuse instead, the same way the #437 TOS gate refuses rather than
1043
+ substitutes a human-attended provider.
1044
+ """
1045
+
1046
+ def __init__(self, failed_provider: str, resolved_provider: str):
1047
+ self.failed_provider = failed_provider
1048
+ self.resolved_provider = resolved_provider
1049
+ super().__init__(
1050
+ f"retry would move this assignment from provider "
1051
+ f"{failed_provider!r} to {resolved_provider!r}"
1052
+ )
1053
+
1054
+
1055
+ def describe_retry_provider_mismatch(exc: RetryProviderMismatch) -> str:
1056
+ """Human-readable refusal message for :class:`RetryProviderMismatch`
1057
+ (#2323).
1058
+
1059
+ Mirrors :func:`describe_unsupported_retry_type`'s shape — names both
1060
+ providers and points at the deliberate override an operator who
1061
+ actually wants the move can use.
1062
+ """
1063
+ return (
1064
+ f"refusing retry: the failed run dispatched through provider "
1065
+ f"{exc.failed_provider!r}, but this retry resolves to "
1066
+ f"{exc.resolved_provider!r} — retrying would silently move the "
1067
+ "work onto a different provider (and, for a claude provider, walk "
1068
+ "a model-escalation ladder that has no meaning for the other one). "
1069
+ "If the issue's labels or `providers.labels` changed since the "
1070
+ "original dispatch and the move is intentional, dispatch by hand "
1071
+ "instead: `coord assign --interactive`."
1072
+ )
1073
+
1074
+
1075
+ def _resolve_retry_provider(
1076
+ failed: Assignment, config: Config, issue_labels: list[str] | None,
1077
+ ) -> str:
1078
+ """Resolve (and #437 TOS-guard) the provider a retry of *failed* would
1079
+ dispatch through, refusing if it differs from the provider the failed
1080
+ run itself used (#2323).
1081
+
1082
+ Mirrors a first work dispatch's resolution precedence exactly
1083
+ (``coord.dispatch.dispatch``, ``coord/dispatch.py:548``): spec (always
1084
+ ``None`` here — a retry never carries a fresh per-spec override) ->
1085
+ ``providers.labels`` (gated to ``failed.type == "work"``, the same
1086
+ restriction the first dispatch applies) -> repo default ->
1087
+ ``providers.default``.
1088
+
1089
+ Args:
1090
+ failed: The failed/advisory assignment being retried.
1091
+ config: The coordinator config.
1092
+ issue_labels: The target issue's current GitHub label names, or
1093
+ ``None``/empty when unavailable — falls back to no label match,
1094
+ reproducing pre-#2323 (label-blind) resolution for that one
1095
+ issue rather than raising.
1096
+
1097
+ Returns:
1098
+ The resolved (and TOS-cleared) provider name.
1099
+
1100
+ Raises:
1101
+ ValueError: the #437 TOS gate refuses (the resolved provider is
1102
+ ``human_attended_only``) — same contract
1103
+ :func:`coord.providers.guard_unattended_dispatch` uses.
1104
+ RetryProviderMismatch: the resolved provider differs from
1105
+ ``failed.provider_name`` (falling back to ``"claude"`` for a
1106
+ row dispatched before #324 started recording it).
1107
+ """
1108
+ from coord.providers import guard_unattended_dispatch # noqa: PLC0415
1109
+
1110
+ repo_for_provider = config.repo(failed.repo_name)
1111
+ # #1889/#2323: providers.labels routes work dispatches by the issue's
1112
+ # harness-eval label — gated to type="work" exactly as the first
1113
+ # dispatch gates it (coord/dispatch.py:548) so a label meant for the
1114
+ # eventual work dispatch never leaks into mock-author/test-author
1115
+ # retries that never saw it on their original dispatch either.
1116
+ provider_issue_labels = issue_labels if failed.type == "work" else None
1117
+ resolved = guard_unattended_dispatch(
1118
+ spec_provider=None,
1119
+ repo_provider=(
1120
+ repo_for_provider.provider if repo_for_provider is not None else None
1121
+ ),
1122
+ providers_cfg=config.providers,
1123
+ models_cfg=config.models,
1124
+ where="auto-reassign (reconcile)",
1125
+ issue_labels=provider_issue_labels,
1126
+ )
1127
+ # #324: None means "dispatched before #324 landed or via a path that
1128
+ # doesn't set this field" — the documented implicit default is "claude".
1129
+ failed_provider = failed.provider_name or "claude"
1130
+ if resolved != failed_provider:
1131
+ raise RetryProviderMismatch(failed_provider, resolved)
1132
+ return resolved
1133
+
1134
+
1031
1135
  def _reassign(
1032
1136
  failed: Assignment, board: Board, config: Config,
1033
1137
  *,
1034
1138
  model: str | None = None,
1139
+ issue_labels: list[str] | None = None,
1035
1140
  ) -> Assignment | None:
1036
1141
  """Re-dispatch a failed assignment to a machine with spare capacity.
1037
1142
 
1038
1143
  *model* overrides the model tier on the retry. When None, the
1039
1144
  original assignment's model is reused (escalation happens at the call
1040
- site).
1145
+ site — and must only be requested when the retry resolves to the same
1146
+ claude-family provider the failed run used, #2323: the claude
1147
+ escalation ladder means nothing to another provider).
1148
+
1149
+ *issue_labels* (#2323) is the target issue's current GitHub label
1150
+ names, threaded into provider resolution via
1151
+ :func:`_resolve_retry_provider` so ``providers.labels`` is honoured on
1152
+ a retry the same way it is on a first dispatch — without this, every
1153
+ retry fell through to the repo/global default regardless of which
1154
+ label originally routed the issue.
1041
1155
 
1042
1156
  Raises :class:`UnsupportedRetryType` when ``failed.type`` is not in
1043
1157
  :data:`coord.models.WORK_LIKE_TYPES` — a ``smoke``/``review``/other
1044
1158
  non-work row must not be silently re-dispatched as a fresh
1045
1159
  ``type="work"`` worker (#1636).
1160
+
1161
+ Raises :class:`RetryProviderMismatch` (#2323) when the resolved
1162
+ provider differs from the one the failed run actually used — refuses
1163
+ rather than silently moving the work onto a different provider, the
1164
+ #1796 rule applied at dispatch.
1046
1165
  """
1047
1166
  if failed.type not in WORK_LIKE_TYPES:
1048
1167
  raise UnsupportedRetryType(failed.type, failed.review_of_assignment_id)
@@ -1061,22 +1180,59 @@ def _reassign(
1061
1180
  def has_room(m: Machine) -> bool:
1062
1181
  return len(running.get(m.name, [])) < _machine_capacity(m, config)
1063
1182
 
1183
+ # #437: STRUCTURAL TOS-COMPLIANCE GATE — auto-reassign is an
1184
+ # unattended dispatch path; refuse to retry through a provider that
1185
+ # opts out of unattended use. #2323: also resolves through
1186
+ # `providers.labels` (gated to type="work", exactly as a first
1187
+ # dispatch gates it) instead of skipping straight to the repo/global
1188
+ # default, and refuses outright — RetryProviderMismatch, NOT a silent
1189
+ # `return None` — when the resolution disagrees with the provider the
1190
+ # failed run actually used. A plain TOS ValueError still resolves to
1191
+ # `return None`: skip the reassignment, leaving the failed assignment
1192
+ # for human attention rather than getting silently re-tried on the
1193
+ # wrong provider. Resolved BEFORE machine selection so the #1711
1194
+ # capability filter below can key off it.
1195
+ try:
1196
+ resolved_provider_name = _resolve_retry_provider(failed, config, issue_labels)
1197
+ except RetryProviderMismatch:
1198
+ raise
1199
+ except ValueError:
1200
+ return None
1201
+
1202
+ # #1711: STRUCTURAL PROVIDER-AVAILABILITY GATE, applied as a candidate
1203
+ # filter — a retry must never route to a machine that hasn't declared
1204
+ # it can run the resolved provider (e.g. an `opencode` retry landing on
1205
+ # a machine with no `provider:opencode` capability), exactly as a first
1206
+ # dispatch refuses that combination (`coord.dispatch.dispatch` →
1207
+ # `guard_provider_machine_capability`). Filtering (rather than raising
1208
+ # on `candidates[0]`) means a fleet where SOME machine declares the
1209
+ # capability still retries there; a fleet where none does falls through
1210
+ # to the "no candidates" `return None`, leaving the row for human
1211
+ # attention — `describe_no_candidate_machines` names the reason.
1212
+ from coord.providers import machine_supports_provider # noqa: PLC0415
1213
+
1214
+ def can_run_provider(m: Machine) -> bool:
1215
+ return machine_supports_provider(m, resolved_provider_name, config.providers)
1216
+
1064
1217
  candidates = [
1065
1218
  m for m in config.machines
1066
1219
  if m.can_work_on(failed.repo_name)
1067
1220
  and m.repo_path(failed.repo_name) is not None
1068
1221
  and has_room(m)
1222
+ and can_run_provider(m)
1069
1223
  and m.name != failed.machine_name
1070
1224
  and m.name not in paused
1071
1225
  ]
1072
1226
  if not candidates:
1073
1227
  # Fall back to including the same machine that failed last time —
1074
- # paused machines stay excluded even from the fallback.
1228
+ # paused machines (and #1711 capability-lacking machines) stay
1229
+ # excluded even from the fallback.
1075
1230
  candidates = [
1076
1231
  m for m in config.machines
1077
1232
  if m.can_work_on(failed.repo_name)
1078
1233
  and m.repo_path(failed.repo_name) is not None
1079
1234
  and has_room(m)
1235
+ and can_run_provider(m)
1080
1236
  and m.name not in paused
1081
1237
  ]
1082
1238
  if not candidates:
@@ -1085,31 +1241,6 @@ def _reassign(
1085
1241
  machine = candidates[0]
1086
1242
  repo_path = machine.repo_path(failed.repo_name)
1087
1243
 
1088
- # #437: STRUCTURAL TOS-COMPLIANCE GATE — auto-reassign is an
1089
- # unattended dispatch path; refuse to retry through a provider that
1090
- # opts out of unattended use. Resolve precedence with per-repo
1091
- # override and the global default (the failed assignment doesn't
1092
- # carry a spec-level provider into this path). On refusal: skip the
1093
- # reassignment — the failed assignment stays failed for human
1094
- # attention rather than getting silently re-tried on the wrong
1095
- # provider.
1096
- from coord.providers import guard_unattended_dispatch # noqa: PLC0415
1097
- repo_for_provider = config.repo(failed.repo_name)
1098
- try:
1099
- guard_unattended_dispatch(
1100
- spec_provider=None,
1101
- repo_provider=(
1102
- repo_for_provider.provider
1103
- if repo_for_provider is not None
1104
- else None
1105
- ),
1106
- providers_cfg=config.providers,
1107
- models_cfg=config.models,
1108
- where="auto-reassign (reconcile)",
1109
- )
1110
- except ValueError:
1111
- return None
1112
-
1113
1244
  retry_model = model if model is not None else failed.model
1114
1245
  # The Assignment keeps the alias for legibility; the wire payload is
1115
1246
  # resolved through models.versions when an exact id is pinned.
@@ -1156,6 +1287,18 @@ def _reassign(
1156
1287
  # worker's integration base (the start point / rebase target).
1157
1288
  "branch": retry_default_branch,
1158
1289
  }
1290
+ # #2323: name the resolved provider on the wire the same way a first
1291
+ # dispatch does (`coord.dispatch._wire_payload_needs_provider_field`) —
1292
+ # omitted only for the vanilla, uncustomized "claude" definition so
1293
+ # byte-identical payloads survive for every deployment that never
1294
+ # touches `providers:`. Without this, `resolved_provider_name` above
1295
+ # was resolved (and TOS-guarded, and matched against the failed run)
1296
+ # purely for bookkeeping, and the wire payload silently fell back to
1297
+ # the agent's hardcoded legacy claude spawn path regardless — the exact
1298
+ # bug #2323 reported.
1299
+ from coord.dispatch import _wire_payload_needs_provider_field # noqa: PLC0415
1300
+ if _wire_payload_needs_provider_field(resolved_provider_name, config):
1301
+ payload["provider"] = resolved_provider_name
1159
1302
  # #1101: continue the failed assignment's actual branch instead of
1160
1303
  # silently forking a fresh one off the repo default — any real work it
1161
1304
  # already committed and pushed must not be orphaned by a retry. Mirrors
@@ -1187,6 +1330,12 @@ def _reassign(
1187
1330
  dispatched_at=time.time(),
1188
1331
  type=failed.type,
1189
1332
  model=retry_model,
1333
+ # #2323: record the resolved provider the same way a first dispatch
1334
+ # does (`response.get("_provider_name")` in coord/commands/
1335
+ # dispatch.py) — so the board/TUI and the next retry's own
1336
+ # `_resolve_retry_provider` mismatch check see the provider this
1337
+ # retry actually ran under, not the one the failed row ran under.
1338
+ provider_name=resolved_provider_name,
1190
1339
  # #1101: record the continued branch on the board immediately
1191
1340
  # instead of waiting for a later reconcile backfill from agent
1192
1341
  # /status — the retry payload above already told the agent to
@@ -1222,6 +1371,7 @@ def _reassign(
1222
1371
 
1223
1372
  def describe_no_candidate_machines(
1224
1373
  failed: Assignment, board: Board, config: Config,
1374
+ issue_labels: list[str] | None = None,
1225
1375
  ) -> str:
1226
1376
  """Explain why :func:`_reassign` found no candidate machine (#1396).
1227
1377
 
@@ -1235,15 +1385,39 @@ def describe_no_candidate_machines(
1235
1385
  reaped, still counted against the machine's capacity.
1236
1386
 
1237
1387
  Mirrors ``_reassign``'s exact candidate filter (repo capability, repo
1238
- path, pause set, capacity check, same-machine exclusion — #1417 replaced
1239
- the old binary "any running assignment = busy" rule with a per-machine
1240
- capacity count against ``machines[].max_workers``/``concurrency.
1241
- max_workers``) but keeps a reason per excluded machine instead of
1242
- discarding it, so the message names the blocking machines and what
1243
- they're apparently running — including the age, which makes a
1244
- 400-hour-old phantom obvious at a glance.
1388
+ path, pause set, capacity check, #1711 provider-capability check,
1389
+ same-machine exclusion — #1417 replaced the old binary "any running
1390
+ assignment = busy" rule with a per-machine capacity count against
1391
+ ``machines[].max_workers``/``concurrency.max_workers``) but keeps a
1392
+ reason per excluded machine instead of discarding it, so the message
1393
+ names the blocking machines and what they're apparently running —
1394
+ including the age, which makes a 400-hour-old phantom obvious at a
1395
+ glance.
1396
+
1397
+ *issue_labels* (#2323) threads the same label list the caller handed
1398
+ ``_reassign``, so the provider this diagnostic resolves (for the #1711
1399
+ capability lines) matches the one the retry actually resolved.
1245
1400
  """
1246
1401
  from coord.machine_pause import paused_set # noqa: PLC0415
1402
+ from coord.providers import ( # noqa: PLC0415
1403
+ machine_supports_provider,
1404
+ resolve_provider_name,
1405
+ )
1406
+
1407
+ # #1711: resolve the provider the retry would use, so machines that
1408
+ # can't run it are named as such instead of reading as "free". A
1409
+ # resolution failure (unknown provider name in config) degrades to
1410
+ # skipping the capability lines — this is a diagnostic, not a gate.
1411
+ repo_for_capability = config.repo(failed.repo_name)
1412
+ try:
1413
+ provider_for_capability: str | None = resolve_provider_name(
1414
+ None,
1415
+ repo_for_capability.provider if repo_for_capability is not None else None,
1416
+ config.providers,
1417
+ issue_labels=issue_labels if failed.type == "work" else None,
1418
+ )
1419
+ except ValueError:
1420
+ provider_for_capability = None
1247
1421
 
1248
1422
  paused = paused_set(config.machines)
1249
1423
  now = time.time()
@@ -1271,6 +1445,18 @@ def describe_no_candidate_machines(
1271
1445
  if m.name in paused:
1272
1446
  lines.append(f" {m.name}: paused")
1273
1447
  continue
1448
+ if provider_for_capability is not None and not machine_supports_provider(
1449
+ m, provider_for_capability, config.providers,
1450
+ ):
1451
+ # #1711: mirrors `_reassign`'s capability filter — this machine
1452
+ # never declared it can run the resolved provider, so it was
1453
+ # excluded regardless of load.
1454
+ lines.append(
1455
+ f" {m.name}: cannot run provider {provider_for_capability!r} "
1456
+ "(no matching capability in coordinator.yml "
1457
+ "machines[].capabilities)"
1458
+ )
1459
+ continue
1274
1460
  running = running_by_machine.get(m.name, [])
1275
1461
  cap = _machine_capacity(m, config)
1276
1462
  own_full = len(running) >= cap
@@ -1787,7 +1973,26 @@ def reconcile(board: Board, config: Config) -> list[str]:
1787
1973
  getattr(failed_a, "failure_reason", None)
1788
1974
  ):
1789
1975
  continue
1790
- reassigned = _reassign(failed_a, board, config)
1976
+ # #2323: thread the issue's cached labels through so
1977
+ # auto-reassign resolves `providers.labels` the same way a
1978
+ # first dispatch (and `coord retry`) does — best-effort local
1979
+ # cache read (never a GitHub call from this passive tick); an
1980
+ # uncached issue falls back to label-blind resolution, same as
1981
+ # passing `None`.
1982
+ from coord.state import get_cached_issue_labels # noqa: PLC0415
1983
+
1984
+ cached_labels = get_cached_issue_labels(
1985
+ failed_a.repo_name, failed_a.issue_number,
1986
+ )
1987
+ try:
1988
+ reassigned = _reassign(
1989
+ failed_a, board, config, issue_labels=cached_labels,
1990
+ )
1991
+ except RetryProviderMismatch:
1992
+ # Refuse rather than substitute (#2323) — leave the failed
1993
+ # assignment for human attention (`coord retry`) instead of
1994
+ # silently auto-moving it to a different provider.
1995
+ continue
1791
1996
  if reassigned is not None and reassigned.assignment_id is not None:
1792
1997
  changed.append(reassigned.assignment_id)
1793
1998