code-coordinator 0.5.93__tar.gz → 0.5.95__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 (840) hide show
  1. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/acceptance.py +44 -1
  7. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/_common.py +72 -3
  8. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/acceptance.py +127 -2
  9. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/config.py +21 -0
  10. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/merge_queue.py +129 -27
  11. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_acceptance.py +54 -0
  12. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_acceptance.py +199 -0
  13. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config.py +48 -0
  14. code_coordinator-0.5.95/tests/test_config_snapshot_noncanonical_2208.py +299 -0
  15. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dist_name.py +8 -1
  16. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_merge_queue.py +106 -4
  17. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers.py +39 -3
  18. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_version_single_source.py +15 -4
  19. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/board.md +0 -0
  20. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/complete-session.md +0 -0
  21. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/coordinator.md +0 -0
  22. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/_lib.sh +0 -0
  23. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-checkout +0 -0
  24. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-commit +0 -0
  25. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-merge +0 -0
  26. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/coord-ci-acceptance.yml +0 -0
  28. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/auto-release.yml +0 -0
  29. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/cargo-test.yml +0 -0
  30. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/publish.yml +0 -0
  31. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/release-tui.yml +0 -0
  32. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/test.yml +0 -0
  33. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.gitignore +0 -0
  34. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/CLAUDE.md +0 -0
  35. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/GOAL.md +0 -0
  36. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/LICENSE +0 -0
  37. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/MANIFEST.in +0 -0
  38. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/README.md +0 -0
  39. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/dependency_links.txt +0 -0
  40. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/entry_points.txt +0 -0
  41. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/requires.txt +0 -0
  42. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/top_level.txt +0 -0
  43. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/__init__.py +0 -0
  44. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/_board_mapping.py +0 -0
  45. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/audit.py +0 -0
  53. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/auto_loop.py +0 -0
  54. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_bool_guard.py +0 -0
  56. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_wire.py +0 -0
  58. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/brain.py +0 -0
  59. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/branch_model.py +0 -0
  60. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/bug_intake.py +0 -0
  61. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/cargo_cache.py +0 -0
  62. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/ci_github.py +0 -0
  63. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/client.py +0 -0
  67. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/lifecycle.py +0 -0
  79. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  106. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  108. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  109. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/db.py +0 -0
  207. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive.py +0 -0
  232. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive_queue.py +0 -0
  233. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive_state.py +0 -0
  234. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/events.py +0 -0
  235. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/failure_class.py +0 -0
  236. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/filelock.py +0 -0
  237. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/fleet_config_health.py +0 -0
  238. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/freshness.py +0 -0
  239. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_a.py +0 -0
  240. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_b.py +0 -0
  241. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_snapshot.py +0 -0
  242. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gates.py +0 -0
  243. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/github_ops.py +0 -0
  244. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/goal.py +0 -0
  245. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/graph_health.py +0 -0
  246. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/__init__.py +0 -0
  247. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/aggregate.py +0 -0
  248. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/__init__.py +0 -0
  249. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/agent_install.py +0 -0
  250. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/cargo_targets.py +0 -0
  251. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/claude_binary.py +0 -0
  252. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/deploy_lane_facts.py +0 -0
  253. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/disk.py +0 -0
  254. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_board.py +0 -0
  255. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  256. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_phantom.py +0 -0
  257. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_unit_drift.py +0 -0
  258. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/graph.py +0 -0
  259. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/graphify_cli.py +0 -0
  260. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/index_lock.py +0 -0
  261. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/plan_usage.py +0 -0
  262. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/repo_state.py +0 -0
  263. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/spawned_coord.py +0 -0
  264. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/timer_active.py +0 -0
  265. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/toolchain.py +0 -0
  266. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/unit_drift.py +0 -0
  267. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/unit_enablement.py +0 -0
  268. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/worktrees.py +0 -0
  269. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/cli.py +0 -0
  270. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/context.py +0 -0
  271. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/fleet_snapshot.py +0 -0
  272. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/models.py +0 -0
  273. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/pypi.py +0 -0
  274. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/registry.py +0 -0
  275. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/render.py +0 -0
  276. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/units.py +0 -0
  277. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/hooks.py +0 -0
  278. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/housekeeping.py +0 -0
  279. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/interactive.py +0 -0
  280. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/issue_store.py +0 -0
  281. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/liveness_auditor.py +0 -0
  282. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/machine_pause.py +0 -0
  283. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_chat.py +0 -0
  284. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_dispatch.py +0 -0
  285. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_gate.py +0 -0
  286. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_order.py +0 -0
  287. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/mock_author.py +0 -0
  288. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/models.py +0 -0
  289. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/network.py +0 -0
  290. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/new_issue_chat.py +0 -0
  291. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/__init__.py +0 -0
  292. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/baseline.py +0 -0
  293. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/cli.py +0 -0
  294. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/collect.py +0 -0
  295. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/digest.py +0 -0
  296. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/models.py +0 -0
  297. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/predicate.py +0 -0
  298. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/service.py +0 -0
  299. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/store.py +0 -0
  300. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/transport.py +0 -0
  301. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notify.py +0 -0
  302. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/openapi.py +0 -0
  303. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/overlap_fence.py +0 -0
  304. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/overlap_predict.py +0 -0
  305. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/parentage.py +0 -0
  306. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/parentage_github.py +0 -0
  307. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/pipeline.py +0 -0
  308. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/plan_parser.py +0 -0
  309. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/plans.py +0 -0
  310. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/platform_paths.py +0 -0
  311. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_bridge.py +0 -0
  312. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_store.py +0 -0
  313. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_sync.py +0 -0
  314. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/pr_body_lint.py +0 -0
  315. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/prereqs.py +0 -0
  316. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/progress.py +0 -0
  317. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/__init__.py +0 -0
  318. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/base.py +0 -0
  319. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/claude.py +0 -0
  320. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/claude_pty.py +0 -0
  321. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/opencode.py +0 -0
  322. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/reconcile.py +0 -0
  323. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/refine_chat.py +0 -0
  324. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_cordon.py +0 -0
  325. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_propagate.py +0 -0
  326. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_verify.py +0 -0
  327. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_window.py +0 -0
  328. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/repo_edit.py +0 -0
  329. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/repo_onboard.py +0 -0
  330. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/reports.py +0 -0
  331. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/revalidate.py +0 -0
  332. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/review.py +0 -0
  333. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/scorecard.py +0 -0
  334. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/serve_app.py +0 -0
  335. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/skills/update-issue/SKILL.md +0 -0
  336. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/smoke.py +0 -0
  337. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/spend_ceiling.py +0 -0
  338. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/split_work.py +0 -0
  339. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/stage_projection.py +0 -0
  340. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/state.py +0 -0
  341. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_author.py +0 -0
  342. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_chat.py +0 -0
  343. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_orchestrator.py +0 -0
  344. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_report.py +0 -0
  345. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/tui_release.py +0 -0
  346. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage.py +0 -0
  347. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage_limits.py +0 -0
  348. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage_rollup.py +0 -0
  349. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/worker_events.py +0 -0
  350. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coordinator.example.yml +0 -0
  351. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-agent.service +0 -0
  352. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.service +0 -0
  353. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.sh +0 -0
  354. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.timer +0 -0
  355. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-drive-queue.service +0 -0
  356. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-drive-queue.timer +0 -0
  357. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-notify.service +0 -0
  358. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-notify.timer +0 -0
  359. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-propagate.service +0 -0
  360. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-propagate.timer +0 -0
  361. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-window.service +0 -0
  362. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-window.timer +0 -0
  363. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-serve.service +0 -0
  364. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.service +0 -0
  365. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.sh +0 -0
  366. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.timer +0 -0
  367. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-rollback.sh +0 -0
  368. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web.service +0 -0
  369. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/node-shim.sh +0 -0
  370. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/AGENT_OPERATIONS.md +0 -0
  371. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ARCHITECTURE.md +0 -0
  372. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ARCH_SECURITY_GATES.md +0 -0
  373. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/COCKPIT.md +0 -0
  374. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CONTROL_CENTER.md +0 -0
  375. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/COST_DISCIPLINE.md +0 -0
  376. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CROSS_PLATFORM.md +0 -0
  377. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CUSTOMER_PORTAL.md +0 -0
  378. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/DRIVE_QUEUE.md +0 -0
  379. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/EPHEMERAL_WORKERS.md +0 -0
  380. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/FORGE_MIGRATION.md +0 -0
  381. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/GRAPHIFY_SETUP.md +0 -0
  382. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ISSUE_GUIDANCE.md +0 -0
  383. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/MAC_MINI.md +0 -0
  384. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  385. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/NOTIFIER.md +0 -0
  386. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/OPENCODE_VERIFICATION.md +0 -0
  387. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/OPERATING_GOTCHAS.md +0 -0
  388. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ORACLE_LOOP.md +0 -0
  389. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PHONE_WEBAPP.md +0 -0
  390. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PIPELINE_V2.md +0 -0
  391. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PLATFORM_EVOLUTION.md +0 -0
  392. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/SECOND_BACKEND.md +0 -0
  393. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/STORE_SERVICE.md +0 -0
  394. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  395. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/WEB_CONTROL_CENTER.md +0 -0
  396. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/coord-test-runner.sh +0 -0
  417. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/drive-batch.sh +0 -0
  418. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/next_release_tag.py +0 -0
  420. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/smoke_437_interactive.py +0 -0
  423. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_878_review_capture.py +0 -0
  424. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_release_published.py +0 -0
  425. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_release_wheel.py +0 -0
  426. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/setup.cfg +0 -0
  427. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/SMOKE_SET.md +0 -0
  428. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/__init__.py +0 -0
  429. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  430. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/contract.md +0 -0
  431. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/manifest.yml +0 -0
  432. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  433. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  434. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  435. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  436. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/conftest.py +0 -0
  437. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/contract.md +0 -0
  438. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/manifest.yml +0 -0
  439. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  440. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  441. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/contract.md +0 -0
  442. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/manifest.yml +0 -0
  443. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  444. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  445. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  446. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  447. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  448. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  449. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  450. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  451. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  452. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  453. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/contract.md +0 -0
  454. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  455. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  456. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/manifest.yml +0 -0
  457. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  458. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/tsconfig.json +0 -0
  459. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  460. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/conftest.py +0 -0
  461. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-basic.json +0 -0
  462. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  463. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  464. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  465. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/all_pass.json +0 -0
  466. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  467. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/mixed_fail.json +0 -0
  468. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  469. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  470. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/skip.json +0 -0
  471. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/truncated.json +0 -0
  472. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  473. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  474. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  475. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  476. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  477. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  478. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  479. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  480. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_acceptance_drivers.py +0 -0
  481. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent.py +0 -0
  482. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_api_error.py +0 -0
  483. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_app.py +0 -0
  484. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_branch_base.py +0 -0
  485. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_branch_capture.py +0 -0
  486. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_config_free_1712.py +0 -0
  487. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_deploy_units_endpoint.py +0 -0
  488. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_dirty_worktree.py +0 -0
  489. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_graph_self_heal.py +0 -0
  490. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_health_h3.py +0 -0
  491. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_idle_restart.py +0 -0
  492. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_push_failure.py +0 -0
  493. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_reap.py +0 -0
  494. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_repos_and_pull.py +0 -0
  495. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_restart_services_endpoint.py +0 -0
  496. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_startup_diagnostics.py +0 -0
  497. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_update.py +0 -0
  498. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_update_bluegreen.py +0 -0
  499. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_usage_limit.py +0 -0
  500. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_zero_commit.py +0 -0
  501. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ambient_home_isolation.py +0 -0
  502. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_approve_reject_plan.py +0 -0
  503. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_approve_usage_gate.py +0 -0
  504. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_assignment_already_recorded_daemon.py +0 -0
  505. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_log.py +0 -0
  506. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_outcome.py +0 -0
  507. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_query.py +0 -0
  508. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_auto_loop.py +0 -0
  509. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_auto_release_publish_2035.py +0 -0
  510. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_base_checkout_restore.py +0 -0
  511. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_block_log.py +0 -0
  512. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_cap_762.py +0 -0
  513. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_fixture.py +0 -0
  514. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_read_path.py +0 -0
  515. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_service.py +0 -0
  516. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_state.py +0 -0
  517. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_wire.py +0 -0
  518. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_brain.py +0 -0
  519. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_branch_model.py +0 -0
  520. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_bug_intake.py +0 -0
  521. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_build_worker_image_env_update.py +0 -0
  522. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cargo_cache.py +0 -0
  523. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_acceptance_gate_1950.py +0 -0
  524. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_parity_2091.py +0 -0
  525. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_store.py +0 -0
  526. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_claim.py +0 -0
  527. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign.py +0 -0
  528. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  529. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_remote.py +0 -0
  530. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_provider.py +0 -0
  531. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  532. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_audit.py +0 -0
  533. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_chat_continue.py +0 -0
  534. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_diagnose_config_provenance.py +0 -0
  535. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_drive.py +0 -0
  540. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_drive_queue.py +0 -0
  541. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_escalate.py +0 -0
  542. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_fix_headless_review.py +0 -0
  543. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_gate_a.py +0 -0
  544. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_install_drift.py +0 -0
  545. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_install_skills.py +0 -0
  546. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_issue_create_label.py +0 -0
  547. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_issue_reopen.py +0 -0
  548. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_pull_artifact.py +0 -0
  563. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_queue.py +0 -0
  564. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_reattach_sessions.py +0 -0
  565. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_refine_board.py +0 -0
  566. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_preflight.py +0 -0
  567. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_propagate.py +0 -0
  568. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_window.py +0 -0
  569. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_repo_2220.py +0 -0
  570. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_scorecard.py +0 -0
  571. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_merge_queue.py +0 -0
  574. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_provider.py +0 -0
  575. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_review_finalizing.py +0 -0
  576. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_test_failed_tag.py +0 -0
  577. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_usage_limit.py +0 -0
  578. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_sync_comments_873.py +0 -0
  579. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_test_plan.py +0 -0
  580. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_track.py +0 -0
  581. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_tui_update.py +0 -0
  582. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_wait.py +0 -0
  583. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_client_base_install.py +0 -0
  584. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_comments.py +0 -0
  585. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_completion_summary.py +0 -0
  586. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_acceptance.py +0 -0
  587. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_audit.py +0 -0
  588. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_pricing.py +0 -0
  589. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_usage_gate.py +0 -0
  590. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_conflict_fix.py +0 -0
  591. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_conflict_fix_semantic.py +0 -0
  592. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test.py +0 -0
  593. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_baseline.py +0 -0
  594. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_routing.py +0 -0
  595. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_toolchain.py +0 -0
  596. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_web_sse_restart_live.py +0 -0
  597. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coordinator_machine.py +0 -0
  598. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cross_platform_imports.py +0 -0
  599. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard.py +0 -0
  600. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_fixture.py +0 -0
  601. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_terminal.py +0 -0
  602. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_terminal_live.py +0 -0
  603. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_db.py +0 -0
  604. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dead_end.py +0 -0
  605. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_db_backup.py +0 -0
  606. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_dist.py +0 -0
  607. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_rollback.py +0 -0
  608. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_drive_queue_unit.py +0 -0
  609. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_manifest.py +0 -0
  610. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_units_lane.py +0 -0
  611. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_web_unit.py +0 -0
  612. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deps.py +0 -0
  613. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_diagnose.py +0 -0
  614. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dispatch.py +0 -0
  615. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dispatch_target_validation.py +0 -0
  616. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_done_housekeeping.py +0 -0
  617. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive.py +0 -0
  618. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_queue.py +0 -0
  619. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_state.py +0 -0
  620. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_tmux.py +0 -0
  621. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_capability_detection.py +0 -0
  622. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  623. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_image_provenance.py +0 -0
  624. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_errors.py +0 -0
  625. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_events.py +0 -0
  626. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_failure_class.py +0 -0
  627. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_filelock.py +0 -0
  628. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  629. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fix_of_force_override.py +0 -0
  630. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_config_health.py +0 -0
  631. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_health_probes.py +0 -0
  632. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_health_snapshot.py +0 -0
  633. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_freshness.py +0 -0
  634. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_a.py +0 -0
  635. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_b.py +0 -0
  636. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_snapshot_staleness.py +0 -0
  637. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gates.py +0 -0
  638. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  639. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_generated_types_fixture.py +0 -0
  640. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_github_ops.py +0 -0
  641. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_goal.py +0 -0
  642. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_graph_health.py +0 -0
  643. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_graph_selfheal_absent_2237.py +0 -0
  644. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_handoff.py +0 -0
  645. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_checks.py +0 -0
  646. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_cli.py +0 -0
  647. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_cli_graph.py +0 -0
  648. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_config.py +0 -0
  649. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_context.py +0 -0
  650. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_deploy_lane_facts.py +0 -0
  651. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_incident_regression.py +0 -0
  652. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_pypi.py +0 -0
  653. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_registry.py +0 -0
  654. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_timer_active.py +0 -0
  655. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_toolchain.py +0 -0
  656. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_unit_drift.py +0 -0
  657. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_unit_enablement.py +0 -0
  658. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_hooks.py +0 -0
  659. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_human_attended_437.py +0 -0
  660. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_init.py +0 -0
  661. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_integration.py +0 -0
  662. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_briefing_echo.py +0 -0
  663. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_prefill_state.py +0 -0
  664. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_session_relaunch.py +0 -0
  665. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_test_verdict_backstop.py +0 -0
  666. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_token_attribution.py +0 -0
  667. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_worktree.py +0 -0
  668. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_issue_store_seam.py +0 -0
  669. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_liveness_auditor.py +0 -0
  670. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_liveness_notify.py +0 -0
  671. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_machine_pause.py +0 -0
  672. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_merge_verify.py +0 -0
  673. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_chat.py +0 -0
  674. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_dispatch.py +0 -0
  675. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_gate.py +0 -0
  676. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_order.py +0 -0
  677. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_seam.py +0 -0
  678. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_mock_author.py +0 -0
  679. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_model_tiering.py +0 -0
  680. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_models.py +0 -0
  681. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_models_config_labels.py +0 -0
  682. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_needs_attention.py +0 -0
  683. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_network.py +0 -0
  684. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_new_issue_chat.py +0 -0
  685. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_next_release_tag.py +0 -0
  686. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_no_direct_gh_calls.py +0 -0
  687. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_node_shim.py +0 -0
  688. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_baseline.py +0 -0
  689. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_cli.py +0 -0
  690. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_collect.py +0 -0
  691. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_config.py +0 -0
  692. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_drive_seam.py +0 -0
  693. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_isolation.py +0 -0
  694. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_predicate.py +0 -0
  695. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_quiet_hours.py +0 -0
  696. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_service.py +0 -0
  697. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notify.py +0 -0
  698. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notify_drain.py +0 -0
  699. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_openapi.py +0 -0
  700. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_operational_defaults.py +0 -0
  701. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_overlap_fence.py +0 -0
  702. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_overlap_predict.py +0 -0
  703. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_packaged_deploy_units.py +0 -0
  704. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_parentage.py +0 -0
  705. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_paste_landed.py +0 -0
  706. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_pipeline.py +0 -0
  707. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_approve_plan_command.py +0 -0
  708. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_pr_command.py +0 -0
  709. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_review_command.py +0 -0
  710. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_only.py +0 -0
  711. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_parser.py +0 -0
  712. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_platform_paths.py +0 -0
  713. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_bridge.py +0 -0
  714. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_config.py +0 -0
  715. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_sync.py +0 -0
  716. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_pr_body_lint.py +0 -0
  717. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_prereqs.py +0 -0
  718. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_production_db_guard.py +0 -0
  719. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_progress.py +0 -0
  720. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_provider_seam.py +0 -0
  721. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers_config_labels.py +0 -0
  722. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers_pty.py +0 -0
  723. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_quiet_hours.py +0 -0
  724. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_quiet_hours_store_2146.py +0 -0
  725. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reap_merged_sessions.py +0 -0
  726. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reap_stale_interactive_tick.py +0 -0
  727. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_branch.py +0 -0
  728. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_completions.py +0 -0
  729. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_merges.py +0 -0
  730. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_usage_limit_done.py +0 -0
  731. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_refine_chat.py +0 -0
  732. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_2101.py +0 -0
  733. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  734. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_deadlock_2240.py +0 -0
  735. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_propagate.py +0 -0
  736. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_unified_1242.py +0 -0
  737. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_verify.py +0 -0
  738. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_window.py +0 -0
  739. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_remote_auto_prune.py +0 -0
  740. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_remote_interactive_reaper.py +0 -0
  741. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_edit_2220.py +0 -0
  742. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_graph_fleet_2237.py +0 -0
  743. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_onboard_2220.py +0 -0
  744. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_report_result_push.py +0 -0
  745. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reports.py +0 -0
  746. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry.py +0 -0
  747. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry_advisory_1606.py +0 -0
  748. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry_type_1636.py +0 -0
  749. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_revalidate.py +0 -0
  750. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review.py +0 -0
  751. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_end_review_without_verdict.py +0 -0
  752. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_parse_failure_diagnostic.py +0 -0
  753. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_reaffirm.py +0 -0
  754. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_state.py +0 -0
  755. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_backstop.py +0 -0
  756. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_override_audit.py +0 -0
  757. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_relay.py +0 -0
  758. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_zero_commits.py +0 -0
  759. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_scoped_review_wiring.py +0 -0
  760. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_scorecard.py +0 -0
  761. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_serve.py +0 -0
  762. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_serve_app_board_trim.py +0 -0
  763. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_session.py +0 -0
  764. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_slice_issue_attribution.py +0 -0
  765. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke.py +0 -0
  766. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke_live_checkout_restore.py +0 -0
  767. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke_workflow.py +0 -0
  768. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_spend_ceiling.py +0 -0
  769. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_spend_ceiling_coordinator.py +0 -0
  770. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_split.py +0 -0
  771. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_split_work.py +0 -0
  772. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stage_projection.py +0 -0
  773. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stalled_pipeline.py +0 -0
  774. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_state.py +0 -0
  775. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_state_review_findings_daemon.py +0 -0
  776. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_status_fleet_footer.py +0 -0
  777. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stop_1567.py +0 -0
  778. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stuck.py +0 -0
  779. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_terminal_command.py +0 -0
  780. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_author.py +0 -0
  781. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_chat.py +0 -0
  782. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_orchestrator.py +0 -0
  783. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_report.py +0 -0
  784. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_verdict_parsing.py +0 -0
  785. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_verdict_transcript_floor.py +0 -0
  786. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_board_audit.py +0 -0
  787. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_config_load_1080.py +0 -0
  788. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_daemon_routing_906.py +0 -0
  789. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_tmux_host.py +0 -0
  790. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_tmux_session.py +0 -0
  791. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_transcript_floor.py +0 -0
  792. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage.py +0 -0
  793. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage_limits.py +0 -0
  794. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage_rollup.py +0 -0
  795. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_venv_live_install_2121.py +0 -0
  796. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_watch.py +0 -0
  797. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_events.py +0 -0
  798. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_image_pin_sync.py +0 -0
  799. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_safety.py +0 -0
  800. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_test_scoping.py +0 -0
  801. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worktree.py +0 -0
  802. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  803. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/Cargo.lock +0 -0
  804. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/Cargo.toml +0 -0
  805. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/cargo-config-local-quadraui.toml.example +0 -0
  806. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/audit.rs +0 -0
  807. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/chat.rs +0 -0
  808. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/data.rs +0 -0
  809. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/dialogs.rs +0 -0
  810. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/drive.rs +0 -0
  811. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/drive_queue.rs +0 -0
  812. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/escalation.rs +0 -0
  813. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/events.rs +0 -0
  814. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fixtures.rs +0 -0
  815. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_health.rs +0 -0
  816. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_sessions.rs +0 -0
  817. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_terminals.rs +0 -0
  818. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/format.rs +0 -0
  819. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/milestone_dag.rs +0 -0
  820. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/mod.rs +0 -0
  821. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/msv.rs +0 -0
  822. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/pipeline.rs +0 -0
  823. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/plans.rs +0 -0
  824. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/render.rs +0 -0
  825. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/reports.rs +0 -0
  826. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/sessions.rs +0 -0
  827. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/settings_ui.rs +0 -0
  828. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/sidebar.rs +0 -0
  829. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/terminal.rs +0 -0
  830. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/tests.rs +0 -0
  831. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/types.rs +0 -0
  832. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/workspace.rs +0 -0
  833. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/bin/gtk.rs +0 -0
  834. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/commands.rs +0 -0
  835. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/lib.rs +0 -0
  836. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/main.rs +0 -0
  837. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/settings.rs +0 -0
  838. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/tests/acceptance.rs +0 -0
  839. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/tests/cli.rs +0 -0
  840. {code_coordinator-0.5.93 → code_coordinator-0.5.95}/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.93
3
+ Version: 0.5.95
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.93
3
+ Version: 0.5.95
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
@@ -529,6 +529,7 @@ tests/test_config.py
529
529
  tests/test_config_acceptance.py
530
530
  tests/test_config_audit.py
531
531
  tests/test_config_pricing.py
532
+ tests/test_config_snapshot_noncanonical_2208.py
532
533
  tests/test_config_usage_gate.py
533
534
  tests/test_conflict_fix.py
534
535
  tests/test_conflict_fix_semantic.py
@@ -559,6 +559,7 @@
559
559
  "tests/test_config_acceptance.py",
560
560
  "tests/test_config_audit.py",
561
561
  "tests/test_config_pricing.py",
562
+ "tests/test_config_snapshot_noncanonical_2208.py",
562
563
  "tests/test_config_usage_gate.py",
563
564
  "tests/test_conflict_fix.py",
564
565
  "tests/test_conflict_fix_semantic.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.93",
2
+ "tag": "0.5.95",
3
3
  "distance": 0,
4
- "node": "g827590698265fe1d05e3d77e84c364f63d767405",
4
+ "node": "g100d9f74dd79bd61b86812c4dd3930e4cc7079ce",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-15"
@@ -22,7 +22,7 @@ import json
22
22
  import re
23
23
  from dataclasses import dataclass, field
24
24
  from pathlib import Path
25
- from typing import Any, Callable
25
+ from typing import Any, Callable, Literal
26
26
 
27
27
  import yaml
28
28
 
@@ -1105,3 +1105,46 @@ def clear_expected_red_via_pr(
1105
1105
  f"cleared expected_red for #{issue_number}: {', '.join(sorted(ids))} "
1106
1106
  f"(PR #{pr['number']})"
1107
1107
  )
1108
+
1109
+
1110
+ ExpectedRedClearStatus = Literal["cleared", "no_op", "pending_retry", "failed"]
1111
+
1112
+
1113
+ def classify_expected_red_clear_result(msg: str) -> ExpectedRedClearStatus:
1114
+ """#2266 review (blocking finding 2): the single source of truth for
1115
+ interpreting :func:`clear_expected_red_via_pr`'s return string.
1116
+
1117
+ Before this, ``coord.merge_queue._maybe_clear_expected_red`` and
1118
+ ``coord.commands.acceptance._clear_stuck_expected_red`` each carried
1119
+ their own ``msg.startswith("cleared expected_red")`` check — two
1120
+ independent implementations of "did the clear succeed?" that agreed
1121
+ today but could silently desync the moment either
1122
+ :func:`clear_expected_red_via_pr`'s wording changed (the exact "One
1123
+ question, one answer" split-brain the epic #2096 review checklist
1124
+ warns about). Both call sites now classify through this function.
1125
+
1126
+ Returns one of four outcomes, not a bare bool — a binary
1127
+ cleared/not-cleared collapsed two very different "not cleared" cases
1128
+ into one (#2266 review, blocking finding 1):
1129
+
1130
+ * ``"cleared"`` — the PR opened *and* merged; entries are gone.
1131
+ * ``"no_op"`` — there was nothing to clear in the first place (no
1132
+ manifest found for this issue, or the issue has no ``expected_red``
1133
+ entries at all). This is the *common* case for an ordinary
1134
+ oracle-loop merge whose issue was never part of a deliberately-red
1135
+ slice — it must never read as a failure.
1136
+ * ``"pending_retry"`` — the clearing PR opened but did not merge yet
1137
+ (branch protection / required checks pending); the caller already
1138
+ knows this will retry on the next merge, not a hard failure.
1139
+ * ``"failed"`` — a genuine failure: everything ``clear_expected_red_via_pr``'s
1140
+ docstring says degrades to a ``"warning: ..."``-prefixed string
1141
+ (unresolvable branch tip, a commit/PR-open/PR-merge exception, an
1142
+ unsupported ``gh_ops``, a JSON manifest, or unchanged text).
1143
+ """
1144
+ if msg.startswith("cleared expected_red"):
1145
+ return "cleared"
1146
+ if msg.startswith("no expected_red entries"):
1147
+ return "no_op"
1148
+ if "did not merge" in msg and "will retry on the next merge" in msg:
1149
+ return "pending_retry"
1150
+ return "failed"
@@ -27,7 +27,13 @@ from typing import TYPE_CHECKING
27
27
 
28
28
  import click
29
29
 
30
- from coord.config import Config, ConfigError, load, resolve_config_path
30
+ from coord.config import (
31
+ Config,
32
+ ConfigError,
33
+ is_canonical_config_path,
34
+ load,
35
+ resolve_config_path,
36
+ )
31
37
 
32
38
  if TYPE_CHECKING: # pragma: no cover — typing only
33
39
  from collections.abc import Iterator
@@ -100,7 +106,55 @@ _CONFIG_OPTION = click.option(
100
106
  )
101
107
 
102
108
 
103
- def _save_config_snapshot(config: Config) -> None:
109
+ def _note_withheld_snapshot(config: Config, config_path: Path) -> None:
110
+ """Tell the operator that the #2208 guard just withheld a snapshot — but
111
+ only when withholding it actually changed the outcome.
112
+
113
+ Silence is what turned the original incident into an hour of
114
+ misdiagnosis: the fleet's ``machines`` table said ``ci-runner`` and
115
+ nothing anywhere said why. So when a non-canonical ``--config`` would
116
+ have *replaced a populated table with a different fleet* — the exact
117
+ shape of that incident — say so on stderr.
118
+
119
+ Everything else stays quiet, and that restraint is load-bearing rather
120
+ than cosmetic. ``--config <tmpfile>`` is the normal way to run coord
121
+ against a scratch config: CI stubs, the config *validator* in
122
+ ``scripts/azure-workers/coordinator-machine.py``, and every one of this
123
+ repo's ~110 CLI test modules. Emitting a note on each of those would
124
+ have made the guard a per-invocation nag, and — because Click's
125
+ ``CliRunner`` folds stderr into ``result.output`` — would have corrupted
126
+ the machine-readable stdout of commands like ``coord plans --json`` and
127
+ ``coord scorecard --json`` for anyone parsing combined output.
128
+
129
+ A skip with nothing to clobber (empty table, or a table that already
130
+ matches) withheld nothing observable, so it warrants no words.
131
+ """
132
+ try:
133
+ from coord.db import get_connection
134
+ conn = get_connection()
135
+ existing = [
136
+ str(row[0])
137
+ for row in conn.execute("SELECT name FROM machines ORDER BY name")
138
+ ]
139
+ except Exception: # noqa: BLE001 — advisory only; never break the command
140
+ return
141
+ if not existing:
142
+ # Nothing to protect: no snapshot has ever landed here (a fresh
143
+ # host, or a CI runner whose DB only exists for this one command).
144
+ return
145
+ if existing == sorted(m.name for m in config.machines):
146
+ # The override names the same fleet — the write would have been a
147
+ # no-op, so the skip cost the operator nothing.
148
+ return
149
+ click.echo(
150
+ f"note: --config points at a non-canonical path ({config_path}); "
151
+ f"leaving the shared machines/pipeline snapshot untouched (#2208). "
152
+ f"Fleet machines on record: {', '.join(existing)}.",
153
+ err=True,
154
+ )
155
+
156
+
157
+ def _save_config_snapshot(config: Config, config_path: Path | None = None) -> None:
104
158
  """Persist machine + pipeline metadata to the DB so dashboards can read it.
105
159
 
106
160
  Writes:
@@ -111,6 +165,13 @@ def _save_config_snapshot(config: Config) -> None:
111
165
 
112
166
  The pipeline keys let the TUI Pipeline panel pick up coordinator.yml
113
167
  settings without having to parse YAML itself.
168
+
169
+ *config_path* is the file *config* was actually loaded from. When given
170
+ and it is not the canonical resolution (see
171
+ ``coord.config.is_canonical_config_path``), the write is skipped
172
+ entirely — see the #2208 guard below. Callers that omit it (mainly
173
+ direct unit tests exercising the write itself) get the pre-#2208
174
+ behavior: always write.
114
175
  """
115
176
  # #584: a thin client (board_service configured) must not create/write a
116
177
  # local DB — the daemon/host owns the config snapshot. On the host
@@ -118,6 +179,14 @@ def _save_config_snapshot(config: Config) -> None:
118
179
  from coord.client import resolve_board_service
119
180
  if resolve_board_service() is not None:
120
181
  return
182
+ # #2208: an explicit `--config <file>` pointed away from the fleet's real
183
+ # config (a scratch fixture, a CI-only stub) must not be treated as a
184
+ # request to redefine the shared `machines` table — that table is global
185
+ # state every client's `/board` and the TUI read, not something a single
186
+ # throwaway invocation should own.
187
+ if config_path is not None and not is_canonical_config_path(config_path):
188
+ _note_withheld_snapshot(config, config_path)
189
+ return
121
190
  conn = None
122
191
  try:
123
192
  from coord.db import get_connection
@@ -270,7 +339,7 @@ def _load_config(path: Path | None) -> Config:
270
339
  except ConfigError as e:
271
340
  click.echo(f"error: {e}", err=True)
272
341
  sys.exit(2)
273
- _save_config_snapshot(cfg)
342
+ _save_config_snapshot(cfg, path)
274
343
  return cfg
275
344
 
276
345
 
@@ -50,6 +50,7 @@ from coord.acceptance_drivers import DriverError, run_driver
50
50
  from coord.commands._common import _CONFIG_OPTION, _load_config
51
51
  from coord.comments import format_needs_attention
52
52
  from coord.dispatch import DispatchRefused
53
+ from coord.models import Repo
53
54
 
54
55
 
55
56
  @click.group("acceptance")
@@ -642,12 +643,42 @@ def acceptance_record(
642
643
  "merge` right after that issue's fix merges) may have failed, or "
643
644
  "the fix landed by some other path. A long-lived expected_red "
644
645
  "entry is exactly the invisible debt this command exists to "
645
- "surface."
646
+ "surface. #2266: `--clear` acts on it — for every STUCK entry this "
647
+ "listing finds, invoke the same `clear_expected_red_via_pr` PR "
648
+ "path `coord merge` uses, so a registry stuck because the merge-"
649
+ "time trust-gate guards never fired (acceptance never recorded, or "
650
+ "the PR merged out of band) has a re-fire path instead of only a "
651
+ "detector. Never touches an entry whose issue is still open — "
652
+ "those are read as legitimately red, not stuck."
646
653
  ),
647
654
  )
648
655
  @click.argument("repo")
649
656
  @_CONFIG_OPTION
650
- def acceptance_expected_red(repo: str, config_path: Path) -> None:
657
+ @click.option(
658
+ "--clear", "do_clear", is_flag=True, default=False,
659
+ help=(
660
+ "Open+merge the expected_red-clearing PR for every STUCK entry "
661
+ "this listing finds (issue closed, entries still live). Skips — "
662
+ "never clears — any entry whose issue is still open."
663
+ ),
664
+ )
665
+ @click.option(
666
+ "--issue", "only_issue", type=int, default=None,
667
+ help="With --clear, restrict clearing to this issue number.",
668
+ )
669
+ def acceptance_expected_red(
670
+ repo: str, config_path: Path, do_clear: bool, only_issue: int | None, # noqa: FBT001
671
+ ) -> None:
672
+ if only_issue is not None and not do_clear:
673
+ # #2266 review nit: `--issue` only narrows what `--clear` acts on
674
+ # (per its own help text) — silently accepting it without `--clear`
675
+ # looks like it did something when it didn't.
676
+ click.echo(
677
+ "warning: --issue has no effect without --clear; the listing "
678
+ "below covers every issue.",
679
+ err=True,
680
+ )
681
+
651
682
  cfg = _load_config(config_path)
652
683
  repo_entry = cfg.repo(repo)
653
684
  if repo_entry is None:
@@ -660,23 +691,117 @@ def acceptance_expected_red(repo: str, config_path: Path) -> None:
660
691
  return
661
692
 
662
693
  total = 0
694
+ # #2266: STUCK entries found while rendering the listing above — the
695
+ # exact set `--clear` acts on, so the remedy can never drift from the
696
+ # detector that names the debt.
697
+ stuck: list[tuple[str, int, frozenset[str]]] = []
663
698
  for ms, by_issue in sorted(by_ms.items()):
664
699
  click.echo(f"{ms}:")
665
700
  for issue_number, ids in sorted(by_issue.items()):
666
701
  total += len(ids)
667
702
  closed_note = ""
703
+ is_stuck = False
668
704
  try:
669
705
  issue_data = github_ops.get_issue(repo_entry.github, issue_number)
670
706
  if str((issue_data or {}).get("state", "")).lower() == "closed":
671
707
  closed_note = " [STUCK: issue is closed but entries remain]"
708
+ is_stuck = True
672
709
  except Exception: # noqa: BLE001 — a lookup hiccup shouldn't hide the entry itself
673
710
  pass
674
711
  click.echo(
675
712
  f" #{issue_number}: {', '.join(sorted(ids))}{closed_note}"
676
713
  )
714
+ if is_stuck:
715
+ stuck.append((ms, issue_number, ids))
677
716
  click.echo(f"\n{total} expected_red test-id(s) across "
678
717
  f"{sum(len(v) for v in by_ms.values())} issue(s).")
679
718
 
719
+ if not do_clear:
720
+ return
721
+
722
+ _clear_stuck_expected_red(repo, repo_entry, stuck, only_issue)
723
+
724
+
725
+ def _clear_stuck_expected_red(
726
+ repo: str, repo_entry: Repo, stuck: list[tuple[str, int, frozenset[str]]],
727
+ only_issue: int | None,
728
+ ) -> None:
729
+ """#2266: the remedy half of `coord acceptance expected-red --clear`.
730
+
731
+ Acts ONLY on *stuck* — the STUCK (issue closed, entries still live) set
732
+ the listing above already computed — never on an issue whose entries
733
+ are legitimately still red (still open). `--issue` narrows to one
734
+ issue but does not widen scope: naming an open issue's number here
735
+ finds nothing to clear, same as naming one that isn't in *stuck* at
736
+ all.
737
+
738
+ Exits non-zero when at least one entry hard-fails to clear (#2266
739
+ review, non-blocking finding: without this, a caller scripting this
740
+ command in CI/cron could only detect a fully-failed run by reading
741
+ stdout or separately querying the audit log).
742
+ """
743
+ from coord.acceptance import ( # noqa: PLC0415
744
+ classify_expected_red_clear_result,
745
+ clear_expected_red_via_pr,
746
+ )
747
+ from coord.audit import record_audit # noqa: PLC0415
748
+
749
+ if only_issue is not None:
750
+ stuck = [s for s in stuck if s[1] == only_issue]
751
+ if not stuck:
752
+ click.echo(
753
+ f"\n--issue {only_issue}: not STUCK (open, or no "
754
+ "expected_red entries recorded for it) — nothing to clear."
755
+ )
756
+ return
757
+
758
+ if not stuck:
759
+ click.echo("\nno STUCK entries to clear.")
760
+ return
761
+
762
+ click.echo(f"\nclearing {len(stuck)} STUCK issue(s)...")
763
+ # #2266 review (blocking finding 2): classify through the same shared
764
+ # helper `coord.merge_queue._maybe_clear_expected_red` uses, instead of
765
+ # each surface independently re-deriving "did this succeed?" from the
766
+ # message text — a split-brain waiting to happen if the message
767
+ # wording ever changes (epic #2096's "one question, one answer").
768
+ any_failed = False
769
+ for ms, issue_number, ids in stuck:
770
+ msg = clear_expected_red_via_pr(
771
+ repo_entry.github, repo, repo_entry.default_branch, issue_number,
772
+ gh_ops=github_ops,
773
+ )
774
+ click.echo(f" #{issue_number}: {msg}")
775
+ status = classify_expected_red_clear_result(msg)
776
+ if status == "no_op":
777
+ # These entries were just listed as STUCK, so this should be
778
+ # rare (e.g. a race — another process already cleared them) —
779
+ # but it's still not a failure worth a durable audit row.
780
+ continue
781
+ if status == "failed":
782
+ any_failed = True
783
+ event_type = {
784
+ "cleared": "expected_red_clear",
785
+ "pending_retry": "expected_red_clear_pending",
786
+ "failed": "expected_red_clear_failed",
787
+ }[status]
788
+ # #2266 scope 2: a failed clear must land somewhere durable — the
789
+ # audit log — so the next pass over this repo can say "this
790
+ # registry is still stuck" without anyone re-reading this output.
791
+ record_audit(
792
+ tier="business",
793
+ category="acceptance",
794
+ event_type=event_type,
795
+ actor="user",
796
+ summary=f"coord acceptance expected-red --clear {repo} #{issue_number}: {msg}",
797
+ repo=repo,
798
+ issue=issue_number,
799
+ details={"ms": ms, "test_ids": sorted(ids), "result": msg},
800
+ )
801
+
802
+ if any_failed:
803
+ sys.exit(1)
804
+
680
805
 
681
806
  def _acceptance_record_local(
682
807
  repo: str,
@@ -51,6 +51,27 @@ def resolve_config_path() -> Path:
51
51
  return candidate
52
52
  return USER_CONFIG_PATH
53
53
 
54
+
55
+ def is_canonical_config_path(path: Path) -> bool:
56
+ """Whether *path* is what :func:`resolve_config_path` resolves to *right now*.
57
+
58
+ #2208: a coord command run with an explicit ``--config <file>`` pointed
59
+ somewhere other than the fleet's real config — a scratch fixture, a
60
+ CI-only stub someone wrote specifically so ``coord.config.load()`` has
61
+ something to parse — is not a request to redefine the fleet. This gates
62
+ the shared machines/pipeline DB snapshot (``_save_config_snapshot`` in
63
+ ``coord/commands/_common.py``): only a *path* that matches the ordinary
64
+ resolution order ($COORD_CONFIG → ``~/.coord/coordinator.yml`` →
65
+ ``./coordinator.yml``) counts as canonical and is allowed to overwrite
66
+ that shared table. An explicit ``--config`` that happens to name the
67
+ same file the default resolution would have picked still counts as
68
+ canonical — this only catches a genuine *override*.
69
+ """
70
+ candidate = Path(path).expanduser().resolve()
71
+ canonical = resolve_config_path().expanduser().resolve()
72
+ return candidate == canonical
73
+
74
+
54
75
  # Safety-by-default: repos without explicit worker_permissions get this deny-list.
55
76
  DEFAULT_DENY_COMMANDS: list[str] = [
56
77
  "Bash(gh *)",
@@ -4387,26 +4387,36 @@ def _test_author_effective_issue_number(entry: QueuedMerge, board) -> int | None
4387
4387
  return None
4388
4388
 
4389
4389
 
4390
- def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
4391
- """#2199 review (blocking finding 2): whether *entry*'s issue has at
4392
- least one ``expected_red`` entry recorded against it in some
4393
- ``ms-*/manifest.yml`` on ``entry.target_branch`` — the scope check
4394
- that keeps :func:`_maybe_clear_expected_red`'s loud "no passing
4395
- trust-gate verdict" diagnostic from firing on every ordinary
4396
- ``CLOSES_ISSUE_TYPES`` merge fleet-wide (no driver configured, no
4397
- oracle-opted-in milestone, an ``oracle:exempt`` issue none of which
4398
- ever populate ``expected_red`` for their issue, #2191). Those merges
4399
- have nothing here for ``coord acceptance record`` to ever have cleared
4400
- and never will; before this check, the diagnostic branch below could
4401
- not tell them apart from an issue that genuinely IS in scope and
4402
- genuinely IS stuck red, so it printed the same actionable-looking
4403
- (and, for a driverless repo, un-followable) advice on every single one.
4390
+ def _expected_red_ids_for_entry(entry: QueuedMerge, gh_ops: GhOps) -> frozenset[str]:
4391
+ """#2199 review (blocking finding 2) / #2266 review (non-blocking
4392
+ finding): the ``expected_red`` test ids, if any, recorded against
4393
+ *entry*'s issue in some ``ms-*/manifest.yml`` on ``entry.target_branch``.
4394
+
4395
+ Two call sites need this:
4396
+
4397
+ * :func:`_issue_has_expected_red_entries` the scope check that keeps
4398
+ :func:`_maybe_clear_expected_red`'s loud "no passing trust-gate
4399
+ verdict" diagnostic from firing on every ordinary
4400
+ ``CLOSES_ISSUE_TYPES`` merge fleet-wide (no driver configured, no
4401
+ oracle-opted-in milestone, an ``oracle:exempt`` issue none of which
4402
+ ever populate ``expected_red`` for their issue, #2191). Those merges
4403
+ have nothing here for ``coord acceptance record`` to ever have
4404
+ cleared and never will; before this check, the diagnostic branch
4405
+ below could not tell them apart from an issue that genuinely IS in
4406
+ scope and genuinely IS stuck red, so it printed the same
4407
+ actionable-looking (and, for a driverless repo, un-followable)
4408
+ advice on every single one.
4409
+ * :func:`_maybe_clear_expected_red`'s clear branch, to put the actual
4410
+ test ids (not just a pr/branch pair) into the durable audit row —
4411
+ matching ``coord acceptance expected-red --clear``'s
4412
+ ``details["test_ids"]`` so a merge-queue-triggered clear is just as
4413
+ correlatable back to specific stuck tests as a CLI-triggered one.
4404
4414
 
4405
4415
  Reuses the exact API-only lookup ``coord.acceptance.
4406
4416
  clear_expected_red_via_pr`` already performs on the success path —
4407
4417
  best-effort/read-only like the rest of this sweep: any lookup failure
4408
4418
  (unreachable API, older ``gh_ops`` stub missing the list/get methods)
4409
- reads as "not in scope", matching :func:`coord.acceptance.
4419
+ reads as "nothing recorded", matching :func:`coord.acceptance.
4410
4420
  find_ms_manifest_for_issue_via_api`'s own fail-soft posture.
4411
4421
  """
4412
4422
  from coord.acceptance import find_ms_manifest_for_issue_via_api # noqa: PLC0415
@@ -4416,11 +4426,59 @@ def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
4416
4426
  entry.repo_github, entry.target_branch, entry.issue_number, gh_ops=gh_ops,
4417
4427
  )
4418
4428
  except Exception: # noqa: BLE001 — best-effort, same posture as callers
4419
- return False
4429
+ return frozenset()
4420
4430
  if found is None:
4421
- return False
4431
+ return frozenset()
4422
4432
  _path, _text, _blob_sha, data = found
4423
- return bool(data.expected_red.get(entry.issue_number))
4433
+ return frozenset(data.expected_red.get(entry.issue_number, frozenset()))
4434
+
4435
+
4436
+ def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
4437
+ """Whether *entry*'s issue has at least one ``expected_red`` entry
4438
+ recorded against it. See :func:`_expected_red_ids_for_entry` for why
4439
+ this scope check exists."""
4440
+ return bool(_expected_red_ids_for_entry(entry, gh_ops))
4441
+
4442
+
4443
+ def _record_expected_red_audit(
4444
+ entry: QueuedMerge,
4445
+ event_type: str,
4446
+ message: str,
4447
+ *,
4448
+ test_ids: frozenset[str] | None = None,
4449
+ ) -> None:
4450
+ """#2266: durable half of an `expected_red` clear/skip/failure — a
4451
+ `MergeEvent` alone only reaches the operator as a `coord merge` output
4452
+ line that scrolls past (issue #2266's framing: "nothing durable,
4453
+ nothing re-checked"). ``record_audit`` gives the same outcomes
4454
+ (cleared, skipped for one of two distinct reasons, pending retry, or
4455
+ attempted-and-failed) a queryable row (`coord audit` / `query_audit_log`)
4456
+ so a repo with a stuck registry is discoverable without re-reading
4457
+ merge output. Best-effort like every other audit call site in this
4458
+ module — ``record_audit`` itself never raises.
4459
+
4460
+ *test_ids*, when given, lands in ``details["test_ids"]`` — matching the
4461
+ CLI path's (`coord.commands.acceptance._clear_stuck_expected_red`)
4462
+ audit payload, per #2266 review non-blocking finding: without it,
4463
+ merge-queue-triggered audit rows were harder to correlate back to the
4464
+ specific stuck test ids than CLI-triggered ones.
4465
+ """
4466
+ details: dict[str, object] = {
4467
+ "pr_number": entry.pr_number, "target_branch": entry.target_branch,
4468
+ }
4469
+ if test_ids:
4470
+ details["test_ids"] = sorted(test_ids)
4471
+ record_audit(
4472
+ tier="business",
4473
+ category="acceptance",
4474
+ event_type=event_type,
4475
+ actor="system",
4476
+ summary=f"{entry.repo_name}#{entry.issue_number}: {message}",
4477
+ repo=entry.repo_name,
4478
+ issue=entry.issue_number,
4479
+ assignment_id=entry.assignment_id,
4480
+ details=details,
4481
+ )
4424
4482
 
4425
4483
 
4426
4484
  def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> MergeEvent | None:
@@ -4462,21 +4520,29 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
4462
4520
  )
4463
4521
  acceptance_state = getattr(work, "acceptance_state", None)
4464
4522
  if acceptance_state != "passed":
4465
- if not _issue_has_expected_red_entries(entry, gh_ops):
4523
+ ids = _expected_red_ids_for_entry(entry, gh_ops)
4524
+ if not ids:
4466
4525
  # Not in scope for the oracle loop at all — the pre-#2199
4467
4526
  # silent no-op is still correct here, not a regression (see
4468
4527
  # the docstring above and #2199 review finding 2).
4469
4528
  return None
4470
- return MergeEvent(
4471
- entry, "expected_red_clear_skipped_no_acceptance",
4529
+ msg = (
4472
4530
  f"no passing trust-gate verdict recorded on {work.assignment_id} "
4473
4531
  f"(acceptance_state={acceptance_state!r}) — the external `coord "
4474
4532
  "acceptance record` re-run either never happened or did not "
4475
4533
  "pass; skipping expected_red clear. Run `coord acceptance "
4476
4534
  f"record --repo {entry.repo_name} --issue {entry.issue_number} "
4477
4535
  "--sha <merged sha>` by hand, or re-drive the issue, to clear "
4478
- "any listed entries.",
4536
+ "any listed entries."
4537
+ )
4538
+ # #2266: distinct from the SHA-mismatch guard below — "acceptance
4539
+ # never recorded" and "recorded SHA is stale" are different
4540
+ # problems with different fixes, so they get distinct event types
4541
+ # rather than reaching the operator as the same silence.
4542
+ _record_expected_red_audit(
4543
+ entry, "expected_red_clear_skipped_no_acceptance", msg, test_ids=ids,
4479
4544
  )
4545
+ return MergeEvent(entry, "expected_red_clear_skipped_no_acceptance", msg)
4480
4546
  acceptance_sha = getattr(work, "acceptance_sha", None)
4481
4547
  if acceptance_sha is None or acceptance_sha != entry.branch_head_sha:
4482
4548
  # The recorded trust-gate verdict isn't for the exact commit that
@@ -4486,20 +4552,56 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
4486
4552
  # fresh SHA and this issue's fix merges again... though ordinarily
4487
4553
  # a merge only happens once per issue, so a mismatch here more
4488
4554
  # likely means acceptance was simply never recorded for this SHA.
4489
- return MergeEvent(
4490
- entry, "expected_red_clear_skipped",
4555
+ msg = (
4491
4556
  "acceptance_sha does not match the merged commit — skipping "
4492
4557
  "expected_red clear (re-run `coord acceptance record` against "
4493
- "the merged SHA if entries should have cleared)",
4558
+ "the merged SHA if entries should have cleared)"
4494
4559
  )
4560
+ _record_expected_red_audit(
4561
+ entry, "expected_red_clear_skipped_sha_mismatch", msg,
4562
+ test_ids=_expected_red_ids_for_entry(entry, gh_ops),
4563
+ )
4564
+ return MergeEvent(entry, "expected_red_clear_skipped", msg)
4495
4565
 
4496
- from coord.acceptance import clear_expected_red_via_pr # noqa: PLC0415
4566
+ from coord.acceptance import ( # noqa: PLC0415
4567
+ classify_expected_red_clear_result,
4568
+ clear_expected_red_via_pr,
4569
+ )
4497
4570
 
4571
+ # Captured *before* the clear attempt: a successful clear edits the
4572
+ # manifest, so looking this up afterwards would just find the ids the
4573
+ # clear itself just removed (#2266 review non-blocking finding).
4574
+ ids = _expected_red_ids_for_entry(entry, gh_ops)
4498
4575
  msg = clear_expected_red_via_pr(
4499
4576
  entry.repo_github, entry.repo_name, entry.target_branch, entry.issue_number,
4500
4577
  gh_ops=gh_ops,
4501
4578
  )
4502
- return MergeEvent(entry, "expected_red_clear", msg)
4579
+ # #2266 review (blocking finding 1): a binary "did the message start
4580
+ # with 'cleared expected_red'" conflated a genuine failure with "there
4581
+ # was nothing to clear in the first place" — the *common* case for an
4582
+ # ordinary oracle-loop merge whose issue was never part of a
4583
+ # deliberately-red slice. `classify_expected_red_clear_result` (shared
4584
+ # with the CLI `--clear` path, review blocking finding 2) tells those
4585
+ # apart; the "no_op" case is reported back via `MergeEvent` for `coord
4586
+ # merge` output but never gets a durable audit row — recording one for
4587
+ # every ordinary passing merge would drown the genuinely actionable
4588
+ # `expected_red_clear_failed` rows this audit trail exists to surface.
4589
+ status = classify_expected_red_clear_result(msg)
4590
+ if status == "no_op":
4591
+ return MergeEvent(entry, "expected_red_clear_noop", msg)
4592
+ event_type = {
4593
+ "cleared": "expected_red_clear",
4594
+ "pending_retry": "expected_red_clear_pending",
4595
+ "failed": "expected_red_clear_failed",
4596
+ }[status]
4597
+ # #2266 review (non-blocking finding): `clear_expected_red_via_pr`
4598
+ # never raises — every genuine failure degrades to a "warning: ..."
4599
+ # string. Make that durable too, not just a merge-output line: a
4600
+ # repeated `expected_red_clear_failed` for the same issue is exactly
4601
+ # the signal `coord acceptance expected-red --clear` (the re-fire
4602
+ # path) exists for.
4603
+ _record_expected_red_audit(entry, event_type, msg, test_ids=ids)
4604
+ return MergeEvent(entry, event_type, msg)
4503
4605
 
4504
4606
 
4505
4607
  def process(