code-coordinator 0.5.58__tar.gz → 0.5.59__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.58/code_coordinator.egg-info → code_coordinator-0.5.59}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.58 → code_coordinator-0.5.59/code_coordinator.egg-info}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/acceptance.py +19 -4
  5. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/drive.py +276 -1
  6. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/drive_state.py +30 -0
  7. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/merge_queue.py +76 -5
  8. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_drive.py +366 -1
  9. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_drive_state.py +45 -0
  10. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_merge_queue.py +51 -6
  11. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/workflows/cargo-test.yml +0 -0
  21. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/workflows/release-tui.yml +0 -0
  23. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/.gitignore +0 -0
  25. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/GOAL.md +0 -0
  27. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/LICENSE +0 -0
  28. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/README.md +0 -0
  30. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/client.py +0 -0
  59. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/merge.py +0 -0
  74. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/milestone.py +0 -0
  75. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/plan_followup.py +0 -0
  76. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/plans.py +0 -0
  77. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/portal.py +0 -0
  78. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/release.py +0 -0
  79. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/report.py +0 -0
  80. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/review.py +0 -0
  81. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/scorecard.py +0 -0
  82. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/sessions.py +0 -0
  83. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/setup.py +0 -0
  84. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/status.py +0 -0
  85. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/terminal.py +0 -0
  86. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/test_gate.py +0 -0
  87. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/commands/tui.py +0 -0
  88. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/comments.py +0 -0
  89. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/config.py +0 -0
  90. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/conflict_fix.py +0 -0
  91. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dao.py +0 -0
  92. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/__init__.py +0 -0
  93. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/fixture.py +0 -0
  94. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/index.html +0 -0
  95. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/server.py +0 -0
  96. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/terminal.py +0 -0
  97. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/.gitignore +0 -0
  98. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/components.json +0 -0
  99. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  100. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  101. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  102. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  103. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  104. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  105. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  106. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  107. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  108. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/index.html +0 -0
  109. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  110. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/sw.js +0 -0
  111. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  112. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  113. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  114. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  115. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  116. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  117. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  118. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  119. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  120. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  121. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/eslint.config.js +0 -0
  122. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/index.html +0 -0
  123. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  124. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/package-lock.json +0 -0
  125. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/package.json +0 -0
  126. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  127. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/playwright.config.ts +0 -0
  128. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/postcss.config.js +0 -0
  129. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  130. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  131. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  132. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/App.tsx +0 -0
  133. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/api/client.ts +0 -0
  134. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  135. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  136. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  137. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  138. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  139. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  140. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  141. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  142. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  143. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  144. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  145. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  146. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  147. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  148. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  149. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  150. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  151. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  152. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  153. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  154. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  155. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  156. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  157. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  158. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  159. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  160. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  161. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  162. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  163. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  164. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  165. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  166. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  167. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  168. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  169. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/index.css +0 -0
  170. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  171. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  172. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/main.tsx +0 -0
  173. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  174. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  175. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  176. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  177. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  178. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  179. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  180. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  181. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  182. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  183. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  184. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  185. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  186. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  187. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  188. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  189. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  190. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  191. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  192. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  193. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  194. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  195. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  196. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/tailwind.config.js +0 -0
  197. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/tsconfig.json +0 -0
  198. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  199. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dashboard/webapp/vite.config.ts +0 -0
  200. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/db.py +0 -0
  201. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dead_end.py +0 -0
  202. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/README.md +0 -0
  203. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-agent.service +0 -0
  204. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-db-backup.service +0 -0
  205. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-db-backup.sh +0 -0
  206. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-db-backup.timer +0 -0
  207. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-drive-queue.service +0 -0
  208. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-drive-queue.timer +0 -0
  209. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-notify.service +0 -0
  210. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-notify.timer +0 -0
  211. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-release-propagate.service +0 -0
  212. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-release-propagate.timer +0 -0
  213. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-release-window.service +0 -0
  214. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-release-window.timer +0 -0
  215. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-serve.service +0 -0
  216. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-web-dist-build.service +0 -0
  217. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-web-dist-build.timer +0 -0
  218. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy/coord-web.service +0 -0
  219. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy_manifest.py +0 -0
  220. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deploy_units.py +0 -0
  221. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/deps.py +0 -0
  222. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/diagnose.py +0 -0
  223. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dispatch.py +0 -0
  224. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/dist_name.py +0 -0
  225. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/drive_queue.py +0 -0
  226. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/events.py +0 -0
  227. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/failure_class.py +0 -0
  228. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/filelock.py +0 -0
  229. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/fleet_config_health.py +0 -0
  230. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/freshness.py +0 -0
  231. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/gate_a.py +0 -0
  232. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/gate_b.py +0 -0
  233. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/gate_snapshot.py +0 -0
  234. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/gates.py +0 -0
  235. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/github_ops.py +0 -0
  236. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/goal.py +0 -0
  237. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/graph_health.py +0 -0
  238. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/__init__.py +0 -0
  239. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/aggregate.py +0 -0
  240. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/__init__.py +0 -0
  241. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/agent_install.py +0 -0
  242. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/cargo_targets.py +0 -0
  243. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/claude_binary.py +0 -0
  244. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/deploy_lane_facts.py +0 -0
  245. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/disk.py +0 -0
  246. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/fleet_board.py +0 -0
  247. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  248. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/fleet_phantom.py +0 -0
  249. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/fleet_unit_drift.py +0 -0
  250. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/graph.py +0 -0
  251. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/plan_usage.py +0 -0
  252. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/repo_state.py +0 -0
  253. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/spawned_coord.py +0 -0
  254. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/timer_active.py +0 -0
  255. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/toolchain.py +0 -0
  256. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/unit_drift.py +0 -0
  257. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/unit_enablement.py +0 -0
  258. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/checks/worktrees.py +0 -0
  259. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/cli.py +0 -0
  260. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/context.py +0 -0
  261. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/fleet_snapshot.py +0 -0
  262. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/models.py +0 -0
  263. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/pypi.py +0 -0
  264. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/registry.py +0 -0
  265. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/render.py +0 -0
  266. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/health/units.py +0 -0
  267. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/hooks.py +0 -0
  268. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/housekeeping.py +0 -0
  269. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/interactive.py +0 -0
  270. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/issue_store.py +0 -0
  271. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/liveness_auditor.py +0 -0
  272. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/machine_pause.py +0 -0
  273. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/milestone_chat.py +0 -0
  274. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/milestone_dispatch.py +0 -0
  275. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/milestone_gate.py +0 -0
  276. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/milestone_order.py +0 -0
  277. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/mock_author.py +0 -0
  278. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/models.py +0 -0
  279. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/network.py +0 -0
  280. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/new_issue_chat.py +0 -0
  281. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/__init__.py +0 -0
  282. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/baseline.py +0 -0
  283. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/cli.py +0 -0
  284. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/collect.py +0 -0
  285. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/digest.py +0 -0
  286. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/models.py +0 -0
  287. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/predicate.py +0 -0
  288. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/service.py +0 -0
  289. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/store.py +0 -0
  290. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notifier/transport.py +0 -0
  291. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/notify.py +0 -0
  292. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/openapi.py +0 -0
  293. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/overlap_fence.py +0 -0
  294. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/parentage.py +0 -0
  295. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/parentage_github.py +0 -0
  296. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/pipeline.py +0 -0
  297. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/plan_parser.py +0 -0
  298. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/plans.py +0 -0
  299. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/platform_paths.py +0 -0
  300. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/portal_bridge.py +0 -0
  301. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/pr_body_lint.py +0 -0
  302. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/prereqs.py +0 -0
  303. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/progress.py +0 -0
  304. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/providers/__init__.py +0 -0
  305. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/providers/base.py +0 -0
  306. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/providers/claude.py +0 -0
  307. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/providers/claude_pty.py +0 -0
  308. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/providers/opencode.py +0 -0
  309. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/reconcile.py +0 -0
  310. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/refine_chat.py +0 -0
  311. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/release_cordon.py +0 -0
  312. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/release_propagate.py +0 -0
  313. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/release_verify.py +0 -0
  314. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/release_window.py +0 -0
  315. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/reports.py +0 -0
  316. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/revalidate.py +0 -0
  317. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/review.py +0 -0
  318. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/scorecard.py +0 -0
  319. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/serve_app.py +0 -0
  320. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/skills/update-issue/SKILL.md +0 -0
  321. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/smoke.py +0 -0
  322. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/spend_ceiling.py +0 -0
  323. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/split_work.py +0 -0
  324. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/stage_projection.py +0 -0
  325. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/state.py +0 -0
  326. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/test_author.py +0 -0
  327. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/test_chat.py +0 -0
  328. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/test_orchestrator.py +0 -0
  329. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/test_report.py +0 -0
  330. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/tui_release.py +0 -0
  331. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/usage.py +0 -0
  332. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/usage_limits.py +0 -0
  333. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/usage_rollup.py +0 -0
  334. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coord/worker_events.py +0 -0
  335. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/coordinator.example.yml +0 -0
  336. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-agent.service +0 -0
  337. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-db-backup.service +0 -0
  338. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-db-backup.sh +0 -0
  339. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-db-backup.timer +0 -0
  340. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-drive-queue.service +0 -0
  341. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-drive-queue.timer +0 -0
  342. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-notify.service +0 -0
  343. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-notify.timer +0 -0
  344. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-release-propagate.service +0 -0
  345. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-release-propagate.timer +0 -0
  346. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-release-window.service +0 -0
  347. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-release-window.timer +0 -0
  348. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-serve.service +0 -0
  349. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-web-dist-build.service +0 -0
  350. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-web-dist-build.sh +0 -0
  351. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-web-dist-build.timer +0 -0
  352. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-web-rollback.sh +0 -0
  353. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/coord-web.service +0 -0
  354. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/deploy/node-shim.sh +0 -0
  355. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/AGENT_OPERATIONS.md +0 -0
  356. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/ARCHITECTURE.md +0 -0
  357. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/ARCH_SECURITY_GATES.md +0 -0
  358. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/COCKPIT.md +0 -0
  359. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/CONTROL_CENTER.md +0 -0
  360. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/CROSS_PLATFORM.md +0 -0
  361. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/DRIVE_QUEUE.md +0 -0
  363. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/EPHEMERAL_WORKERS.md +0 -0
  364. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/FORGE_MIGRATION.md +0 -0
  365. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/GRAPHIFY_SETUP.md +0 -0
  366. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/ISSUE_GUIDANCE.md +0 -0
  367. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/MAC_MINI.md +0 -0
  368. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  369. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/NOTIFIER.md +0 -0
  370. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/OPENCODE_VERIFICATION.md +0 -0
  371. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/OPERATING_GOTCHAS.md +0 -0
  372. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/mocks/web/README.md +0 -0
  381. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/mocks/web/_tokens.css +0 -0
  382. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/mocks/web/issue-detail.html +0 -0
  383. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/mocks/web/pipeline-narrow.html +0 -0
  384. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/docs/mocks/web/pipeline-wide.html +0 -0
  385. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/graphify-out/.gitignore +0 -0
  386. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/install-agent.sh +0 -0
  387. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/pyproject.toml +0 -0
  388. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/audit_review_verdict_overrides.py +0 -0
  389. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  390. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/build-worker-image.sh +0 -0
  391. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/coordinator-machine.py +0 -0
  392. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/epic-down.sh +0 -0
  393. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/epic-up.sh +0 -0
  394. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/preflight.sh +0 -0
  395. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/provision-worker.sh +0 -0
  396. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  397. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  398. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/azure-workers/verify-github-token.sh +0 -0
  399. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/codegen.py +0 -0
  400. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/coord-test-runner.sh +0 -0
  401. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/gen_board_fixture.py +0 -0
  403. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/next_release_tag.py +0 -0
  404. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/run_tests_in_populated_home.sh +0 -0
  405. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/run_tests_without_gh.sh +0 -0
  406. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/smoke_437_interactive.py +0 -0
  407. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/verify_878_review_capture.py +0 -0
  408. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/verify_release_published.py +0 -0
  409. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/scripts/verify_release_wheel.py +0 -0
  410. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/setup.cfg +0 -0
  411. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/SMOKE_SET.md +0 -0
  412. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/__init__.py +0 -0
  413. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  414. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/contract.md +0 -0
  415. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/manifest.yml +0 -0
  416. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  417. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  418. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  419. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  420. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/contract.md +0 -0
  426. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/manifest.yml +0 -0
  427. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  428. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  429. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  430. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  431. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  432. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  433. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  434. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  435. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  436. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  437. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/contract.md +0 -0
  438. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  439. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  440. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/manifest.yml +0 -0
  441. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  442. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-51/tsconfig.json +0 -0
  443. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  449. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/all_pass.json +0 -0
  450. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  451. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/mixed_fail.json +0 -0
  452. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  453. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  454. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/skip.json +0 -0
  455. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/playwright/truncated.json +0 -0
  456. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  457. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  458. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  460. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  461. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  462. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  463. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  464. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_acceptance.py +0 -0
  465. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_acceptance_drivers.py +0 -0
  466. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent.py +0 -0
  467. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_api_error.py +0 -0
  468. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_app.py +0 -0
  469. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_branch_base.py +0 -0
  470. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_branch_capture.py +0 -0
  471. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_config_free_1712.py +0 -0
  472. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_deploy_units_endpoint.py +0 -0
  473. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_dirty_worktree.py +0 -0
  474. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_graph_self_heal.py +0 -0
  475. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_health_h3.py +0 -0
  476. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_idle_restart.py +0 -0
  477. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_push_failure.py +0 -0
  478. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_reap.py +0 -0
  479. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_repos_and_pull.py +0 -0
  480. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_restart_services_endpoint.py +0 -0
  481. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_startup_diagnostics.py +0 -0
  482. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_update.py +0 -0
  483. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_update_bluegreen.py +0 -0
  484. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_usage_limit.py +0 -0
  485. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_agent_zero_commit.py +0 -0
  486. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_ambient_home_isolation.py +0 -0
  487. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_approve_reject_plan.py +0 -0
  488. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_approve_usage_gate.py +0 -0
  489. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_assignment_already_recorded_daemon.py +0 -0
  490. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_audit_log.py +0 -0
  491. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_audit_outcome.py +0 -0
  492. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_audit_query.py +0 -0
  493. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_auto_loop.py +0 -0
  494. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_auto_release_publish_2035.py +0 -0
  495. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_base_checkout_restore.py +0 -0
  496. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_cap_762.py +0 -0
  497. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_fixture.py +0 -0
  498. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_read_path.py +0 -0
  499. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_board_wire.py +0 -0
  502. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_brain.py +0 -0
  503. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_branch_model.py +0 -0
  504. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_bug_intake.py +0 -0
  505. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_build_worker_image_env_update.py +0 -0
  506. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cargo_cache.py +0 -0
  507. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_ci_acceptance_gate_1950.py +0 -0
  508. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_ci_store.py +0 -0
  509. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_claim.py +0 -0
  510. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_acceptance.py +0 -0
  511. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_assign.py +0 -0
  512. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  513. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_assign_interactive_remote.py +0 -0
  514. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_assign_provider.py +0 -0
  515. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_audit.py +0 -0
  516. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_chat_continue.py +0 -0
  517. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_diagnose_config_provenance.py +0 -0
  518. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_diagnose_graph.py +0 -0
  519. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_doctor.py +0 -0
  520. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_doctor_config_free_1801.py +0 -0
  521. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  522. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_drive.py +0 -0
  523. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_drive_queue.py +0 -0
  524. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_escalate.py +0 -0
  525. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_fix_headless_review.py +0 -0
  526. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_gate_a.py +0 -0
  527. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_install_drift.py +0 -0
  528. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_install_skills.py +0 -0
  529. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_issue_create_label.py +0 -0
  530. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_issue_reopen.py +0 -0
  531. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_merge.py +0 -0
  532. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_merge_queue.py +0 -0
  556. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_provider.py +0 -0
  557. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_review_finalizing.py +0 -0
  558. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_test_failed_tag.py +0 -0
  559. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_status_usage_limit.py +0 -0
  560. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_sync_comments_873.py +0 -0
  561. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_test_plan.py +0 -0
  562. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_track.py +0 -0
  563. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_tui_update.py +0 -0
  564. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cli_wait.py +0 -0
  565. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_client_base_install.py +0 -0
  566. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_config_usage_gate.py +0 -0
  573. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coord_test.py +0 -0
  576. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coord_test_runner_baseline.py +0 -0
  577. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coord_test_runner_routing.py +0 -0
  578. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coord_test_runner_toolchain.py +0 -0
  579. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coord_web_sse_restart_live.py +0 -0
  580. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_coordinator_machine.py +0 -0
  581. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_cross_platform_imports.py +0 -0
  582. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dashboard.py +0 -0
  583. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dashboard_fixture.py +0 -0
  584. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dashboard_terminal.py +0 -0
  585. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dashboard_terminal_live.py +0 -0
  586. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_db.py +0 -0
  587. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dead_end.py +0 -0
  588. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_coord_db_backup.py +0 -0
  589. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_coord_web_dist.py +0 -0
  590. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_coord_web_rollback.py +0 -0
  591. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_drive_queue_unit.py +0 -0
  592. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_manifest.py +0 -0
  593. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_units_lane.py +0 -0
  594. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deploy_web_unit.py +0 -0
  595. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_deps.py +0 -0
  596. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_diagnose.py +0 -0
  597. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dispatch.py +0 -0
  598. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dispatch_target_validation.py +0 -0
  599. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_dist_name.py +0 -0
  600. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_done_housekeeping.py +0 -0
  601. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_drive_queue.py +0 -0
  602. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_drive_tmux.py +0 -0
  603. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_epic_up_capability_detection.py +0 -0
  604. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  605. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_epic_up_image_provenance.py +0 -0
  606. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_errors.py +0 -0
  607. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_events.py +0 -0
  608. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_failure_class.py +0 -0
  609. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_filelock.py +0 -0
  610. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  611. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_fix_of_force_override.py +0 -0
  612. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_fleet_config_health.py +0 -0
  613. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_fleet_health_probes.py +0 -0
  614. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_fleet_health_snapshot.py +0 -0
  615. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_freshness.py +0 -0
  616. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_gate_a.py +0 -0
  617. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_gate_b.py +0 -0
  618. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_gate_snapshot_staleness.py +0 -0
  619. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_gates.py +0 -0
  620. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_generated_types_fixture.py +0 -0
  621. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_github_ops.py +0 -0
  622. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_handoff.py +0 -0
  625. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_checks.py +0 -0
  626. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_cli.py +0 -0
  627. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_cli_graph.py +0 -0
  628. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_config.py +0 -0
  629. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_context.py +0 -0
  630. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_deploy_lane_facts.py +0 -0
  631. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_incident_regression.py +0 -0
  632. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_pypi.py +0 -0
  633. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_registry.py +0 -0
  634. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_timer_active.py +0 -0
  635. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_toolchain.py +0 -0
  636. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_unit_drift.py +0 -0
  637. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_health_unit_enablement.py +0 -0
  638. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_hooks.py +0 -0
  639. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_human_attended_437.py +0 -0
  640. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_init.py +0 -0
  641. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_integration.py +0 -0
  642. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_briefing_echo.py +0 -0
  643. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_prefill_state.py +0 -0
  644. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_session_relaunch.py +0 -0
  645. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_test_verdict_backstop.py +0 -0
  646. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_token_attribution.py +0 -0
  647. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_interactive_worktree.py +0 -0
  648. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_issue_store_seam.py +0 -0
  649. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_liveness_auditor.py +0 -0
  650. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_liveness_notify.py +0 -0
  651. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_machine_pause.py +0 -0
  652. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_merge_verify.py +0 -0
  653. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_milestone_chat.py +0 -0
  654. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_milestone_dispatch.py +0 -0
  655. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_milestone_gate.py +0 -0
  656. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_milestone_order.py +0 -0
  657. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_milestone_seam.py +0 -0
  658. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_mock_author.py +0 -0
  659. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_model_tiering.py +0 -0
  660. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_models.py +0 -0
  661. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_models_config_labels.py +0 -0
  662. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_needs_attention.py +0 -0
  663. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_network.py +0 -0
  664. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_new_issue_chat.py +0 -0
  665. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_next_release_tag.py +0 -0
  666. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_no_direct_gh_calls.py +0 -0
  667. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_node_shim.py +0 -0
  668. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_baseline.py +0 -0
  669. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_cli.py +0 -0
  670. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_collect.py +0 -0
  671. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_config.py +0 -0
  672. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_drive_seam.py +0 -0
  673. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_isolation.py +0 -0
  674. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_predicate.py +0 -0
  675. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_quiet_hours.py +0 -0
  676. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notifier_service.py +0 -0
  677. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notify.py +0 -0
  678. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_notify_drain.py +0 -0
  679. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_openapi.py +0 -0
  680. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_operational_defaults.py +0 -0
  681. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_overlap_fence.py +0 -0
  682. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_packaged_deploy_units.py +0 -0
  683. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_parentage.py +0 -0
  684. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_paste_landed.py +0 -0
  685. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_pipeline.py +0 -0
  686. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_plan_followup_approve_plan_command.py +0 -0
  687. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_plan_followup_pr_command.py +0 -0
  688. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_plan_followup_review_command.py +0 -0
  689. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_plan_only.py +0 -0
  690. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_plan_parser.py +0 -0
  691. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_platform_paths.py +0 -0
  692. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_portal_bridge.py +0 -0
  693. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_portal_config.py +0 -0
  694. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_pr_body_lint.py +0 -0
  695. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_prereqs.py +0 -0
  696. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_production_db_guard.py +0 -0
  697. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_progress.py +0 -0
  698. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_provider_seam.py +0 -0
  699. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_providers.py +0 -0
  700. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_providers_config_labels.py +0 -0
  701. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_providers_pty.py +0 -0
  702. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_quiet_hours.py +0 -0
  703. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_quiet_hours_store_2146.py +0 -0
  704. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reap_merged_sessions.py +0 -0
  705. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reap_stale_interactive_tick.py +0 -0
  706. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reconcile_branch.py +0 -0
  707. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reconcile_completions.py +0 -0
  708. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reconcile_merges.py +0 -0
  709. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reconcile_usage_limit_done.py +0 -0
  710. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_refine_chat.py +0 -0
  711. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_release_cordon_2101.py +0 -0
  712. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_release_propagate.py +0 -0
  713. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_release_unified_1242.py +0 -0
  714. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_release_verify.py +0 -0
  715. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_release_window.py +0 -0
  716. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_remote_auto_prune.py +0 -0
  717. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_remote_interactive_reaper.py +0 -0
  718. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_report_result_push.py +0 -0
  719. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_reports.py +0 -0
  720. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_retry.py +0 -0
  721. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_retry_advisory_1606.py +0 -0
  722. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_retry_type_1636.py +0 -0
  723. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_revalidate.py +0 -0
  724. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review.py +0 -0
  725. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_end_review_without_verdict.py +0 -0
  726. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_parse_failure_diagnostic.py +0 -0
  727. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_reaffirm.py +0 -0
  728. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_state.py +0 -0
  729. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_verdict_backstop.py +0 -0
  730. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_verdict_override_audit.py +0 -0
  731. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_verdict_relay.py +0 -0
  732. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_review_zero_commits.py +0 -0
  733. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_scoped_review_wiring.py +0 -0
  734. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_scorecard.py +0 -0
  735. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_serve.py +0 -0
  736. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_serve_app_board_trim.py +0 -0
  737. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_session.py +0 -0
  738. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_slice_issue_attribution.py +0 -0
  739. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_smoke.py +0 -0
  740. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_smoke_live_checkout_restore.py +0 -0
  741. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_smoke_workflow.py +0 -0
  742. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_spend_ceiling.py +0 -0
  743. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_spend_ceiling_coordinator.py +0 -0
  744. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_split.py +0 -0
  745. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_split_work.py +0 -0
  746. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_stage_projection.py +0 -0
  747. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_stalled_pipeline.py +0 -0
  748. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_state.py +0 -0
  749. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_state_review_findings_daemon.py +0 -0
  750. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_status_fleet_footer.py +0 -0
  751. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_stop_1567.py +0 -0
  752. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_stuck.py +0 -0
  753. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_terminal_command.py +0 -0
  754. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_author.py +0 -0
  755. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_chat.py +0 -0
  756. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_orchestrator.py +0 -0
  757. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_report.py +0 -0
  758. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_verdict_parsing.py +0 -0
  759. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_test_verdict_transcript_floor.py +0 -0
  760. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_thin_client_board_audit.py +0 -0
  761. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_thin_client_config_load_1080.py +0 -0
  762. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_thin_client_daemon_routing_906.py +0 -0
  763. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_tmux_host.py +0 -0
  764. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_tmux_session.py +0 -0
  765. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_transcript_floor.py +0 -0
  766. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_usage.py +0 -0
  767. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_usage_limits.py +0 -0
  768. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_usage_rollup.py +0 -0
  769. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_venv_live_install_2121.py +0 -0
  770. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_version_single_source.py +0 -0
  771. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_watch.py +0 -0
  772. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_worker_events.py +0 -0
  773. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_worker_image_pin_sync.py +0 -0
  774. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_worker_safety.py +0 -0
  775. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_worktree.py +0 -0
  776. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  777. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/Cargo.lock +0 -0
  778. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/Cargo.toml +0 -0
  779. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/cargo-config-local-quadraui.toml.example +0 -0
  780. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/audit.rs +0 -0
  781. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/chat.rs +0 -0
  782. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/data.rs +0 -0
  783. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/dialogs.rs +0 -0
  784. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/drive.rs +0 -0
  785. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/drive_queue.rs +0 -0
  786. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/escalation.rs +0 -0
  787. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/events.rs +0 -0
  788. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/fixtures.rs +0 -0
  789. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/fleet_health.rs +0 -0
  790. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/fleet_sessions.rs +0 -0
  791. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/fleet_terminals.rs +0 -0
  792. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/format.rs +0 -0
  793. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/milestone_dag.rs +0 -0
  794. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/mod.rs +0 -0
  795. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/msv.rs +0 -0
  796. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/pipeline.rs +0 -0
  797. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/plans.rs +0 -0
  798. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/render.rs +0 -0
  799. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/reports.rs +0 -0
  800. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/sessions.rs +0 -0
  801. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/settings_ui.rs +0 -0
  802. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/sidebar.rs +0 -0
  803. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/terminal.rs +0 -0
  804. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/tests.rs +0 -0
  805. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/types.rs +0 -0
  806. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/app/workspace.rs +0 -0
  807. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/bin/gtk.rs +0 -0
  808. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/commands.rs +0 -0
  809. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/lib.rs +0 -0
  810. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/main.rs +0 -0
  811. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/src/settings.rs +0 -0
  812. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/tests/acceptance.rs +0 -0
  813. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/tests/cli.rs +0 -0
  814. {code_coordinator-0.5.58 → code_coordinator-0.5.59}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.58
3
+ Version: 0.5.59
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.58
3
+ Version: 0.5.59
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.58",
2
+ "tag": "0.5.59",
3
3
  "distance": 0,
4
- "node": "g36b37b343666fd25278ef49e2b4521e94ec1a50a",
4
+ "node": "g3cb11f81fa08e124d66859415a0b01368d4da64a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-13"
@@ -574,6 +574,16 @@ def expected_red_failure_summary(verdict: dict[str, Any]) -> str:
574
574
  can't mistake this for "a test failed" — it is the opposite signal, and
575
575
  the fix is editorial (clear the manifest entry, or realize the
576
576
  assertion never exercised the bug), not code.
577
+
578
+ #2199: the guidance below used to send the operator to `coord
579
+ acceptance record`, on the claim that a green trust-gate run clears the
580
+ entry automatically. PR #2173 deliberately moved clearing OUT of
581
+ `record` and into the post-merge hook (`coord.merge_queue.
582
+ _maybe_clear_expected_red` / `coord.acceptance.
583
+ clear_expected_red_via_pr`, right after the fix's own PR actually
584
+ merges — see that function's docstring for the ordering bug this
585
+ fixed). Re-running `record` today clears nothing; an operator who
586
+ followed the old wording would watch it not work with no clue why.
577
587
  """
578
588
  ids = verdict.get("unexpected_green") or []
579
589
  if not ids:
@@ -583,10 +593,15 @@ def expected_red_failure_summary(verdict: dict[str, Any]) -> str:
583
593
  f"HARD FAILURE: {len(ids)} test(s) listed in `expected_red` now PASS:\n"
584
594
  f"{listed}\n"
585
595
  "An expected-red test that passes means either the fix already "
586
- "landed silently (clear it `coord acceptance record` does this "
587
- "automatically on a green trust-gate run) or the assertion never "
588
- "exercised the bug in the first place (#1965). This is NOT an "
589
- "ordinary test failure it is the opposite signal."
596
+ "landed silently it clears automatically once ITS OWN PR actually "
597
+ "merges (the post-merge hook, not `coord acceptance record`; see "
598
+ "docs/ORACLE_LOOP.md). Still listed after that merge? Check `coord "
599
+ "merge`'s own output for an `expected_red_clear_skipped*` event "
600
+ "naming why (no work assignment found, no passing trust-gate "
601
+ "verdict recorded, or a stale acceptance SHA), or run `coord "
602
+ "acceptance expected-red <repo>` to see current state — or the "
603
+ "assertion never exercised the bug in the first place (#1965). "
604
+ "This is NOT an ordinary test failure — it is the opposite signal."
590
605
  )
591
606
 
592
607
 
@@ -288,6 +288,35 @@ class DriveCounters:
288
288
  # capture deserves its own full budget of cheap waits before the next
289
289
  # forced retry.
290
290
  gate_wait_rounds: int = 0
291
+ # #2199: bounded retry for the trust gate's OWN dispatch — distinct from
292
+ # `fix_rounds` (which bounds "the work needs another round" once a
293
+ # verdict, passed or failed, actually landed on the board). This counts
294
+ # attempts where `coord acceptance record` itself never got that far —
295
+ # a missing local checkout, a driver crash, GitHub unreachable — so a
296
+ # persistently broken environment reaches a named `_die()` instead of
297
+ # `coord drive` re-running a full git-worktree + suite invocation every
298
+ # poll forever. Bounded by `opts.max_work_retries`, the same "how many
299
+ # times do we retry a flaky infra thing" budget `work_retries` uses.
300
+ #
301
+ # #2199 review (blocking finding 1): scoped to ONE sha via
302
+ # `acceptance_gate_attempts_sha` below — NOT a lifetime total. A fresh
303
+ # SHA (a fix round pushing a new commit) legitimately needs its own
304
+ # dispatch, and that dispatch is the entire point of the "same shape as
305
+ # `_decide_test`'s fix loop" design a few lines up in
306
+ # `_decide_acceptance_gate`; sharing one un-reset counter across every
307
+ # SHA a drive ever sees meant the SECOND round after the FIRST fix round
308
+ # already exhausted the default `max_work_retries=1` budget and died
309
+ # with a false "environment broken" diagnosis — even though the trust
310
+ # gate was working exactly as designed (quadraui#542's actual shape:
311
+ # one fix round, then this).
312
+ acceptance_gate_attempts: int = 0
313
+ # #2199 review: the SHA `acceptance_gate_attempts` above is counting
314
+ # dispatch attempts FOR. `_decide_acceptance_gate` resets the counter to
315
+ # 0 whenever it sees a SHA that doesn't match this — a fresh commit (a
316
+ # fix round, a rebase) always gets its own full attempt budget, and only
317
+ # repeated failures to produce ANY verdict for the SAME commit reach
318
+ # `_die()`.
319
+ acceptance_gate_attempts_sha: str = ""
291
320
  # #2079: a SECOND, independent budget of exactly the same shape, spent
292
321
  # only on landing the oracle-mode JIT acceptance slice
293
322
  # (`_decide_acceptance_landing`). Separate rather than shared because the
@@ -375,6 +404,14 @@ class AcceptanceGateChecker(Protocol):
375
404
 
376
405
  def resolve_for_path(self, repo_name: str, milestone_number: int) -> str | None: ...
377
406
 
407
+ def is_issue_exempt(
408
+ self,
409
+ repo_name: str,
410
+ milestone_number: int,
411
+ issue_number: int,
412
+ issue_labels: tuple[str, ...],
413
+ ) -> bool: ...
414
+
378
415
 
379
416
  @dataclass
380
417
  class GitHubAcceptanceGateChecker:
@@ -412,6 +449,34 @@ class GitHubAcceptanceGateChecker:
412
449
  return None
413
450
  return resolve_for_path(self.config, repo_cfg, milestone_number)
414
451
 
452
+ def is_issue_exempt(
453
+ self,
454
+ repo_name: str,
455
+ milestone_number: int,
456
+ issue_number: int,
457
+ issue_labels: tuple[str, ...],
458
+ ) -> bool:
459
+ """#2199: does *issue_number* opt out of the sealed suite — the
460
+ SAME ``manifest.exempt`` list / ``oracle:exempt`` label the #1138
461
+ hard gate (:func:`coord.milestone_dispatch.issue_oracle_ready`)
462
+ already reads. Reused rather than re-derived so the JIT-authoring
463
+ gate and the #2199 trust gate can never disagree about which
464
+ issues the oracle loop covers — see that function's own docstring
465
+ for why ``exempt`` says "doesn't consume the sealed suite" and
466
+ nothing about Gate A sign-off (already established True by the
467
+ time :func:`resolve_oracle_decision` calls this).
468
+ """
469
+ from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
470
+
471
+ repo_cfg = self.config.repo(repo_name)
472
+ if repo_cfg is None:
473
+ return False
474
+ readiness = issue_oracle_ready(
475
+ repo_cfg, self.config, milestone_number, issue_number,
476
+ issue_labels=issue_labels,
477
+ )
478
+ return readiness.exempt
479
+
415
480
 
416
481
  @dataclass(frozen=True)
417
482
  class OracleDecision:
@@ -424,11 +489,23 @@ class OracleDecision:
424
489
  to guess which mode a run is in. ``tracking_issue`` is set iff ``active``
425
490
  — the argument :func:`_decide_acceptance_author` needs to build ``coord
426
491
  acceptance author <repo> <tracking_issue> --issue <N>``.
492
+
493
+ #2199: ``issue_exempt`` — resolved alongside ``active`` (same one-shot
494
+ GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt`` reuses the
495
+ #1138 hard gate's own manifest read) — is *this issue*'s
496
+ ``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite.
497
+ :func:`_decide_acceptance_gate` (the trust gate) skips entirely when
498
+ this is ``True``: an exempt issue has no authored slice for `coord
499
+ acceptance record` to re-run, so treating its absence as a red verdict
500
+ would be exactly the "acquire a new blocking gate it never opted into"
501
+ regression #2199's acceptance criteria rule out. Always ``False`` when
502
+ ``active`` is ``False`` — meaningless outside the oracle loop.
427
503
  """
428
504
 
429
505
  active: bool
430
506
  reason: str
431
507
  tracking_issue: int | None = None
508
+ issue_exempt: bool = False
432
509
 
433
510
 
434
511
  def resolve_oracle_decision(
@@ -488,6 +565,13 @@ def resolve_oracle_decision(
488
565
  f"acceptance mock {state.repo} {state.milestone_tracking_issue}` "
489
566
  "first for the oracle loop, docs/ORACLE_LOOP.md)",
490
567
  )
568
+ # #2199: resolved here, alongside everything else `resolve_oracle_decision`
569
+ # already settles once per run — see `OracleDecision.issue_exempt`'s
570
+ # docstring for why the trust gate needs this and why it must reuse
571
+ # (not re-derive) the #1138 hard gate's own exemption check.
572
+ issue_exempt = gate_checker.is_issue_exempt(
573
+ state.repo, state.milestone_number, state.issue, state.issue_labels,
574
+ )
491
575
  return OracleDecision(
492
576
  True,
493
577
  f"ORACLE DRIVE — ms-{state.milestone_number}'s Gate-A contract is "
@@ -496,6 +580,7 @@ def resolve_oracle_decision(
496
580
  f"{state.milestone_tracking_issue} --issue {state.issue}`) before "
497
581
  "dispatching work",
498
582
  tracking_issue=state.milestone_tracking_issue,
583
+ issue_exempt=issue_exempt,
499
584
  )
500
585
 
501
586
 
@@ -851,12 +936,14 @@ def _acceptance_message(message: str, state: IssueState) -> str:
851
936
 
852
937
 
853
938
  class MergeVerifier(Protocol):
854
- """The two git/GitHub questions the state machine cannot answer itself."""
939
+ """The git/GitHub questions the state machine cannot answer itself."""
855
940
 
856
941
  def branch_has_commits(self, state: IssueState) -> bool: ...
857
942
 
858
943
  def verify_merged(self, state: IssueState) -> bool: ...
859
944
 
945
+ def branch_head_sha(self, state: IssueState) -> str | None: ...
946
+
860
947
 
861
948
  @dataclass
862
949
  class GitMergeVerifier:
@@ -965,6 +1052,23 @@ class GitMergeVerifier:
965
1052
  finally:
966
1053
  self._git(base, "update-ref", "-d", vref)
967
1054
 
1055
+ def branch_head_sha(self, state: IssueState) -> str | None:
1056
+ """The exact commit `coord acceptance record --sha` (#2199) must be
1057
+ pointed at — the trust gate re-runs the sealed suite against a
1058
+ precise SHA, never a branch name that could move under a slow
1059
+ drive loop. GitHub API, not a local checkout: same reasoning as
1060
+ :meth:`verify_merged`'s primary path — authoritative for every
1061
+ machine this driver might run on, no ``~/src/<repo>`` clone
1062
+ required. Returns ``None`` (never raises) when the branch is gone
1063
+ or GitHub is unreachable; callers treat that as "try again next
1064
+ poll", never as a verdict.
1065
+ """
1066
+ if not state.work_branch or not state.repo_github:
1067
+ return None
1068
+ from coord import github_ops # noqa: PLC0415
1069
+
1070
+ return github_ops.get_branch_sha(state.repo_github, state.work_branch)
1071
+
968
1072
 
969
1073
  # ── preflight (pure) ─────────────────────────────────────────────────────────
970
1074
 
@@ -1326,6 +1430,22 @@ def decide(
1326
1430
  _escalate_dead_end(state, dead_end), warnings=warnings
1327
1431
  )
1328
1432
 
1433
+ # #2199: the oracle loop's TRUST GATE — docs/ORACLE_LOOP.md Phase-1 step
1434
+ # 6, right here between the dead-end predicate and the Test gate,
1435
+ # because this is the first point `coord drive` has observed the work
1436
+ # assignment's branch head AFTER push. Before this, nothing ever called
1437
+ # `coord acceptance record`: an issue driven end-to-end by `coord drive`
1438
+ # completed with `acceptance_state = None` forever, so the sealed suite
1439
+ # was never re-run externally and `_maybe_clear_expected_red` could
1440
+ # never clear (quadraui#542).
1441
+ acceptance_gate = _decide_acceptance_gate(
1442
+ state, opts, counters, machine, oracle, verifier, gate_checker
1443
+ )
1444
+ if acceptance_gate is not None:
1445
+ return replace(
1446
+ acceptance_gate, warnings=warnings + acceptance_gate.warnings
1447
+ )
1448
+
1329
1449
  test = _decide_test(state, opts, counters, machine)
1330
1450
  if test is not None:
1331
1451
  return replace(test, warnings=warnings + test.warnings)
@@ -1467,6 +1587,161 @@ def _decide_advisory(
1467
1587
  )
1468
1588
 
1469
1589
 
1590
+ def _decide_acceptance_gate(
1591
+ state: IssueState,
1592
+ opts: DriveOptions,
1593
+ counters: DriveCounters,
1594
+ machine: str,
1595
+ oracle: OracleDecision | None,
1596
+ verifier: MergeVerifier,
1597
+ gate_checker: AcceptanceGateChecker | None,
1598
+ ) -> Action | None:
1599
+ """The #2199 oracle-loop TRUST GATE — ``coord acceptance record --repo
1600
+ R --issue N --sha <pushed sha>``, run by the COORDINATOR (this process,
1601
+ never inside the worker's own session) against the exact commit the
1602
+ work assignment pushed. docs/ORACLE_LOOP.md's Phase-1 step 6, and the
1603
+ reason it exists: a headless worker's in-session "green" claim
1604
+ (``coord acceptance run``, Phase-1 step 5) can lie; it cannot fake the
1605
+ coordinator re-running the sealed suite itself. ``None`` means "not
1606
+ applicable, or already resolved for this SHA — fall through to Test".
1607
+
1608
+ Before #2199 NOTHING ever called this — an issue driven end-to-end by
1609
+ ``coord drive`` completed with ``acceptance_state = None`` forever, so
1610
+ ``coord.merge_queue._maybe_clear_expected_red`` could never clear an
1611
+ ``expected_red`` entry either (quadraui#542, quadraui#492).
1612
+
1613
+ Only fires when ``oracle.active`` (a driver-configured repo, an issue
1614
+ in a milestone whose Gate-A contract is merged — the same condition
1615
+ that gated JIT-slice authoring) AND this issue is not
1616
+ ``oracle.issue_exempt`` (``manifest.exempt`` / the ``oracle:exempt``
1617
+ label — an issue that never consumed the sealed suite has nothing for
1618
+ ``record`` to re-run, so gating on its absence would be a NEW blocking
1619
+ gate an exempt issue never opted into, exactly what #2199's acceptance
1620
+ criteria rule out). Every other issue — no driver, no milestone,
1621
+ ``--no-acceptance`` — passes straight through unchanged.
1622
+
1623
+ *gate_checker* (#2199 review, blocking finding 3): resolves
1624
+ ``--for-path`` for a ROUTED repo (``acceptance.drivers.<repo>.routes``)
1625
+ exactly like :func:`_decide_acceptance_author` already does — without
1626
+ it, ``coord commands/acceptance.py``'s ``_resolve_driver`` hard-refuses
1627
+ every dispatch on a routed repo with "no route matched", so the trust
1628
+ gate silently never functioned there at all.
1629
+ """
1630
+ if oracle is None or not oracle.active or oracle.issue_exempt:
1631
+ return None
1632
+ assert gate_checker is not None, (
1633
+ "oracle.active implies resolve_oracle_decision ran with a real "
1634
+ "gate_checker; decide() always threads one through"
1635
+ )
1636
+
1637
+ sha = verifier.branch_head_sha(state)
1638
+ if sha is None:
1639
+ # GitHub unreachable or the branch vanished between polls — don't
1640
+ # let a transient lookup block a whole drive run; retry next poll.
1641
+ return _wait(label="ACCEPTANCE: waiting to resolve the pushed SHA")
1642
+
1643
+ if state.work_acceptance_sha == sha:
1644
+ if state.work_acceptance_state == "passed":
1645
+ return None # trust gate already green for this exact commit
1646
+ if state.work_acceptance_state == "failed":
1647
+ # Same shape as a failed Test verdict (#2199 acceptance: "a
1648
+ # failed trust gate must block, not warn ... at the same place
1649
+ # a failed Test verdict does") — a bounded fix-round retry,
1650
+ # sharing the ONE fix budget `_decide_test` also spends from
1651
+ # (#1692: a failed test and a failed trust gate are two shapes
1652
+ # of the same "the work needs another round" loop).
1653
+ if counters.fix_rounds >= opts.max_fix_rounds:
1654
+ return _die(
1655
+ f"acceptance trust gate still failing after "
1656
+ f"{counters.fix_rounds} fix round(s) at {sha} — "
1657
+ "stopping.\n"
1658
+ f" Reason: {state.work_acceptance_reason or 'none recorded'}\n"
1659
+ f" Inspect: coord log {state.work_aid} --machine "
1660
+ f"{state.work_machine or machine}"
1661
+ )
1662
+ counters.fix_rounds += 1
1663
+ return Action(
1664
+ kind=RUN,
1665
+ label=(
1666
+ "ACCEPTANCE: trust gate failed → fix round "
1667
+ f"{counters.fix_rounds}/{opts.max_fix_rounds} "
1668
+ f"(coord fix {state.work_aid})"
1669
+ ),
1670
+ command=("fix", state.work_aid),
1671
+ error_message=(
1672
+ f"coord fix {state.work_aid} failed to dispatch after a "
1673
+ "failed acceptance trust gate."
1674
+ ),
1675
+ )
1676
+
1677
+ # No verdict recorded yet for this exact SHA — never run, or run
1678
+ # against a now-stale one (a fix round, a rebase). Dispatch it.
1679
+ #
1680
+ # #2199 review (blocking finding 1): `acceptance_gate_attempts` is
1681
+ # scoped to THIS sha, not a lifetime total — a fresh SHA (this branch
1682
+ # runs again after a fix round pushed a new commit) gets its own full
1683
+ # attempt budget. Without this reset, the legitimate re-dispatch for
1684
+ # SHA2 inherited SHA1's already-spent count and died immediately with a
1685
+ # false "environment broken" diagnosis on exactly the second round the
1686
+ # docstring above says this mirrors `_decide_test` for.
1687
+ if counters.acceptance_gate_attempts_sha != sha:
1688
+ counters.acceptance_gate_attempts = 0
1689
+ counters.acceptance_gate_attempts_sha = sha
1690
+
1691
+ # `on_error="warn"` is deliberate: `coord acceptance record` exits
1692
+ # non-zero BOTH when it successfully records a red verdict (the board
1693
+ # write already happened before it exits — the next poll's
1694
+ # `work_acceptance_state == "failed"` branch above is what actually
1695
+ # bounces to Fix) and when it errors out before ever reaching a verdict
1696
+ # (no local checkout, a driver crash, a git fetch failure). Raising
1697
+ # `DriveError` here on either would turn a routine red trust-gate round
1698
+ # into a terminal drive failure — exactly the "must block [via Fix],
1699
+ # not warn" the acceptance criteria ask for, achieved one poll later by
1700
+ # observation rather than by inspecting this exit code directly.
1701
+ if counters.acceptance_gate_attempts >= opts.max_work_retries:
1702
+ return _die(
1703
+ f"acceptance trust gate never produced a verdict for {sha} "
1704
+ f"after {counters.acceptance_gate_attempts} attempt(s) — "
1705
+ "`coord acceptance record` keeps failing before recording "
1706
+ "anything (checkout/driver/environment problem, not a red "
1707
+ "suite).\n"
1708
+ f" Inspect: coord acceptance record --repo {state.repo} "
1709
+ f"--issue {state.issue} --sha {sha}"
1710
+ )
1711
+ counters.acceptance_gate_attempts += 1
1712
+
1713
+ # #2199 review (blocking finding 3): resolve `--for-path` exactly like
1714
+ # `_decide_acceptance_author` does — a routed repo's `_resolve_driver`
1715
+ # (coord/commands/acceptance.py) hard-refuses with "no route matched"
1716
+ # when it's omitted, which made the trust gate structurally unable to
1717
+ # ever record a verdict for such a repo.
1718
+ from coord.acceptance import ForPathResolutionError # noqa: PLC0415
1719
+
1720
+ try:
1721
+ for_path = gate_checker.resolve_for_path(state.repo, state.milestone_number)
1722
+ except ForPathResolutionError as exc:
1723
+ return _die(
1724
+ f"could not resolve --for-path for {state.repo}'s acceptance "
1725
+ f"trust gate on #{state.issue}: {exc}"
1726
+ )
1727
+ command = [
1728
+ "acceptance", "record", "--repo", state.repo, "--issue",
1729
+ str(state.issue), "--sha", sha,
1730
+ ]
1731
+ if for_path:
1732
+ command += ["--for-path", for_path]
1733
+
1734
+ return Action(
1735
+ kind=RUN,
1736
+ label=(
1737
+ "ACCEPTANCE: trust gate → coord acceptance record --sha "
1738
+ f"{sha[:12]}" + (f" --for-path {for_path}" if for_path else "")
1739
+ ),
1740
+ command=tuple(command),
1741
+ on_error="warn",
1742
+ )
1743
+
1744
+
1470
1745
  def _decide_test(
1471
1746
  state: IssueState,
1472
1747
  opts: DriveOptions,
@@ -84,6 +84,20 @@ class IssueState:
84
84
  work_review_iter: int = 0
85
85
  work_exit_code: int | None = None
86
86
  work_failure_reason: str = ""
87
+ # #2199: the trust-gate verdict `coord acceptance record --issue N --sha
88
+ # <sha>` writes onto THIS issue's own `work` row (see `coord.state.
89
+ # record_acceptance_verdict` — the same field `coord.merge_queue.
90
+ # _maybe_clear_expected_red` already reads via `getattr(work,
91
+ # "acceptance_state", None)`). "" | "passed" | "failed" — "" means no
92
+ # verdict has ever been recorded for this work row, which is exactly
93
+ # the ambiguity #2199 exists to resolve: nothing used to write this at
94
+ # all, so it was indistinguishable from "the gate ran and lied clean".
95
+ # `work_acceptance_sha` is the commit the last verdict was recorded
96
+ # against — a fresh push (fix round, rebase) invalidates it the same
97
+ # way `review_head_sha` invalidates a stale review approval.
98
+ work_acceptance_state: str = ""
99
+ work_acceptance_reason: str = ""
100
+ work_acceptance_sha: str = ""
87
101
 
88
102
  review_aid: str = ""
89
103
  review_status: str = ""
@@ -141,6 +155,12 @@ class IssueState:
141
155
  # member of any tracked work order — the "normal drive" case.
142
156
  milestone_number: int | None = None
143
157
  milestone_tracking_issue: int | None = None
158
+ # #2199: this issue's own GitHub labels — resolved from the same
159
+ # `/board` `issues` row `milestone_number` is (no extra I/O). Threaded
160
+ # through so `resolve_oracle_decision` can resolve per-issue
161
+ # `oracle:exempt`/`manifest.exempt` opt-out for the trust gate
162
+ # (`AcceptanceGateChecker.is_issue_exempt`) without a second board scan.
163
+ issue_labels: tuple[str, ...] = ()
144
164
 
145
165
  # The JIT slice's own `type="test-author"` assignment (#1171: keyed on
146
166
  # `for_issue_number == issue`, NOT `issue_number` — that field is the
@@ -224,6 +244,12 @@ class IssueState:
224
244
  self.work_aid,
225
245
  self.work_status,
226
246
  self.work_test_state,
247
+ # #2199: the trust gate's own verdict is a real transition
248
+ # the same way work_test_state is — see the docstring above
249
+ # for why omitting an analogous field mutes the `state:`
250
+ # log line and fools the stall detector.
251
+ self.work_acceptance_state,
252
+ self.work_acceptance_sha,
227
253
  self.work_review_state,
228
254
  self.work_review_iter,
229
255
  self.review_status,
@@ -402,6 +428,9 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
402
428
  work_review_iter=int(g(work, "review_iteration", 0) or 0),
403
429
  work_exit_code=None if exit_code is None else int(exit_code),
404
430
  work_failure_reason=g(work, "failure_reason"),
431
+ work_acceptance_state=g(work, "acceptance_state"),
432
+ work_acceptance_reason=g(work, "acceptance_reason"),
433
+ work_acceptance_sha=g(work, "acceptance_sha"),
405
434
  review_aid=g(review, "assignment_id"),
406
435
  review_status=g(review, "status"),
407
436
  review_verdict=g(review, "review_verdict"),
@@ -421,6 +450,7 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
421
450
  picked_machine_no_capable=_machine_pick.no_capable_machine,
422
451
  milestone_number=milestone_number,
423
452
  milestone_tracking_issue=milestone_tracking_issue,
453
+ issue_labels=tuple(issue_labels),
424
454
  # #2024: the per-issue Test-stage policy, off the labels already read
425
455
  # above (no extra I/O). `test_mode_from_labels` is the same function
426
456
  # `coord.state._get_issue_test_mode_local` uses, so the driver and the
@@ -3835,6 +3835,42 @@ def _work_assignment_for_entry(entry: QueuedMerge, board) -> Assignment | None:
3835
3835
  return None
3836
3836
 
3837
3837
 
3838
+ def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
3839
+ """#2199 review (blocking finding 2): whether *entry*'s issue has at
3840
+ least one ``expected_red`` entry recorded against it in some
3841
+ ``ms-*/manifest.yml`` on ``entry.target_branch`` — the scope check
3842
+ that keeps :func:`_maybe_clear_expected_red`'s loud "no passing
3843
+ trust-gate verdict" diagnostic from firing on every ordinary
3844
+ ``CLOSES_ISSUE_TYPES`` merge fleet-wide (no driver configured, no
3845
+ oracle-opted-in milestone, an ``oracle:exempt`` issue — none of which
3846
+ ever populate ``expected_red`` for their issue, #2191). Those merges
3847
+ have nothing here for ``coord acceptance record`` to ever have cleared
3848
+ and never will; before this check, the diagnostic branch below could
3849
+ not tell them apart from an issue that genuinely IS in scope and
3850
+ genuinely IS stuck red, so it printed the same actionable-looking
3851
+ (and, for a driverless repo, un-followable) advice on every single one.
3852
+
3853
+ Reuses the exact API-only lookup ``coord.acceptance.
3854
+ clear_expected_red_via_pr`` already performs on the success path —
3855
+ best-effort/read-only like the rest of this sweep: any lookup failure
3856
+ (unreachable API, older ``gh_ops`` stub missing the list/get methods)
3857
+ reads as "not in scope", matching :func:`coord.acceptance.
3858
+ find_ms_manifest_for_issue_via_api`'s own fail-soft posture.
3859
+ """
3860
+ from coord.acceptance import find_ms_manifest_for_issue_via_api # noqa: PLC0415
3861
+
3862
+ try:
3863
+ found = find_ms_manifest_for_issue_via_api(
3864
+ entry.repo_github, entry.target_branch, entry.issue_number, gh_ops=gh_ops,
3865
+ )
3866
+ except Exception: # noqa: BLE001 — best-effort, same posture as callers
3867
+ return False
3868
+ if found is None:
3869
+ return False
3870
+ _path, _text, _blob_sha, data = found
3871
+ return bool(data.expected_red.get(entry.issue_number))
3872
+
3873
+
3838
3874
  def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> MergeEvent | None:
3839
3875
  """#2164: right after *entry*'s PR has actually merged into
3840
3876
  ``entry.target_branch``, clear any of its issue's ``expected_red``
@@ -3843,17 +3879,52 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
3843
3879
  wrong (clearing at record-time, before the merge that's the whole
3844
3880
  point had actually happened; see ``coord.acceptance.
3845
3881
  clear_expected_red_via_pr``'s docstring). Returns ``None`` when there
3846
- is nothing to do (not a `work` entry, no recorded acceptance, or no
3847
- acceptance verdict at all — the overwhelmingly common case), else a
3848
- ``MergeEvent`` describing what happened. Never raises — every failure
3882
+ is nothing to do (not a `work` entry, or this issue was never in scope
3883
+ for the oracle trust gate at all)every other skip path names itself
3884
+ with its own ``MergeEvent`` (see below), so ``coord merge`` output
3885
+ never implies a clear that didn't happen. Never raises — every failure
3849
3886
  mode inside ``clear_expected_red_via_pr`` degrades to a message, and
3850
3887
  this wrapper's own lookups are read-only/best-effort.
3888
+
3889
+ #2199 review: before the trust gate had a call site at all
3890
+ (``coord acceptance record`` was never invoked by anything —
3891
+ ``getattr(work, "acceptance_state", None) != "passed"`` was the
3892
+ UNIVERSAL case), this branch returned bare ``None`` — silently. An
3893
+ ``expected_red`` entry could then never clear, indistinguishable from
3894
+ #1965's genuine vacuous-assertion alarm (quadraui#542). Now it names
3895
+ which condition failed instead — but ONLY for an issue actually in
3896
+ scope for the oracle loop (:func:`_issue_has_expected_red_entries`,
3897
+ #2199 review finding 2): the first cut of this fix regressed to
3898
+ printing that same loud, actionable-looking text on every ordinary
3899
+ merge fleet-wide, contradicting the acceptance criterion that exempt
3900
+ issues and driverless repos stay unaffected.
3851
3901
  """
3852
3902
  if entry.assignment_type not in CLOSES_ISSUE_TYPES:
3853
3903
  return None
3854
3904
  work = _work_assignment_for_entry(entry, board)
3855
- if work is None or getattr(work, "acceptance_state", None) != "passed":
3856
- return None
3905
+ if work is None:
3906
+ return MergeEvent(
3907
+ entry, "expected_red_clear_skipped_no_work",
3908
+ "no `work` assignment found for this merge entry — cannot read "
3909
+ "an acceptance verdict; skipping expected_red clear",
3910
+ )
3911
+ acceptance_state = getattr(work, "acceptance_state", None)
3912
+ if acceptance_state != "passed":
3913
+ if not _issue_has_expected_red_entries(entry, gh_ops):
3914
+ # Not in scope for the oracle loop at all — the pre-#2199
3915
+ # silent no-op is still correct here, not a regression (see
3916
+ # the docstring above and #2199 review finding 2).
3917
+ return None
3918
+ return MergeEvent(
3919
+ entry, "expected_red_clear_skipped_no_acceptance",
3920
+ f"no passing trust-gate verdict recorded on {work.assignment_id} "
3921
+ f"(acceptance_state={acceptance_state!r}) — the external `coord "
3922
+ "acceptance record` re-run either never happened or did not "
3923
+ "pass; skipping expected_red clear. Run `coord acceptance "
3924
+ f"record --repo {entry.repo_name} --issue {entry.issue_number} "
3925
+ "--sha <merged sha>` by hand, or re-drive the issue, to clear "
3926
+ "any listed entries.",
3927
+ )
3857
3928
  acceptance_sha = getattr(work, "acceptance_sha", None)
3858
3929
  if acceptance_sha is None or acceptance_sha != entry.branch_head_sha:
3859
3930
  # The recorded trust-gate verdict isn't for the exact commit that