code-coordinator 0.5.57__tar.gz → 0.5.58__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 (814) hide show
  1. {code_coordinator-0.5.57/code_coordinator.egg-info → code_coordinator-0.5.58}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.57 → code_coordinator-0.5.58/code_coordinator.egg-info}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/db.py +8 -1
  5. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/merge_queue.py +83 -4
  6. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_merge.py +20 -0
  7. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_db.py +73 -0
  8. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_merge_queue.py +147 -17
  9. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/fixtures/board_sample.json +1 -0
  10. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.gitignore +0 -0
  24. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/GOAL.md +0 -0
  26. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/LICENSE +0 -0
  27. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/README.md +0 -0
  29. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/client.py +0 -0
  59. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/merge.py +0 -0
  74. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/milestone.py +0 -0
  75. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/plan_followup.py +0 -0
  76. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/plans.py +0 -0
  77. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/portal.py +0 -0
  78. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/release.py +0 -0
  79. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/report.py +0 -0
  80. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/review.py +0 -0
  81. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/scorecard.py +0 -0
  82. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/sessions.py +0 -0
  83. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/setup.py +0 -0
  84. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/status.py +0 -0
  85. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/terminal.py +0 -0
  86. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/test_gate.py +0 -0
  87. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/tui.py +0 -0
  88. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/comments.py +0 -0
  89. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/config.py +0 -0
  90. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/conflict_fix.py +0 -0
  91. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dao.py +0 -0
  92. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/__init__.py +0 -0
  93. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/fixture.py +0 -0
  94. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/index.html +0 -0
  95. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/server.py +0 -0
  96. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/terminal.py +0 -0
  97. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/.gitignore +0 -0
  98. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/components.json +0 -0
  99. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  100. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  101. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  102. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  103. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  104. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  105. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  106. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  107. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  108. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/index.html +0 -0
  109. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  110. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/sw.js +0 -0
  111. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  112. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  113. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  114. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  115. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  116. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  117. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  118. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  119. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  120. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  121. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/eslint.config.js +0 -0
  122. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/index.html +0 -0
  123. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  124. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/package-lock.json +0 -0
  125. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/package.json +0 -0
  126. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  127. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/playwright.config.ts +0 -0
  128. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/postcss.config.js +0 -0
  129. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  130. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  131. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  132. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/App.tsx +0 -0
  133. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/api/client.ts +0 -0
  134. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  135. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  136. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  137. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  138. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  139. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  140. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  141. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  142. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  143. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  144. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  145. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  146. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  147. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  148. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  149. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  150. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  151. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  152. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  153. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  154. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  155. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  156. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  157. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  158. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  159. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  160. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  161. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  162. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  163. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  164. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  165. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  166. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  167. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  168. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  169. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/index.css +0 -0
  170. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  171. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  172. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/main.tsx +0 -0
  173. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  174. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  175. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  176. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  177. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  178. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  179. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  180. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  181. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  182. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  183. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  184. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  185. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  186. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  187. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  188. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  189. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  190. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  191. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  192. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  193. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  194. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  195. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  196. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tailwind.config.js +0 -0
  197. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tsconfig.json +0 -0
  198. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  199. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/vite.config.ts +0 -0
  200. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dead_end.py +0 -0
  201. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/README.md +0 -0
  202. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-agent.service +0 -0
  203. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.service +0 -0
  204. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.sh +0 -0
  205. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.timer +0 -0
  206. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-drive-queue.service +0 -0
  207. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-drive-queue.timer +0 -0
  208. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-notify.service +0 -0
  209. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-notify.timer +0 -0
  210. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-propagate.service +0 -0
  211. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-propagate.timer +0 -0
  212. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-window.service +0 -0
  213. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-window.timer +0 -0
  214. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-serve.service +0 -0
  215. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web-dist-build.service +0 -0
  216. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web-dist-build.timer +0 -0
  217. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web.service +0 -0
  218. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy_manifest.py +0 -0
  219. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy_units.py +0 -0
  220. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deps.py +0 -0
  221. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/diagnose.py +0 -0
  222. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dispatch.py +0 -0
  223. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dist_name.py +0 -0
  224. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive.py +0 -0
  225. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive_queue.py +0 -0
  226. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive_state.py +0 -0
  227. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/events.py +0 -0
  228. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/failure_class.py +0 -0
  229. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/filelock.py +0 -0
  230. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/fleet_config_health.py +0 -0
  231. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/freshness.py +0 -0
  232. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_a.py +0 -0
  233. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_b.py +0 -0
  234. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_snapshot.py +0 -0
  235. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gates.py +0 -0
  236. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/github_ops.py +0 -0
  237. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/goal.py +0 -0
  238. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/graph_health.py +0 -0
  239. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/__init__.py +0 -0
  240. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/aggregate.py +0 -0
  241. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/__init__.py +0 -0
  242. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/agent_install.py +0 -0
  243. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/cargo_targets.py +0 -0
  244. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/claude_binary.py +0 -0
  245. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/deploy_lane_facts.py +0 -0
  246. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/disk.py +0 -0
  247. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_board.py +0 -0
  248. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  249. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_phantom.py +0 -0
  250. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_unit_drift.py +0 -0
  251. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/graph.py +0 -0
  252. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/plan_usage.py +0 -0
  253. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/repo_state.py +0 -0
  254. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/spawned_coord.py +0 -0
  255. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/timer_active.py +0 -0
  256. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/toolchain.py +0 -0
  257. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/unit_drift.py +0 -0
  258. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/unit_enablement.py +0 -0
  259. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/worktrees.py +0 -0
  260. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/cli.py +0 -0
  261. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/context.py +0 -0
  262. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/fleet_snapshot.py +0 -0
  263. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/models.py +0 -0
  264. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/pypi.py +0 -0
  265. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/registry.py +0 -0
  266. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/render.py +0 -0
  267. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/units.py +0 -0
  268. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/hooks.py +0 -0
  269. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/housekeeping.py +0 -0
  270. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/interactive.py +0 -0
  271. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/issue_store.py +0 -0
  272. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/liveness_auditor.py +0 -0
  273. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/machine_pause.py +0 -0
  274. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_chat.py +0 -0
  275. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_dispatch.py +0 -0
  276. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_gate.py +0 -0
  277. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_order.py +0 -0
  278. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/mock_author.py +0 -0
  279. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/models.py +0 -0
  280. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/network.py +0 -0
  281. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/new_issue_chat.py +0 -0
  282. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/__init__.py +0 -0
  283. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/baseline.py +0 -0
  284. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/cli.py +0 -0
  285. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/collect.py +0 -0
  286. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/digest.py +0 -0
  287. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/models.py +0 -0
  288. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/predicate.py +0 -0
  289. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/service.py +0 -0
  290. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/store.py +0 -0
  291. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/transport.py +0 -0
  292. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notify.py +0 -0
  293. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/openapi.py +0 -0
  294. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/overlap_fence.py +0 -0
  295. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/parentage.py +0 -0
  296. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/parentage_github.py +0 -0
  297. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/pipeline.py +0 -0
  298. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/plan_parser.py +0 -0
  299. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/plans.py +0 -0
  300. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/platform_paths.py +0 -0
  301. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/portal_bridge.py +0 -0
  302. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/pr_body_lint.py +0 -0
  303. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/prereqs.py +0 -0
  304. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/progress.py +0 -0
  305. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/__init__.py +0 -0
  306. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/base.py +0 -0
  307. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/claude.py +0 -0
  308. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/claude_pty.py +0 -0
  309. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/opencode.py +0 -0
  310. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/reconcile.py +0 -0
  311. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/refine_chat.py +0 -0
  312. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_cordon.py +0 -0
  313. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_propagate.py +0 -0
  314. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_verify.py +0 -0
  315. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_window.py +0 -0
  316. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/reports.py +0 -0
  317. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/revalidate.py +0 -0
  318. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/review.py +0 -0
  319. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/scorecard.py +0 -0
  320. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/serve_app.py +0 -0
  321. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/skills/update-issue/SKILL.md +0 -0
  322. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/smoke.py +0 -0
  323. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/spend_ceiling.py +0 -0
  324. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/split_work.py +0 -0
  325. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/stage_projection.py +0 -0
  326. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/state.py +0 -0
  327. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_author.py +0 -0
  328. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_chat.py +0 -0
  329. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_orchestrator.py +0 -0
  330. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_report.py +0 -0
  331. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/tui_release.py +0 -0
  332. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage.py +0 -0
  333. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage_limits.py +0 -0
  334. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage_rollup.py +0 -0
  335. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/worker_events.py +0 -0
  336. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coordinator.example.yml +0 -0
  337. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-agent.service +0 -0
  338. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.service +0 -0
  339. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.sh +0 -0
  340. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.timer +0 -0
  341. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-drive-queue.service +0 -0
  342. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-drive-queue.timer +0 -0
  343. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-notify.service +0 -0
  344. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-notify.timer +0 -0
  345. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-propagate.service +0 -0
  346. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-propagate.timer +0 -0
  347. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-window.service +0 -0
  348. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-window.timer +0 -0
  349. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-serve.service +0 -0
  350. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.service +0 -0
  351. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.sh +0 -0
  352. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.timer +0 -0
  353. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-rollback.sh +0 -0
  354. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web.service +0 -0
  355. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/node-shim.sh +0 -0
  356. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/AGENT_OPERATIONS.md +0 -0
  357. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ARCHITECTURE.md +0 -0
  358. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ARCH_SECURITY_GATES.md +0 -0
  359. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/COCKPIT.md +0 -0
  360. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CONTROL_CENTER.md +0 -0
  361. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CROSS_PLATFORM.md +0 -0
  362. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CUSTOMER_PORTAL.md +0 -0
  363. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/DRIVE_QUEUE.md +0 -0
  364. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/EPHEMERAL_WORKERS.md +0 -0
  365. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/FORGE_MIGRATION.md +0 -0
  366. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/GRAPHIFY_SETUP.md +0 -0
  367. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ISSUE_GUIDANCE.md +0 -0
  368. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/MAC_MINI.md +0 -0
  369. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  370. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/NOTIFIER.md +0 -0
  371. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/OPENCODE_VERIFICATION.md +0 -0
  372. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/OPERATING_GOTCHAS.md +0 -0
  373. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ORACLE_LOOP.md +0 -0
  374. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PHONE_WEBAPP.md +0 -0
  375. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PIPELINE_V2.md +0 -0
  376. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PLATFORM_EVOLUTION.md +0 -0
  377. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/SECOND_BACKEND.md +0 -0
  378. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/STORE_SERVICE.md +0 -0
  379. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  380. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/WEB_CONTROL_CENTER.md +0 -0
  381. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/epic-down.sh +0 -0
  394. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/epic-up.sh +0 -0
  395. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/preflight.sh +0 -0
  396. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/provision-worker.sh +0 -0
  397. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  398. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  399. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/verify-github-token.sh +0 -0
  400. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/codegen.py +0 -0
  401. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/coord-test-runner.sh +0 -0
  402. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/drive-batch.sh +0 -0
  403. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/gen_board_fixture.py +0 -0
  404. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/next_release_tag.py +0 -0
  405. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/run_tests_in_populated_home.sh +0 -0
  406. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/run_tests_without_gh.sh +0 -0
  407. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/smoke_437_interactive.py +0 -0
  408. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_878_review_capture.py +0 -0
  409. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_release_published.py +0 -0
  410. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_release_wheel.py +0 -0
  411. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/setup.cfg +0 -0
  412. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/SMOKE_SET.md +0 -0
  413. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/__init__.py +0 -0
  414. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  415. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/contract.md +0 -0
  416. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/manifest.yml +0 -0
  417. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  418. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  419. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  420. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  421. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/conftest.py +0 -0
  422. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/contract.md +0 -0
  423. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/manifest.yml +0 -0
  424. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  425. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  426. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/contract.md +0 -0
  427. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/manifest.yml +0 -0
  428. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  429. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  430. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  431. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  432. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  433. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  434. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  435. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  436. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  437. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  438. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/contract.md +0 -0
  439. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  440. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  441. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/manifest.yml +0 -0
  442. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/tsconfig.json +0 -0
  444. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  445. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/conftest.py +0 -0
  446. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/board-pipeline-basic.json +0 -0
  447. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  448. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  449. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  462. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  463. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  464. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  465. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_acceptance.py +0 -0
  466. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_acceptance_drivers.py +0 -0
  467. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent.py +0 -0
  468. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_api_error.py +0 -0
  469. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_app.py +0 -0
  470. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_branch_base.py +0 -0
  471. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_branch_capture.py +0 -0
  472. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_config_free_1712.py +0 -0
  473. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_deploy_units_endpoint.py +0 -0
  474. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_dirty_worktree.py +0 -0
  475. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_graph_self_heal.py +0 -0
  476. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_health_h3.py +0 -0
  477. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_idle_restart.py +0 -0
  478. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_push_failure.py +0 -0
  479. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_reap.py +0 -0
  480. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_repos_and_pull.py +0 -0
  481. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_restart_services_endpoint.py +0 -0
  482. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_startup_diagnostics.py +0 -0
  483. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_update.py +0 -0
  484. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_update_bluegreen.py +0 -0
  485. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_usage_limit.py +0 -0
  486. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_zero_commit.py +0 -0
  487. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ambient_home_isolation.py +0 -0
  488. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_approve_reject_plan.py +0 -0
  489. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_approve_usage_gate.py +0 -0
  490. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_assignment_already_recorded_daemon.py +0 -0
  491. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_log.py +0 -0
  492. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_outcome.py +0 -0
  493. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_query.py +0 -0
  494. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_auto_loop.py +0 -0
  495. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_auto_release_publish_2035.py +0 -0
  496. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_base_checkout_restore.py +0 -0
  497. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_cap_762.py +0 -0
  498. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_fixture.py +0 -0
  499. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_read_path.py +0 -0
  500. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_service.py +0 -0
  501. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_state.py +0 -0
  502. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_wire.py +0 -0
  503. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_brain.py +0 -0
  504. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_branch_model.py +0 -0
  505. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_bug_intake.py +0 -0
  506. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_build_worker_image_env_update.py +0 -0
  507. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cargo_cache.py +0 -0
  508. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ci_acceptance_gate_1950.py +0 -0
  509. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ci_store.py +0 -0
  510. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_claim.py +0 -0
  511. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_acceptance.py +0 -0
  512. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign.py +0 -0
  513. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  514. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_interactive_remote.py +0 -0
  515. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_provider.py +0 -0
  516. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_audit.py +0 -0
  517. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_chat_continue.py +0 -0
  518. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_diagnose_config_provenance.py +0 -0
  519. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_diagnose_graph.py +0 -0
  520. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor.py +0 -0
  521. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor_config_free_1801.py +0 -0
  522. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  523. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_drive.py +0 -0
  524. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_drive_queue.py +0 -0
  525. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_escalate.py +0 -0
  526. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_fix_headless_review.py +0 -0
  527. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_gate_a.py +0 -0
  528. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_install_drift.py +0 -0
  529. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_install_skills.py +0 -0
  530. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_issue_create_label.py +0 -0
  531. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_issue_reopen.py +0 -0
  532. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_merge_queue.py +0 -0
  556. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_provider.py +0 -0
  557. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_review_finalizing.py +0 -0
  558. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_test_failed_tag.py +0 -0
  559. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_usage_limit.py +0 -0
  560. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_sync_comments_873.py +0 -0
  561. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_test_plan.py +0 -0
  562. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_track.py +0 -0
  563. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_tui_update.py +0 -0
  564. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_wait.py +0 -0
  565. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_client_base_install.py +0 -0
  566. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_usage_gate.py +0 -0
  573. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test.py +0 -0
  576. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_baseline.py +0 -0
  577. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_routing.py +0 -0
  578. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_toolchain.py +0 -0
  579. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_web_sse_restart_live.py +0 -0
  580. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coordinator_machine.py +0 -0
  581. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cross_platform_imports.py +0 -0
  582. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard.py +0 -0
  583. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_fixture.py +0 -0
  584. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_terminal.py +0 -0
  585. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_terminal_live.py +0 -0
  586. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dead_end.py +0 -0
  587. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_db_backup.py +0 -0
  588. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_web_dist.py +0 -0
  589. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_web_rollback.py +0 -0
  590. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_drive_queue_unit.py +0 -0
  591. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_manifest.py +0 -0
  592. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_units_lane.py +0 -0
  593. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_web_unit.py +0 -0
  594. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deps.py +0 -0
  595. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_diagnose.py +0 -0
  596. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dispatch.py +0 -0
  597. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dispatch_target_validation.py +0 -0
  598. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dist_name.py +0 -0
  599. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_done_housekeeping.py +0 -0
  600. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive.py +0 -0
  601. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_queue.py +0 -0
  602. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_state.py +0 -0
  603. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_tmux.py +0 -0
  604. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_capability_detection.py +0 -0
  605. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  606. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_image_provenance.py +0 -0
  607. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_errors.py +0 -0
  608. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_events.py +0 -0
  609. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_failure_class.py +0 -0
  610. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_filelock.py +0 -0
  611. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  612. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fix_of_force_override.py +0 -0
  613. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_config_health.py +0 -0
  614. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_health_probes.py +0 -0
  615. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_health_snapshot.py +0 -0
  616. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_freshness.py +0 -0
  617. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_a.py +0 -0
  618. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_b.py +0 -0
  619. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_snapshot_staleness.py +0 -0
  620. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gates.py +0 -0
  621. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_generated_types_fixture.py +0 -0
  622. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_github_ops.py +0 -0
  623. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_goal.py +0 -0
  624. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_graph_health.py +0 -0
  625. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_deploy_lane_facts.py +0 -0
  632. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_incident_regression.py +0 -0
  633. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_pypi.py +0 -0
  634. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_registry.py +0 -0
  635. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_timer_active.py +0 -0
  636. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_toolchain.py +0 -0
  637. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_unit_drift.py +0 -0
  638. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_unit_enablement.py +0 -0
  639. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_hooks.py +0 -0
  640. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_human_attended_437.py +0 -0
  641. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_init.py +0 -0
  642. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_integration.py +0 -0
  643. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_briefing_echo.py +0 -0
  644. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_prefill_state.py +0 -0
  645. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_session_relaunch.py +0 -0
  646. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_test_verdict_backstop.py +0 -0
  647. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_token_attribution.py +0 -0
  648. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_worktree.py +0 -0
  649. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_issue_store_seam.py +0 -0
  650. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_liveness_auditor.py +0 -0
  651. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_liveness_notify.py +0 -0
  652. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_machine_pause.py +0 -0
  653. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_merge_verify.py +0 -0
  654. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_chat.py +0 -0
  655. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_dispatch.py +0 -0
  656. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_gate.py +0 -0
  657. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_order.py +0 -0
  658. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_seam.py +0 -0
  659. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_mock_author.py +0 -0
  660. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_model_tiering.py +0 -0
  661. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_models.py +0 -0
  662. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_models_config_labels.py +0 -0
  663. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_needs_attention.py +0 -0
  664. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_network.py +0 -0
  665. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_new_issue_chat.py +0 -0
  666. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_next_release_tag.py +0 -0
  667. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_no_direct_gh_calls.py +0 -0
  668. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_node_shim.py +0 -0
  669. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_baseline.py +0 -0
  670. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_cli.py +0 -0
  671. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_collect.py +0 -0
  672. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_config.py +0 -0
  673. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_drive_seam.py +0 -0
  674. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_isolation.py +0 -0
  675. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_predicate.py +0 -0
  676. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_quiet_hours.py +0 -0
  677. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_service.py +0 -0
  678. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notify.py +0 -0
  679. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notify_drain.py +0 -0
  680. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_openapi.py +0 -0
  681. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_operational_defaults.py +0 -0
  682. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_overlap_fence.py +0 -0
  683. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_packaged_deploy_units.py +0 -0
  684. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_parentage.py +0 -0
  685. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_paste_landed.py +0 -0
  686. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_pipeline.py +0 -0
  687. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_approve_plan_command.py +0 -0
  688. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_pr_command.py +0 -0
  689. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_review_command.py +0 -0
  690. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_only.py +0 -0
  691. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_parser.py +0 -0
  692. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_platform_paths.py +0 -0
  693. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_portal_bridge.py +0 -0
  694. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_portal_config.py +0 -0
  695. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_pr_body_lint.py +0 -0
  696. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_prereqs.py +0 -0
  697. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_production_db_guard.py +0 -0
  698. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_progress.py +0 -0
  699. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_provider_seam.py +0 -0
  700. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers.py +0 -0
  701. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers_config_labels.py +0 -0
  702. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers_pty.py +0 -0
  703. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_quiet_hours.py +0 -0
  704. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_quiet_hours_store_2146.py +0 -0
  705. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reap_merged_sessions.py +0 -0
  706. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reap_stale_interactive_tick.py +0 -0
  707. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_branch.py +0 -0
  708. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_completions.py +0 -0
  709. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_merges.py +0 -0
  710. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_usage_limit_done.py +0 -0
  711. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_refine_chat.py +0 -0
  712. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_cordon_2101.py +0 -0
  713. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_propagate.py +0 -0
  714. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_unified_1242.py +0 -0
  715. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_verify.py +0 -0
  716. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_window.py +0 -0
  717. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_remote_auto_prune.py +0 -0
  718. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_remote_interactive_reaper.py +0 -0
  719. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_report_result_push.py +0 -0
  720. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reports.py +0 -0
  721. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry.py +0 -0
  722. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry_advisory_1606.py +0 -0
  723. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry_type_1636.py +0 -0
  724. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_revalidate.py +0 -0
  725. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review.py +0 -0
  726. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_end_review_without_verdict.py +0 -0
  727. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_parse_failure_diagnostic.py +0 -0
  728. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_reaffirm.py +0 -0
  729. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_state.py +0 -0
  730. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_backstop.py +0 -0
  731. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_override_audit.py +0 -0
  732. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_relay.py +0 -0
  733. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_zero_commits.py +0 -0
  734. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_scoped_review_wiring.py +0 -0
  735. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_scorecard.py +0 -0
  736. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_serve.py +0 -0
  737. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_serve_app_board_trim.py +0 -0
  738. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_session.py +0 -0
  739. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_slice_issue_attribution.py +0 -0
  740. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke.py +0 -0
  741. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke_live_checkout_restore.py +0 -0
  742. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke_workflow.py +0 -0
  743. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_spend_ceiling.py +0 -0
  744. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_spend_ceiling_coordinator.py +0 -0
  745. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_split.py +0 -0
  746. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_split_work.py +0 -0
  747. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stage_projection.py +0 -0
  748. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stalled_pipeline.py +0 -0
  749. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_state.py +0 -0
  750. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_state_review_findings_daemon.py +0 -0
  751. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_status_fleet_footer.py +0 -0
  752. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stop_1567.py +0 -0
  753. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stuck.py +0 -0
  754. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_terminal_command.py +0 -0
  755. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_author.py +0 -0
  756. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_chat.py +0 -0
  757. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_orchestrator.py +0 -0
  758. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_report.py +0 -0
  759. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_verdict_parsing.py +0 -0
  760. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_verdict_transcript_floor.py +0 -0
  761. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_board_audit.py +0 -0
  762. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_config_load_1080.py +0 -0
  763. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_daemon_routing_906.py +0 -0
  764. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_tmux_host.py +0 -0
  765. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_tmux_session.py +0 -0
  766. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_transcript_floor.py +0 -0
  767. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage.py +0 -0
  768. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage_limits.py +0 -0
  769. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage_rollup.py +0 -0
  770. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_venv_live_install_2121.py +0 -0
  771. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_version_single_source.py +0 -0
  772. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_watch.py +0 -0
  773. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_events.py +0 -0
  774. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_image_pin_sync.py +0 -0
  775. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_safety.py +0 -0
  776. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worktree.py +0 -0
  777. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  778. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/Cargo.lock +0 -0
  779. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/Cargo.toml +0 -0
  780. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/cargo-config-local-quadraui.toml.example +0 -0
  781. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/audit.rs +0 -0
  782. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/chat.rs +0 -0
  783. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/data.rs +0 -0
  784. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/dialogs.rs +0 -0
  785. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/drive.rs +0 -0
  786. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/drive_queue.rs +0 -0
  787. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/escalation.rs +0 -0
  788. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/events.rs +0 -0
  789. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fixtures.rs +0 -0
  790. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_health.rs +0 -0
  791. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_sessions.rs +0 -0
  792. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_terminals.rs +0 -0
  793. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/format.rs +0 -0
  794. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/milestone_dag.rs +0 -0
  795. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/mod.rs +0 -0
  796. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/msv.rs +0 -0
  797. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/pipeline.rs +0 -0
  798. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/plans.rs +0 -0
  799. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/render.rs +0 -0
  800. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/reports.rs +0 -0
  801. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/sessions.rs +0 -0
  802. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/settings_ui.rs +0 -0
  803. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/sidebar.rs +0 -0
  804. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/terminal.rs +0 -0
  805. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/tests.rs +0 -0
  806. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/types.rs +0 -0
  807. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/workspace.rs +0 -0
  808. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/bin/gtk.rs +0 -0
  809. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/commands.rs +0 -0
  810. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/lib.rs +0 -0
  811. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/main.rs +0 -0
  812. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/settings.rs +0 -0
  813. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/acceptance.rs +0 -0
  814. {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/cli.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.57
3
+ Version: 0.5.58
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.57
3
+ Version: 0.5.58
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.57",
2
+ "tag": "0.5.58",
3
3
  "distance": 0,
4
- "node": "ge814fae5eeda1e29d1a4fc796dc41051c4ae8d99",
4
+ "node": "g36b37b343666fd25278ef49e2b4521e94ec1a50a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-13"
@@ -188,7 +188,8 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
188
188
  enqueued_at REAL,
189
189
  assignment_type TEXT DEFAULT 'work',
190
190
  required_gates TEXT,
191
- ci_infra_reruns INTEGER NOT NULL DEFAULT 0
191
+ ci_infra_reruns INTEGER NOT NULL DEFAULT 0,
192
+ ci_stale_reruns INTEGER NOT NULL DEFAULT 0
192
193
  );
193
194
 
194
195
  CREATE TABLE IF NOT EXISTS plans (
@@ -697,6 +698,12 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
697
698
  # predating this column (no auto-reruns spent yet), same as the
698
699
  # column's own default for freshly-enqueued entries.
699
700
  "ALTER TABLE merge_queue ADD COLUMN ci_infra_reruns INTEGER NOT NULL DEFAULT 0",
701
+ # #2197: the CI-staleness auto-rerun's OWN counter — see
702
+ # `coord.merge_queue.MAX_CI_STALE_RERUNS` and
703
+ # `QueuedMerge.ci_stale_reruns`'s docstring for why it is kept
704
+ # separate from `ci_infra_reruns` rather than sharing it. 0 for
705
+ # every row predating this column, same as a freshly-enqueued entry.
706
+ "ALTER TABLE merge_queue ADD COLUMN ci_stale_reruns INTEGER NOT NULL DEFAULT 0",
700
707
  # #1956: verdict provenance — WHO recorded `review_verdict` and HOW
701
708
  # (see coord.models.Assignment.verdict_source for the three values
702
709
  # and why conflating them was the second half of #1956). NULL for
@@ -1417,6 +1417,19 @@ def is_ci_infra_reason(reason: str | None) -> bool:
1417
1417
  # standing breakage.
1418
1418
  MAX_CI_INFRA_RERUNS = 2
1419
1419
 
1420
+ # #2197: same shape as MAX_CI_INFRA_RERUNS above, but for the OTHER CI
1421
+ # auto-rerun trigger `process()` supports — a PASSING check recorded against
1422
+ # a base that has since moved (:data:`CI_STALE_PREFIX`, #1851's staleness
1423
+ # signal), not a failure. Deliberately a SEPARATE constant/counter from
1424
+ # `ci_infra_reruns`: the two triggers answer opposite readings of CI ("this
1425
+ # failed and needs to prove itself again" vs. "this passed but predates the
1426
+ # base and needs a fresh answer") and must be independently capped and
1427
+ # independently legible in the audit trail. A base that keeps moving out
1428
+ # from under one PR (a busy queue, or a genuinely wedged branch) would
1429
+ # otherwise auto-rerun forever; two tries rides out an ordinary busy tick
1430
+ # without masking a PR that just isn't going to catch up unattended.
1431
+ MAX_CI_STALE_RERUNS = 2
1432
+
1420
1433
 
1421
1434
  def _ci_infra_reason(
1422
1435
  ci: "CiStore", repo: str, number: int, failed: "list[CheckRun]"
@@ -2168,6 +2181,15 @@ class QueuedMerge:
2168
2181
  # forever. 0 for every entry that has never hit a verdictless failure,
2169
2182
  # and for rows predating this column.
2170
2183
  ci_infra_reruns: int = 0
2184
+ # #2197: count of automatic `CiStore.rerun_for_pr` calls `process()` has
2185
+ # issued for this entry's CURRENT run of CI staleness (#1851) — a
2186
+ # PASSING check recorded against a base that has since moved. Kept
2187
+ # separate from `ci_infra_reruns` above on purpose (see
2188
+ # `MAX_CI_STALE_RERUNS`'s comment): the two triggers must be
2189
+ # independently capped and independently legible in the audit trail.
2190
+ # Capped at `MAX_CI_STALE_RERUNS`. 0 for every entry that has never gone
2191
+ # CI-stale, and for rows predating this column.
2192
+ ci_stale_reruns: int = 0
2171
2193
 
2172
2194
 
2173
2195
  class GhOps(Protocol):
@@ -2459,6 +2481,9 @@ def load_queue() -> list[QueuedMerge]:
2459
2481
  # #1892: column added via migration; NULL (pre-migration rows)
2460
2482
  # decodes to 0 — no auto-reruns spent yet, same as a fresh entry.
2461
2483
  ci_infra_reruns=row["ci_infra_reruns"] or 0,
2484
+ # #2197: same NULL-to-0 decoding as ci_infra_reruns above, for
2485
+ # rows predating this column.
2486
+ ci_stale_reruns=row["ci_stale_reruns"] or 0,
2462
2487
  )
2463
2488
  for row in rows
2464
2489
  ]
@@ -2475,15 +2500,16 @@ def save_queue(items: list[QueuedMerge]) -> None:
2475
2500
  assignment_id, repo_name, repo_github, branch,
2476
2501
  target_branch, issue_number, issue_title, state,
2477
2502
  pr_number, pr_url, size, last_attempt, error, enqueued_at,
2478
- assignment_type, required_gates, ci_infra_reruns
2479
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
2503
+ assignment_type, required_gates, ci_infra_reruns,
2504
+ ci_stale_reruns
2505
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
2480
2506
  (
2481
2507
  item.assignment_id, item.repo_name, item.repo_github,
2482
2508
  item.branch, item.target_branch, item.issue_number,
2483
2509
  item.issue_title, item.state, item.pr_number, item.pr_url,
2484
2510
  item.size, item.last_attempt, item.error, item.enqueued_at,
2485
2511
  item.assignment_type, json.dumps(list(item.required_gates or [])),
2486
- item.ci_infra_reruns,
2512
+ item.ci_infra_reruns, item.ci_stale_reruns,
2487
2513
  ),
2488
2514
  )
2489
2515
 
@@ -4503,16 +4529,69 @@ def process(
4503
4529
  # distinctly (`checks_stale`) from checks_failed/
4504
4530
  # checks_pending above so an operator (and `coord merge
4505
4531
  # --revalidate`, the remedy) can tell the three apart.
4532
+ #
4533
+ # #2197: this used to always block here, escalating to a
4534
+ # human (or, via `coord drive`, spending a merge attempt)
4535
+ # for a condition a re-run resolves on its own — the exact
4536
+ # #2170 regression (a docs-only base move stales a
4537
+ # perfectly good green PR). Mirror #1892's shape exactly:
4538
+ # auto-rerun via the SAME `CiStore.rerun_for_pr` this
4539
+ # module already calls unattended for verdictless
4540
+ # failures, up to `MAX_CI_STALE_RERUNS` — but track it
4541
+ # with its OWN counter (`ci_stale_reruns`), never
4542
+ # `ci_infra_reruns`, so a failed-then-stale (or
4543
+ # stale-then-failed) PR does not have one trigger silently
4544
+ # spend the other's budget, and so the audit trail can
4545
+ # always tell which condition an auto-rerun was answering.
4506
4546
  if checks and _ci_checks_are_stale(
4507
4547
  checks, gh_ops, entry.repo_github, entry.target_branch, smoke,
4508
4548
  ):
4549
+ if entry.ci_stale_reruns < MAX_CI_STALE_RERUNS:
4550
+ entry.ci_stale_reruns += 1
4551
+ reran = ci.rerun_for_pr(entry.repo_github, entry.pr_number)
4552
+ _log.info(
4553
+ "#2197 auto-rerun %d/%d for stale CI on %s#%d "
4554
+ "(PR #%s) (rerun_for_pr %s)",
4555
+ entry.ci_stale_reruns, MAX_CI_STALE_RERUNS,
4556
+ entry.repo_name, entry.issue_number,
4557
+ entry.pr_number,
4558
+ "triggered" if reran else "FAILED",
4559
+ )
4560
+ # #1891: same `CI_PENDING_PREFIX` wording the
4561
+ # genuinely-still-running case uses above — this is
4562
+ # what lets `coord drive`'s `is_ci_pending_reason`
4563
+ # check (coord/drive.py) treat a re-run THIS auto-
4564
+ # trigger just kicked off exactly like any other
4565
+ # in-flight CI: a bare wait, never a spent merge
4566
+ # attempt. The queue resumes it automatically once
4567
+ # the re-run reports, no operator needed.
4568
+ msg = (
4569
+ f"{CI_PENDING_PREFIX} re-run triggered for CI "
4570
+ "checks that predate the current base (#2197 "
4571
+ f"auto-rerun {entry.ci_stale_reruns}/"
4572
+ f"{MAX_CI_STALE_RERUNS} "
4573
+ f"{'triggered' if reran else 'failed to trigger'})"
4574
+ )
4575
+ entry.error = msg
4576
+ events.append(MergeEvent(entry, "checks_stale_rerun", msg))
4577
+ continue # #292: skip, don't halt the group
4509
4578
  msg = (
4510
4579
  f"{CI_STALE_PREFIX} checks predate the current base "
4511
- "— re-run CI (`coord merge --revalidate`) before merging"
4580
+ f"— auto-rerun budget exhausted ({entry.ci_stale_reruns}/"
4581
+ f"{MAX_CI_STALE_RERUNS}); re-run CI (`coord merge "
4582
+ "--revalidate`) before merging"
4512
4583
  )
4513
4584
  entry.error = msg
4514
4585
  events.append(MergeEvent(entry, "checks_stale", msg))
4515
4586
  continue # #292: skip, don't halt the group
4587
+ # #2197: reached only once the checks are genuinely fresh
4588
+ # (or the smoke-side #1738/#1778/#1847 base-move exemption
4589
+ # spared them) — mirrors the `ci_infra_reruns = 0` reset
4590
+ # above and for the identical reason: whatever staleness
4591
+ # streak the budget was tracking has now actually resolved,
4592
+ # so a LATER base move starts its own budget from zero
4593
+ # rather than inheriting an unrelated exhausted count.
4594
+ entry.ci_stale_reruns = 0
4516
4595
  # #1318: cache is_epic_issue lookups for this entry — the same
4517
4596
  # referenced number can show up in both the PR body and one or
4518
4597
  # more commit messages below, and each lookup is a `gh` round
@@ -2803,8 +2803,28 @@ class TestMergeRevalidateCiRerunCli:
2803
2803
  def __init__(self):
2804
2804
  self.is_available = True
2805
2805
  self.rerun_calls: list = []
2806
+ self._checks_since_rerun = 0
2806
2807
 
2807
2808
  def list_checks_for_pr(self, repo, number):
2809
+ # #2197: once --revalidate has triggered its own re-run,
2810
+ # the read immediately after (inside `wait_for_ci_settle`)
2811
+ # still reports the OLD stale-but-"completed" record — real
2812
+ # GitHub can lag a beat before a rerun registers, and
2813
+ # `wait_for_ci_settle` is specifically tolerant of a
2814
+ # "completed" read regardless of content. Every read AFTER
2815
+ # that one reflects the new run actually executing (real
2816
+ # GitHub behaviour), which is what stops `process()`'s own
2817
+ # #2197 auto-rerun from firing a REDUNDANT `gh run rerun`
2818
+ # for the very run --revalidate just triggered and is
2819
+ # already watching settle.
2820
+ if self.rerun_calls:
2821
+ self._checks_since_rerun += 1
2822
+ if self._checks_since_rerun > 1:
2823
+ return [SimpleNamespace(
2824
+ name="build", status="in_progress",
2825
+ conclusion=None, started_at=None,
2826
+ completed_at=None,
2827
+ )]
2808
2828
  # Green, but started well before the (mocked) base commit
2809
2829
  # time below — the #1851 staleness signal.
2810
2830
  return [SimpleNamespace(
@@ -319,6 +319,79 @@ class TestMergeQueueCiInfraRerunsColumn:
319
319
  conn.close()
320
320
 
321
321
 
322
+ # ── merge_queue.ci_stale_reruns column (#2197) ───────────────────────────────
323
+
324
+ # Same pre-migration shape as _PRE_1892_MERGE_QUEUE_TABLE, plus the #1892
325
+ # column — exercises the #2197 migration landing on a DB that already
326
+ # picked up ci_infra_reruns but predates ci_stale_reruns.
327
+ _PRE_2197_MERGE_QUEUE_TABLE = """
328
+ CREATE TABLE merge_queue (
329
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
330
+ assignment_id TEXT NOT NULL,
331
+ repo_name TEXT NOT NULL,
332
+ repo_github TEXT NOT NULL,
333
+ branch TEXT NOT NULL,
334
+ target_branch TEXT NOT NULL,
335
+ issue_number INTEGER NOT NULL,
336
+ issue_title TEXT NOT NULL,
337
+ state TEXT NOT NULL DEFAULT 'pending',
338
+ pr_number INTEGER,
339
+ pr_url TEXT,
340
+ size INTEGER,
341
+ last_attempt REAL,
342
+ error TEXT,
343
+ enqueued_at REAL,
344
+ assignment_type TEXT DEFAULT 'work',
345
+ required_gates TEXT,
346
+ ci_infra_reruns INTEGER NOT NULL DEFAULT 0
347
+ )
348
+ """
349
+
350
+
351
+ class TestMergeQueueCiStaleRerunsColumn:
352
+ def test_fresh_database_has_it_from_the_create(
353
+ self, isolated_conn: sqlite3.Connection
354
+ ) -> None:
355
+ assert "ci_stale_reruns" in _merge_queue_columns(isolated_conn)
356
+
357
+ def test_existing_database_gains_it_in_place(self) -> None:
358
+ """The real path: a coord.db created before #2197 (but after #1892),
359
+ upgraded by _ensure_schema."""
360
+ conn = sqlite3.connect(":memory:")
361
+ conn.row_factory = sqlite3.Row
362
+ conn.execute(_PRE_2197_MERGE_QUEUE_TABLE)
363
+ conn.execute(
364
+ "INSERT INTO merge_queue "
365
+ "(assignment_id, repo_name, repo_github, branch, target_branch, "
366
+ "issue_number, issue_title) "
367
+ "VALUES ('w1', 'api', 'acme/api', 'b', 'main', 7, 't')"
368
+ )
369
+ conn.commit()
370
+ assert "ci_stale_reruns" not in _merge_queue_columns(conn)
371
+
372
+ _ensure_schema(conn)
373
+
374
+ assert "ci_stale_reruns" in _merge_queue_columns(conn)
375
+ # A pre-existing row survives and reads as "no auto-reruns spent
376
+ # yet" — the same default a freshly-enqueued entry gets.
377
+ row = conn.execute(
378
+ "SELECT ci_stale_reruns FROM merge_queue WHERE issue_number = 7"
379
+ ).fetchone()
380
+ assert row["ci_stale_reruns"] == 0
381
+ conn.close()
382
+
383
+ def test_migration_is_idempotent(self) -> None:
384
+ conn = sqlite3.connect(":memory:")
385
+ conn.row_factory = sqlite3.Row
386
+ conn.execute(_PRE_2197_MERGE_QUEUE_TABLE)
387
+ conn.commit()
388
+ _ensure_schema(conn)
389
+ _ensure_schema(conn)
390
+ _ensure_schema(conn)
391
+ assert "ci_stale_reruns" in _merge_queue_columns(conn)
392
+ conn.close()
393
+
394
+
322
395
  # ── override_connection ────────────────────────────────────────────────────────
323
396
 
324
397
  class TestOverrideConnection:
@@ -153,6 +153,15 @@ class TestPersistence:
153
153
  again = {x.assignment_id: x.ci_infra_reruns for x in load_queue()}
154
154
  assert again == {"a": 2, "b": 0}
155
155
 
156
+ def test_roundtrip_preserves_ci_stale_reruns(self, coord_db) -> None:
157
+ # #2197: same durability requirement as ci_infra_reruns above, for
158
+ # the CI-staleness auto-rerun's own independent counter.
159
+ a = _q("a")
160
+ a.ci_stale_reruns = 2
161
+ save_queue([a, _q("b")])
162
+ again = {x.assignment_id: x.ci_stale_reruns for x in load_queue()}
163
+ assert again == {"a": 2, "b": 0}
164
+
156
165
 
157
166
  class TestEnqueue:
158
167
  def _assignment(self, *, branch: str | None = "worker/foo") -> Assignment:
@@ -5626,19 +5635,43 @@ class TestCiRevalidationCandidates:
5626
5635
  class TestProcessCiStaleness:
5627
5636
  """#1851: `process()` refuses to merge a green-but-CI-stale entry, in
5628
5637
  both the live path and the `--dry-run` preview — named distinctly
5629
- (`checks_stale`) from `checks_failed`/`checks_pending`."""
5638
+ (`checks_stale`) from `checks_failed`/`checks_pending`.
5639
+
5640
+ #2197: the live path no longer blocks on the FIRST stale reading — it
5641
+ auto-reruns CI first (mirroring #1892's verdictless-failure arm, same
5642
+ `CiStore.rerun_for_pr` call), parking as `checks_stale_rerun`
5643
+ (`CI_PENDING_PREFIX` wording, so `coord drive`'s #1891 "wait, don't
5644
+ spend an attempt" logic applies) up to `MAX_CI_STALE_RERUNS` times.
5645
+ Only once that budget is exhausted does it report the terminal
5646
+ `checks_stale` block a human has to act on. `--dry-run` is unaffected —
5647
+ it only ever previews, never mutates, so it keeps reporting
5648
+ `checks_stale` on the very first pass and never calls `rerun_for_pr`.
5649
+ """
5630
5650
 
5631
5651
  @staticmethod
5632
- def _ci(started_at: float | None):
5652
+ def _ci(started_at: float | None, *, rerun_ok: bool = True):
5633
5653
  from types import SimpleNamespace
5634
5654
 
5635
5655
  class _Ci:
5636
5656
  is_available = True
5637
- def list_checks_for_pr(self, repo, number):
5638
- return [SimpleNamespace(
5657
+
5658
+ def __init__(self):
5659
+ self.rerun_calls: list = []
5660
+ # Mutable — a test can flip this between two `process()`
5661
+ # calls to simulate the re-run GitHub was asked to trigger
5662
+ # reporting back, the same way a real CiStore's backing
5663
+ # check-run data would change between two live reads.
5664
+ self.checks = [SimpleNamespace(
5639
5665
  name="build", status="completed", conclusion="success",
5640
5666
  started_at=started_at, completed_at=None,
5641
5667
  )]
5668
+
5669
+ def list_checks_for_pr(self, repo, number):
5670
+ return self.checks
5671
+
5672
+ def rerun_for_pr(self, repo, number):
5673
+ self.rerun_calls.append((repo, number))
5674
+ return rerun_ok
5642
5675
  return _Ci()
5643
5676
 
5644
5677
  class _Gh(FakeGh):
@@ -5646,37 +5679,124 @@ class TestProcessCiStaleness:
5646
5679
  def get_branch_commit_timestamp(self, repo, branch):
5647
5680
  return self.ts
5648
5681
 
5649
- def test_live_merge_blocked_and_reports_checks_stale(self) -> None:
5682
+ def test_first_stale_reading_auto_reruns_instead_of_blocking(self) -> None:
5683
+ """The exact #2170 regression: a docs-only base move stales an
5684
+ otherwise-green PR. The first live pass must not escalate — it
5685
+ triggers a CI re-run and parks, unattended."""
5650
5686
  items = [_q("w1", pr=99)]
5651
5687
  gh = self._Gh()
5652
- events = process(items, gh, ci_store=self._ci(started_at=500.0))
5688
+ ci = self._ci(started_at=500.0)
5689
+ events = process(items, gh, ci_store=ci)
5653
5690
  assert items[0].state == PENDING
5654
5691
  assert gh.merge_calls == []
5692
+ assert ci.rerun_calls == [("acme/api", 99)]
5693
+ assert items[0].ci_stale_reruns == 1
5655
5694
  kinds = [e.kind for e in events]
5656
- assert "checks_stale" in kinds
5695
+ assert "checks_stale_rerun" in kinds
5696
+ assert "checks_stale" not in kinds
5657
5697
  assert "checks_failed" not in kinds
5658
5698
  assert "checks_pending" not in kinds
5699
+ # #1891: CI_PENDING_PREFIX wording — `coord drive` waits rather
5700
+ # than spending a merge attempt on this.
5701
+ assert items[0].error.startswith("CI running:")
5702
+
5703
+ def test_merges_on_a_later_pass_once_the_rerun_reports_green(self) -> None:
5704
+ """Full #2170 lifecycle, end to end: stale → auto-rerun → a LATER
5705
+ `process()` tick (the re-run having reported back fresh and green,
5706
+ no operator involved) actually merges it. Acceptance criterion,
5707
+ verbatim from #2197: "process() triggers a CI re-run and the entry
5708
+ parks as checks_pending without spending an attempt, then merges on
5709
+ a later pass once green.\""""
5710
+ items = [_q("w1", pr=99)]
5711
+ gh = self._Gh()
5712
+ ci = self._ci(started_at=500.0)
5713
+
5714
+ first = process(items, gh, ci_store=ci)
5715
+ assert items[0].state == PENDING
5716
+ assert "checks_stale_rerun" in [e.kind for e in first]
5717
+ assert ci.rerun_calls == [("acme/api", 99)]
5718
+
5719
+ # The re-run GitHub was asked to trigger has now reported back: a
5720
+ # fresh, green check — the same `ci` object, no new `coord merge`
5721
+ # flag involved.
5722
+ from types import SimpleNamespace
5723
+ ci.checks = [SimpleNamespace(
5724
+ name="build", status="completed", conclusion="success",
5725
+ started_at=1500.0, completed_at=None,
5726
+ )]
5727
+
5728
+ second = process(items, gh, ci_store=ci)
5729
+ assert items[0].state == MERGED
5730
+ assert ci.rerun_calls == [("acme/api", 99)] # unchanged — no 2nd rerun
5731
+ kinds = [e.kind for e in second]
5732
+ assert "merged" in kinds
5733
+ assert "checks_stale" not in kinds
5734
+ assert "checks_stale_rerun" not in kinds
5735
+
5736
+ def test_reruns_stop_at_the_cap_and_then_reports_checks_stale(self) -> None:
5737
+ from coord.merge_queue import MAX_CI_STALE_RERUNS
5738
+
5739
+ items = [_q("w1", pr=99)]
5740
+ gh = self._Gh()
5741
+ ci = self._ci(started_at=500.0)
5742
+ for expected in range(1, MAX_CI_STALE_RERUNS + 1):
5743
+ events = process(items, gh, ci_store=ci)
5744
+ assert items[0].ci_stale_reruns == expected
5745
+ assert "checks_stale_rerun" in [e.kind for e in events]
5746
+ assert len(ci.rerun_calls) == MAX_CI_STALE_RERUNS
5747
+
5748
+ # Budget exhausted — the next pass reports the terminal block and
5749
+ # triggers no further rerun.
5750
+ events = process(items, gh, ci_store=ci)
5751
+ assert len(ci.rerun_calls) == MAX_CI_STALE_RERUNS # unchanged
5752
+ assert items[0].ci_stale_reruns == MAX_CI_STALE_RERUNS # unchanged
5753
+ kinds = [e.kind for e in events]
5754
+ assert "checks_stale" in kinds
5755
+ assert "checks_stale_rerun" not in kinds
5756
+ assert items[0].state == PENDING
5659
5757
 
5660
5758
  def test_live_merge_proceeds_when_checks_fresh(self) -> None:
5661
5759
  items = [_q("w1", pr=99)]
5662
5760
  gh = self._Gh()
5663
- events = process(items, gh, ci_store=self._ci(started_at=1500.0))
5761
+ ci = self._ci(started_at=1500.0)
5762
+ events = process(items, gh, ci_store=ci)
5664
5763
  assert items[0].state == MERGED
5764
+ assert ci.rerun_calls == []
5665
5765
  kinds = [e.kind for e in events]
5666
5766
  assert "checks_stale" not in kinds
5767
+ assert "checks_stale_rerun" not in kinds
5768
+
5769
+ def test_resets_after_a_clean_pass_so_a_later_staleness_starts_fresh(self) -> None:
5770
+ """Mirrors `ci_infra_reruns`'s own reset test (#1892): a later,
5771
+ unrelated base move must not inherit a budget already spent on an
5772
+ earlier staleness streak."""
5773
+ from coord.merge_queue import MAX_CI_STALE_RERUNS
5774
+
5775
+ items = [_q("w1", pr=99)]
5776
+ items[0].ci_stale_reruns = MAX_CI_STALE_RERUNS
5777
+ gh = self._Gh()
5778
+ ci = self._ci(started_at=1500.0) # fresh — resolves the old streak
5779
+ process(items, gh, ci_store=ci)
5780
+ assert items[0].state == MERGED
5781
+ assert items[0].ci_stale_reruns == 0
5667
5782
 
5668
5783
  def test_force_merge_overrides_ci_staleness(self) -> None:
5669
5784
  items = [_q("w1", pr=99)]
5670
5785
  gh = self._Gh()
5671
- process(items, gh, ci_store=self._ci(started_at=500.0), force_merge=True)
5786
+ ci = self._ci(started_at=500.0)
5787
+ process(items, gh, ci_store=ci, force_merge=True)
5672
5788
  assert items[0].state == MERGED
5789
+ assert ci.rerun_calls == [] # force_merge skips the CI gate entirely
5673
5790
 
5674
- def test_dry_run_previews_checks_stale_without_merging(self) -> None:
5791
+ def test_dry_run_previews_checks_stale_without_rerunning(self) -> None:
5675
5792
  items = [_q("w1", pr=99)]
5676
5793
  gh = self._Gh()
5677
- events = process(items, gh, ci_store=self._ci(started_at=500.0), dry_run=True)
5794
+ ci = self._ci(started_at=500.0)
5795
+ events = process(items, gh, ci_store=ci, dry_run=True)
5678
5796
  assert items[0].state == PENDING
5679
5797
  assert gh.merge_calls == []
5798
+ assert ci.rerun_calls == []
5799
+ assert items[0].ci_stale_reruns == 0
5680
5800
  kinds = [e.kind for e in events]
5681
5801
  assert "checks_stale" in kinds
5682
5802
  assert "merged" not in kinds
@@ -6020,19 +6140,29 @@ class TestProcessCiInfraAutoRerun:
6020
6140
 
6021
6141
  def test_jobs_api_never_called_on_the_all_green_path(self) -> None:
6022
6142
  """Acceptance criterion: the extra jobs API call happens only on the
6023
- failure path — assert it is not called when all checks pass."""
6143
+ failure path — assert it is not called when all checks pass.
6144
+
6145
+ #2197: a plain `FakeGh` has no `get_branch_commit_timestamp`, which
6146
+ makes the unrelated #1851 staleness gate fail closed (stale) — and
6147
+ since #2197 that ALSO calls `rerun_for_pr` (the very same method
6148
+ this test's `rerun_calls` tracks for the #1892 dimension), so the
6149
+ check here must be unambiguously fresh to keep this test isolated
6150
+ to the jobs-call dimension it's actually about.
6151
+ """
6024
6152
  items = [_q("w1", pr=99)]
6025
- gh = FakeGh()
6153
+
6154
+ class _Gh(FakeGh):
6155
+ def get_branch_commit_timestamp(self, repo, branch):
6156
+ return 1000.0
6157
+
6158
+ gh = _Gh()
6026
6159
  passing = _check("e2e", conclusion="success")
6027
6160
  passing.run_id = "999"
6161
+ passing.started_at = 1500.0 # after the mocked base — fresh, not stale
6028
6162
  ci = self._Ci(checks=[passing], jobs_by_run={})
6029
6163
 
6030
6164
  process(items, gh, ci_store=ci)
6031
6165
 
6032
- # #1892's acceptance criterion is specifically about the extra jobs
6033
- # call, not about whether the merge itself completes — a plain
6034
- # `FakeGh` has no `get_branch_commit_timestamp`, so the unrelated
6035
- # #1851 staleness gate fails closed regardless of #1892.
6036
6166
  assert ci.jobs_calls == []
6037
6167
  assert ci.rerun_calls == []
6038
6168
 
@@ -314,6 +314,7 @@
314
314
  "assignment_type": "work",
315
315
  "branch": "issue-748-fixture",
316
316
  "ci_infra_reruns": 0,
317
+ "ci_stale_reruns": 0,
317
318
  "enqueued_at": 1000000950.0,
318
319
  "error": null,
319
320
  "id": 1,