code-coordinator 0.5.71__tar.gz → 0.5.73__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 (818) hide show
  1. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/dispatch.py +98 -0
  7. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/status.py +74 -5
  8. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/graph_health.py +83 -4
  9. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/graph.py +55 -6
  10. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/conftest.py +18 -0
  11. code_coordinator-0.5.73/tests/test_cli_assign_repo_drift_2219.py +240 -0
  12. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_diagnose_graph.py +91 -0
  13. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_mismatch_1712.py +100 -0
  14. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_graph_health.py +79 -0
  15. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_checks.py +59 -1
  16. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_cli_graph.py +3 -1
  17. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_incident_regression.py +4 -2
  18. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/cargo-test.yml +0 -0
  29. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/release-tui.yml +0 -0
  31. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/test.yml +0 -0
  32. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.gitignore +0 -0
  33. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/CLAUDE.md +0 -0
  34. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/GOAL.md +0 -0
  35. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/LICENSE +0 -0
  36. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/MANIFEST.in +0 -0
  37. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/README.md +0 -0
  38. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/dependency_links.txt +0 -0
  39. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/entry_points.txt +0 -0
  40. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/requires.txt +0 -0
  41. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/top_level.txt +0 -0
  42. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/__init__.py +0 -0
  43. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/_board_mapping.py +0 -0
  44. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/acceptance.py +0 -0
  45. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/audit.py +0 -0
  53. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/auto_loop.py +0 -0
  54. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_bool_guard.py +0 -0
  55. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/client.py +0 -0
  66. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/acceptance.py +0 -0
  69. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/agent_ops.py +0 -0
  70. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/audit.py +0 -0
  71. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/lifecycle.py +0 -0
  79. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/config.py +0 -0
  95. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/conflict_fix.py +0 -0
  96. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dao.py +0 -0
  97. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/__init__.py +0 -0
  98. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/fixture.py +0 -0
  99. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/index.html +0 -0
  100. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/server.py +0 -0
  101. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/terminal.py +0 -0
  102. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/.gitignore +0 -0
  103. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/components.json +0 -0
  104. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  105. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  106. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  107. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  108. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  109. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  110. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  111. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  112. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  113. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/index.html +0 -0
  114. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  115. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/sw.js +0 -0
  116. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  117. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  118. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  119. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  120. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  121. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  122. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  123. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  124. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  125. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  126. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/eslint.config.js +0 -0
  127. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/index.html +0 -0
  128. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  129. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/package-lock.json +0 -0
  130. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/package.json +0 -0
  131. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  132. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.config.ts +0 -0
  133. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/postcss.config.js +0 -0
  134. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  135. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  136. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  137. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/App.tsx +0 -0
  138. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/client.ts +0 -0
  139. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  140. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  141. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  142. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  143. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  144. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  145. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  146. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  147. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  148. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  149. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  150. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  151. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  152. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  153. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  154. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  155. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  156. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  157. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  158. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  159. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  160. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  161. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  162. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  163. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  164. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  165. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  166. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  167. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  168. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  169. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  170. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  171. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  172. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  173. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  174. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/index.css +0 -0
  175. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  176. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  177. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/main.tsx +0 -0
  178. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  179. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  180. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  181. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  182. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  183. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  184. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  185. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  186. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  187. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  188. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  189. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  190. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  191. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  192. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  193. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  194. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  195. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  196. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  197. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  198. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  199. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  200. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  201. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tailwind.config.js +0 -0
  202. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.json +0 -0
  203. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  204. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/vite.config.ts +0 -0
  205. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/db.py +0 -0
  206. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dead_end.py +0 -0
  207. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/README.md +0 -0
  208. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-agent.service +0 -0
  209. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.service +0 -0
  210. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.sh +0 -0
  211. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.timer +0 -0
  212. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.service +0 -0
  213. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.timer +0 -0
  214. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-notify.service +0 -0
  215. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-notify.timer +0 -0
  216. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.service +0 -0
  217. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.timer +0 -0
  218. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.service +0 -0
  219. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.timer +0 -0
  220. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-serve.service +0 -0
  221. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.service +0 -0
  222. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.timer +0 -0
  223. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web.service +0 -0
  224. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy_manifest.py +0 -0
  225. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy_units.py +0 -0
  226. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deps.py +0 -0
  227. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/diagnose.py +0 -0
  228. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dispatch.py +0 -0
  229. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dist_name.py +0 -0
  230. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive.py +0 -0
  231. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive_queue.py +0 -0
  232. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive_state.py +0 -0
  233. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/events.py +0 -0
  234. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/failure_class.py +0 -0
  235. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/filelock.py +0 -0
  236. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/fleet_config_health.py +0 -0
  237. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/freshness.py +0 -0
  238. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_a.py +0 -0
  239. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_b.py +0 -0
  240. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_snapshot.py +0 -0
  241. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gates.py +0 -0
  242. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/github_ops.py +0 -0
  243. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/goal.py +0 -0
  244. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/__init__.py +0 -0
  245. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/aggregate.py +0 -0
  246. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/__init__.py +0 -0
  247. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/agent_install.py +0 -0
  248. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/cargo_targets.py +0 -0
  249. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/claude_binary.py +0 -0
  250. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/deploy_lane_facts.py +0 -0
  251. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/disk.py +0 -0
  252. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_board.py +0 -0
  253. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  254. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_phantom.py +0 -0
  255. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_unit_drift.py +0 -0
  256. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/plan_usage.py +0 -0
  257. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/repo_state.py +0 -0
  258. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/spawned_coord.py +0 -0
  259. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/timer_active.py +0 -0
  260. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/toolchain.py +0 -0
  261. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/unit_drift.py +0 -0
  262. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/unit_enablement.py +0 -0
  263. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/worktrees.py +0 -0
  264. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/cli.py +0 -0
  265. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/context.py +0 -0
  266. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/fleet_snapshot.py +0 -0
  267. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/models.py +0 -0
  268. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/pypi.py +0 -0
  269. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/registry.py +0 -0
  270. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/render.py +0 -0
  271. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/units.py +0 -0
  272. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/hooks.py +0 -0
  273. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/housekeeping.py +0 -0
  274. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/interactive.py +0 -0
  275. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/issue_store.py +0 -0
  276. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/liveness_auditor.py +0 -0
  277. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/machine_pause.py +0 -0
  278. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/merge_queue.py +0 -0
  279. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_chat.py +0 -0
  280. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_dispatch.py +0 -0
  281. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_gate.py +0 -0
  282. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_order.py +0 -0
  283. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/mock_author.py +0 -0
  284. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/models.py +0 -0
  285. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/network.py +0 -0
  286. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/new_issue_chat.py +0 -0
  287. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/__init__.py +0 -0
  288. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/baseline.py +0 -0
  289. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/cli.py +0 -0
  290. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/collect.py +0 -0
  291. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/digest.py +0 -0
  292. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/models.py +0 -0
  293. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/predicate.py +0 -0
  294. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/service.py +0 -0
  295. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/store.py +0 -0
  296. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/transport.py +0 -0
  297. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notify.py +0 -0
  298. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/openapi.py +0 -0
  299. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/overlap_fence.py +0 -0
  300. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/parentage.py +0 -0
  301. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/parentage_github.py +0 -0
  302. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/pipeline.py +0 -0
  303. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/plan_parser.py +0 -0
  304. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/plans.py +0 -0
  305. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/platform_paths.py +0 -0
  306. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/portal_bridge.py +0 -0
  307. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/pr_body_lint.py +0 -0
  308. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/prereqs.py +0 -0
  309. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/progress.py +0 -0
  310. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/__init__.py +0 -0
  311. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/base.py +0 -0
  312. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/claude.py +0 -0
  313. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/claude_pty.py +0 -0
  314. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/opencode.py +0 -0
  315. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/reconcile.py +0 -0
  316. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/refine_chat.py +0 -0
  317. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_cordon.py +0 -0
  318. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_propagate.py +0 -0
  319. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_verify.py +0 -0
  320. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_window.py +0 -0
  321. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/reports.py +0 -0
  322. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/revalidate.py +0 -0
  323. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/review.py +0 -0
  324. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/scorecard.py +0 -0
  325. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/serve_app.py +0 -0
  326. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/skills/update-issue/SKILL.md +0 -0
  327. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/smoke.py +0 -0
  328. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/spend_ceiling.py +0 -0
  329. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/split_work.py +0 -0
  330. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/stage_projection.py +0 -0
  331. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/state.py +0 -0
  332. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_author.py +0 -0
  333. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_chat.py +0 -0
  334. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_orchestrator.py +0 -0
  335. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_report.py +0 -0
  336. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/tui_release.py +0 -0
  337. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage.py +0 -0
  338. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage_limits.py +0 -0
  339. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage_rollup.py +0 -0
  340. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/worker_events.py +0 -0
  341. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coordinator.example.yml +0 -0
  342. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-agent.service +0 -0
  343. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.service +0 -0
  344. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.sh +0 -0
  345. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.timer +0 -0
  346. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-drive-queue.service +0 -0
  347. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-drive-queue.timer +0 -0
  348. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-notify.service +0 -0
  349. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-notify.timer +0 -0
  350. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-propagate.service +0 -0
  351. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-propagate.timer +0 -0
  352. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-window.service +0 -0
  353. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-window.timer +0 -0
  354. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-serve.service +0 -0
  355. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.service +0 -0
  356. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.sh +0 -0
  357. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.timer +0 -0
  358. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-rollback.sh +0 -0
  359. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web.service +0 -0
  360. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/node-shim.sh +0 -0
  361. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/AGENT_OPERATIONS.md +0 -0
  362. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ARCHITECTURE.md +0 -0
  363. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ARCH_SECURITY_GATES.md +0 -0
  364. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/COCKPIT.md +0 -0
  365. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CONTROL_CENTER.md +0 -0
  366. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CROSS_PLATFORM.md +0 -0
  367. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CUSTOMER_PORTAL.md +0 -0
  368. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/DRIVE_QUEUE.md +0 -0
  369. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/EPHEMERAL_WORKERS.md +0 -0
  370. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/FORGE_MIGRATION.md +0 -0
  371. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/GRAPHIFY_SETUP.md +0 -0
  372. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ISSUE_GUIDANCE.md +0 -0
  373. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/MAC_MINI.md +0 -0
  374. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  375. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/NOTIFIER.md +0 -0
  376. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/OPENCODE_VERIFICATION.md +0 -0
  377. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/OPERATING_GOTCHAS.md +0 -0
  378. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ORACLE_LOOP.md +0 -0
  379. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PHONE_WEBAPP.md +0 -0
  380. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PIPELINE_V2.md +0 -0
  381. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PLATFORM_EVOLUTION.md +0 -0
  382. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/SECOND_BACKEND.md +0 -0
  383. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/STORE_SERVICE.md +0 -0
  384. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  385. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/WEB_CONTROL_CENTER.md +0 -0
  386. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/README.md +0 -0
  387. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/_tokens.css +0 -0
  388. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/issue-detail.html +0 -0
  389. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-narrow.html +0 -0
  390. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-wide.html +0 -0
  391. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/graphify-out/.gitignore +0 -0
  392. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/install-agent.sh +0 -0
  393. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/pyproject.toml +0 -0
  394. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/audit_review_verdict_overrides.py +0 -0
  395. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  396. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/build-worker-image.sh +0 -0
  397. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/coordinator-machine.py +0 -0
  398. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/epic-down.sh +0 -0
  399. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/epic-up.sh +0 -0
  400. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/preflight.sh +0 -0
  401. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/provision-worker.sh +0 -0
  402. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  403. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  404. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/verify-github-token.sh +0 -0
  405. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/drive-batch.sh +0 -0
  408. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/gen_board_fixture.py +0 -0
  409. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/next_release_tag.py +0 -0
  410. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/run_tests_in_populated_home.sh +0 -0
  411. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/run_tests_without_gh.sh +0 -0
  412. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/smoke_437_interactive.py +0 -0
  413. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_878_review_capture.py +0 -0
  414. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_release_published.py +0 -0
  415. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_release_wheel.py +0 -0
  416. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/setup.cfg +0 -0
  417. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/SMOKE_SET.md +0 -0
  418. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/__init__.py +0 -0
  419. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  420. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/contract.md +0 -0
  421. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/manifest.yml +0 -0
  422. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  423. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  424. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  425. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  426. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/conftest.py +0 -0
  427. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/contract.md +0 -0
  428. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/manifest.yml +0 -0
  429. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  430. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  431. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/contract.md +0 -0
  432. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/manifest.yml +0 -0
  433. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  434. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  435. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  436. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  437. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  438. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  439. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  440. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  441. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  442. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  443. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/contract.md +0 -0
  444. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  445. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  446. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/manifest.yml +0 -0
  447. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  448. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/tsconfig.json +0 -0
  449. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  450. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-basic.json +0 -0
  451. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  452. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  453. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  454. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/all_pass.json +0 -0
  455. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  456. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/mixed_fail.json +0 -0
  457. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  458. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  459. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/skip.json +0 -0
  460. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/truncated.json +0 -0
  461. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  462. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  463. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  464. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  465. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  466. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  467. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  468. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_acceptance.py +0 -0
  470. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_acceptance_drivers.py +0 -0
  471. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent.py +0 -0
  472. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_api_error.py +0 -0
  473. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_app.py +0 -0
  474. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_branch_base.py +0 -0
  475. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_branch_capture.py +0 -0
  476. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_config_free_1712.py +0 -0
  477. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_deploy_units_endpoint.py +0 -0
  478. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_dirty_worktree.py +0 -0
  479. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_graph_self_heal.py +0 -0
  480. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_health_h3.py +0 -0
  481. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_idle_restart.py +0 -0
  482. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_push_failure.py +0 -0
  483. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_reap.py +0 -0
  484. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_repos_and_pull.py +0 -0
  485. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_restart_services_endpoint.py +0 -0
  486. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_startup_diagnostics.py +0 -0
  487. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_update.py +0 -0
  488. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_update_bluegreen.py +0 -0
  489. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_usage_limit.py +0 -0
  490. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_zero_commit.py +0 -0
  491. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ambient_home_isolation.py +0 -0
  492. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_approve_reject_plan.py +0 -0
  493. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_approve_usage_gate.py +0 -0
  494. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_assignment_already_recorded_daemon.py +0 -0
  495. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_log.py +0 -0
  496. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_outcome.py +0 -0
  497. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_query.py +0 -0
  498. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_auto_loop.py +0 -0
  499. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_auto_release_publish_2035.py +0 -0
  500. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_base_checkout_restore.py +0 -0
  501. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_cap_762.py +0 -0
  502. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_fixture.py +0 -0
  503. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_read_path.py +0 -0
  504. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_service.py +0 -0
  505. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_state.py +0 -0
  506. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_wire.py +0 -0
  507. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_brain.py +0 -0
  508. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_branch_model.py +0 -0
  509. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_bug_intake.py +0 -0
  510. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_build_worker_image_env_update.py +0 -0
  511. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cargo_cache.py +0 -0
  512. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_acceptance_gate_1950.py +0 -0
  513. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_parity_2091.py +0 -0
  514. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_store.py +0 -0
  515. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_claim.py +0 -0
  516. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_acceptance.py +0 -0
  517. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign.py +0 -0
  518. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  519. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_remote.py +0 -0
  520. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_provider.py +0 -0
  521. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_audit.py +0 -0
  522. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_chat_continue.py +0 -0
  523. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_diagnose_config_provenance.py +0 -0
  524. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor.py +0 -0
  525. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_free_1801.py +0 -0
  526. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_drive.py +0 -0
  527. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_drive_queue.py +0 -0
  528. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_escalate.py +0 -0
  529. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_fix_headless_review.py +0 -0
  530. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_gate_a.py +0 -0
  531. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_install_drift.py +0 -0
  532. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_install_skills.py +0 -0
  533. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_issue_create_label.py +0 -0
  534. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_issue_reopen.py +0 -0
  535. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_merge.py +0 -0
  536. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_assign.py +0 -0
  537. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_capture.py +0 -0
  538. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_chat_add_child.py +0 -0
  539. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_dispatch.py +0 -0
  540. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_b.py +0 -0
  541. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_c.py +0 -0
  542. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_order.py +0 -0
  543. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  544. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_ship.py +0 -0
  545. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_network.py +0 -0
  546. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_new_issue_chat.py +0 -0
  547. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_plans.py +0 -0
  548. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_portal.py +0 -0
  549. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_pull_artifact.py +0 -0
  550. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_queue.py +0 -0
  551. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_reattach_sessions.py +0 -0
  552. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_refine_board.py +0 -0
  553. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_preflight.py +0 -0
  554. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_propagate.py +0 -0
  555. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_window.py +0 -0
  556. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_scorecard.py +0 -0
  557. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_set_review_findings.py +0 -0
  558. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_advisory_terminal.py +0 -0
  559. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_merge_queue.py +0 -0
  560. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_provider.py +0 -0
  561. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_review_finalizing.py +0 -0
  562. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_test_failed_tag.py +0 -0
  563. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_usage_limit.py +0 -0
  564. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_sync_comments_873.py +0 -0
  565. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_test_plan.py +0 -0
  566. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_track.py +0 -0
  567. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_tui_update.py +0 -0
  568. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_wait.py +0 -0
  569. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_client_base_install.py +0 -0
  570. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_comments.py +0 -0
  571. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_completion_summary.py +0 -0
  572. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config.py +0 -0
  573. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_acceptance.py +0 -0
  574. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_audit.py +0 -0
  575. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_pricing.py +0 -0
  576. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_usage_gate.py +0 -0
  577. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_conflict_fix.py +0 -0
  578. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_conflict_fix_semantic.py +0 -0
  579. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test.py +0 -0
  580. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_baseline.py +0 -0
  581. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_routing.py +0 -0
  582. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_toolchain.py +0 -0
  583. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_web_sse_restart_live.py +0 -0
  584. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coordinator_machine.py +0 -0
  585. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cross_platform_imports.py +0 -0
  586. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard.py +0 -0
  587. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_fixture.py +0 -0
  588. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_terminal.py +0 -0
  589. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_terminal_live.py +0 -0
  590. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_db.py +0 -0
  591. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dead_end.py +0 -0
  592. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_db_backup.py +0 -0
  593. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_dist.py +0 -0
  594. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_rollback.py +0 -0
  595. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_drive_queue_unit.py +0 -0
  596. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_manifest.py +0 -0
  597. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_units_lane.py +0 -0
  598. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_web_unit.py +0 -0
  599. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deps.py +0 -0
  600. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_diagnose.py +0 -0
  601. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dispatch.py +0 -0
  602. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dispatch_target_validation.py +0 -0
  603. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dist_name.py +0 -0
  604. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_done_housekeeping.py +0 -0
  605. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive.py +0 -0
  606. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_queue.py +0 -0
  607. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_state.py +0 -0
  608. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_tmux.py +0 -0
  609. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_capability_detection.py +0 -0
  610. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  611. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_image_provenance.py +0 -0
  612. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_errors.py +0 -0
  613. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_events.py +0 -0
  614. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_failure_class.py +0 -0
  615. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_filelock.py +0 -0
  616. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  617. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fix_of_force_override.py +0 -0
  618. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_config_health.py +0 -0
  619. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_health_probes.py +0 -0
  620. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_health_snapshot.py +0 -0
  621. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_freshness.py +0 -0
  622. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_a.py +0 -0
  623. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_b.py +0 -0
  624. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_snapshot_staleness.py +0 -0
  625. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gates.py +0 -0
  626. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_generated_types_fixture.py +0 -0
  627. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_github_ops.py +0 -0
  628. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_goal.py +0 -0
  629. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_handoff.py +0 -0
  630. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_cli.py +0 -0
  631. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_config.py +0 -0
  632. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_context.py +0 -0
  633. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_deploy_lane_facts.py +0 -0
  634. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_pypi.py +0 -0
  635. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_registry.py +0 -0
  636. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_timer_active.py +0 -0
  637. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_toolchain.py +0 -0
  638. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_unit_drift.py +0 -0
  639. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_unit_enablement.py +0 -0
  640. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_hooks.py +0 -0
  641. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_human_attended_437.py +0 -0
  642. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_init.py +0 -0
  643. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_integration.py +0 -0
  644. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_briefing_echo.py +0 -0
  645. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_prefill_state.py +0 -0
  646. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_session_relaunch.py +0 -0
  647. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_test_verdict_backstop.py +0 -0
  648. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_token_attribution.py +0 -0
  649. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_worktree.py +0 -0
  650. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_issue_store_seam.py +0 -0
  651. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_liveness_auditor.py +0 -0
  652. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_liveness_notify.py +0 -0
  653. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_machine_pause.py +0 -0
  654. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_merge_queue.py +0 -0
  655. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_merge_verify.py +0 -0
  656. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_chat.py +0 -0
  657. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_dispatch.py +0 -0
  658. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_gate.py +0 -0
  659. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_order.py +0 -0
  660. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_seam.py +0 -0
  661. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_mock_author.py +0 -0
  662. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_model_tiering.py +0 -0
  663. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_models.py +0 -0
  664. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_models_config_labels.py +0 -0
  665. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_needs_attention.py +0 -0
  666. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_network.py +0 -0
  667. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_new_issue_chat.py +0 -0
  668. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_next_release_tag.py +0 -0
  669. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_no_direct_gh_calls.py +0 -0
  670. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_node_shim.py +0 -0
  671. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_baseline.py +0 -0
  672. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_cli.py +0 -0
  673. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_collect.py +0 -0
  674. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_config.py +0 -0
  675. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_drive_seam.py +0 -0
  676. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_isolation.py +0 -0
  677. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_predicate.py +0 -0
  678. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_quiet_hours.py +0 -0
  679. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_service.py +0 -0
  680. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notify.py +0 -0
  681. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notify_drain.py +0 -0
  682. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_openapi.py +0 -0
  683. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_operational_defaults.py +0 -0
  684. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_overlap_fence.py +0 -0
  685. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_packaged_deploy_units.py +0 -0
  686. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_parentage.py +0 -0
  687. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_paste_landed.py +0 -0
  688. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_pipeline.py +0 -0
  689. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_approve_plan_command.py +0 -0
  690. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_pr_command.py +0 -0
  691. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_review_command.py +0 -0
  692. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_only.py +0 -0
  693. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_parser.py +0 -0
  694. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_platform_paths.py +0 -0
  695. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_portal_bridge.py +0 -0
  696. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_portal_config.py +0 -0
  697. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_pr_body_lint.py +0 -0
  698. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_prereqs.py +0 -0
  699. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_production_db_guard.py +0 -0
  700. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_progress.py +0 -0
  701. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_provider_seam.py +0 -0
  702. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers.py +0 -0
  703. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers_config_labels.py +0 -0
  704. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers_pty.py +0 -0
  705. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_quiet_hours.py +0 -0
  706. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_quiet_hours_store_2146.py +0 -0
  707. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reap_merged_sessions.py +0 -0
  708. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reap_stale_interactive_tick.py +0 -0
  709. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_branch.py +0 -0
  710. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_completions.py +0 -0
  711. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_merges.py +0 -0
  712. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_usage_limit_done.py +0 -0
  713. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_refine_chat.py +0 -0
  714. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_cordon_2101.py +0 -0
  715. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_propagate.py +0 -0
  716. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_unified_1242.py +0 -0
  717. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_verify.py +0 -0
  718. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_window.py +0 -0
  719. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_remote_auto_prune.py +0 -0
  720. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_remote_interactive_reaper.py +0 -0
  721. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_report_result_push.py +0 -0
  722. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reports.py +0 -0
  723. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry.py +0 -0
  724. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry_advisory_1606.py +0 -0
  725. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry_type_1636.py +0 -0
  726. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_revalidate.py +0 -0
  727. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review.py +0 -0
  728. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_end_review_without_verdict.py +0 -0
  729. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_parse_failure_diagnostic.py +0 -0
  730. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_reaffirm.py +0 -0
  731. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_state.py +0 -0
  732. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_backstop.py +0 -0
  733. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_override_audit.py +0 -0
  734. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_relay.py +0 -0
  735. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_zero_commits.py +0 -0
  736. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_scoped_review_wiring.py +0 -0
  737. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_scorecard.py +0 -0
  738. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_serve.py +0 -0
  739. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_serve_app_board_trim.py +0 -0
  740. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_session.py +0 -0
  741. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_slice_issue_attribution.py +0 -0
  742. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke.py +0 -0
  743. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke_live_checkout_restore.py +0 -0
  744. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke_workflow.py +0 -0
  745. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_spend_ceiling.py +0 -0
  746. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_spend_ceiling_coordinator.py +0 -0
  747. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_split.py +0 -0
  748. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_split_work.py +0 -0
  749. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stage_projection.py +0 -0
  750. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stalled_pipeline.py +0 -0
  751. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_state.py +0 -0
  752. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_state_review_findings_daemon.py +0 -0
  753. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_status_fleet_footer.py +0 -0
  754. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stop_1567.py +0 -0
  755. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stuck.py +0 -0
  756. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_terminal_command.py +0 -0
  757. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_author.py +0 -0
  758. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_chat.py +0 -0
  759. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_orchestrator.py +0 -0
  760. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_report.py +0 -0
  761. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_verdict_parsing.py +0 -0
  762. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_verdict_transcript_floor.py +0 -0
  763. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_board_audit.py +0 -0
  764. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_config_load_1080.py +0 -0
  765. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_daemon_routing_906.py +0 -0
  766. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_tmux_host.py +0 -0
  767. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_tmux_session.py +0 -0
  768. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_transcript_floor.py +0 -0
  769. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage.py +0 -0
  770. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage_limits.py +0 -0
  771. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage_rollup.py +0 -0
  772. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_venv_live_install_2121.py +0 -0
  773. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_version_single_source.py +0 -0
  774. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_watch.py +0 -0
  775. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_events.py +0 -0
  776. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_image_pin_sync.py +0 -0
  777. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_safety.py +0 -0
  778. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_test_scoping.py +0 -0
  779. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worktree.py +0 -0
  780. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  781. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/Cargo.lock +0 -0
  782. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/Cargo.toml +0 -0
  783. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/cargo-config-local-quadraui.toml.example +0 -0
  784. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/audit.rs +0 -0
  785. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/chat.rs +0 -0
  786. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/data.rs +0 -0
  787. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/dialogs.rs +0 -0
  788. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/drive.rs +0 -0
  789. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/drive_queue.rs +0 -0
  790. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/escalation.rs +0 -0
  791. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/events.rs +0 -0
  792. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fixtures.rs +0 -0
  793. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_health.rs +0 -0
  794. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_sessions.rs +0 -0
  795. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_terminals.rs +0 -0
  796. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/format.rs +0 -0
  797. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/milestone_dag.rs +0 -0
  798. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/mod.rs +0 -0
  799. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/msv.rs +0 -0
  800. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/pipeline.rs +0 -0
  801. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/plans.rs +0 -0
  802. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/render.rs +0 -0
  803. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/reports.rs +0 -0
  804. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/sessions.rs +0 -0
  805. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/settings_ui.rs +0 -0
  806. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/sidebar.rs +0 -0
  807. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/terminal.rs +0 -0
  808. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/tests.rs +0 -0
  809. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/types.rs +0 -0
  810. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/workspace.rs +0 -0
  811. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/bin/gtk.rs +0 -0
  812. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/commands.rs +0 -0
  813. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/lib.rs +0 -0
  814. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/main.rs +0 -0
  815. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/settings.rs +0 -0
  816. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/tests/acceptance.rs +0 -0
  817. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/tests/cli.rs +0 -0
  818. {code_coordinator-0.5.71 → code_coordinator-0.5.73}/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.71
3
+ Version: 0.5.73
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.71
3
+ Version: 0.5.73
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
@@ -459,6 +459,7 @@ tests/test_cli_assign.py
459
459
  tests/test_cli_assign_interactive_oracle_gate.py
460
460
  tests/test_cli_assign_interactive_remote.py
461
461
  tests/test_cli_assign_provider.py
462
+ tests/test_cli_assign_repo_drift_2219.py
462
463
  tests/test_cli_audit.py
463
464
  tests/test_cli_chat_continue.py
464
465
  tests/test_cli_diagnose_config_provenance.py
@@ -489,6 +489,7 @@
489
489
  "tests/test_cli_assign_interactive_oracle_gate.py",
490
490
  "tests/test_cli_assign_interactive_remote.py",
491
491
  "tests/test_cli_assign_provider.py",
492
+ "tests/test_cli_assign_repo_drift_2219.py",
492
493
  "tests/test_cli_audit.py",
493
494
  "tests/test_cli_chat_continue.py",
494
495
  "tests/test_cli_diagnose_config_provenance.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.71",
2
+ "tag": "0.5.73",
3
3
  "distance": 0,
4
- "node": "g61fe32cffef6c91f2bf3f8b2535b211f0c81996c",
4
+ "node": "g14e77699382902c886b02c14ee83a233c166d4cb",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -9,6 +9,7 @@ import dataclasses
9
9
  import socket
10
10
  import sys
11
11
  from pathlib import Path
12
+ from typing import TYPE_CHECKING
12
13
 
13
14
  import click
14
15
  import httpx
@@ -31,6 +32,9 @@ from coord.commands.dispatch_workers import (
31
32
  _dispatch_troubleshoot,
32
33
  )
33
34
 
35
+ if TYPE_CHECKING:
36
+ from coord.models import Machine
37
+
34
38
 
35
39
  def _stdin_is_tty() -> bool:
36
40
  """Seam over ``sys.stdin.isatty()`` — see ``_require_interactive_tty``
@@ -89,6 +93,88 @@ def _require_interactive_tty(dry_run: bool) -> None:
89
93
  )
90
94
 
91
95
 
96
+ def _repo_capability_refusal(
97
+ machine_obj: Machine, repo: str, *, timeout: float = 3.0
98
+ ) -> str | None:
99
+ """Cross-check *repo* against the target agent's LIVE ``/health`` repo
100
+ list, returning a refusal message when the two disagree — or ``None``
101
+ when they agree, the agent is unreachable, or the agent is config-free
102
+ (#2219).
103
+
104
+ ``assign()``'s ``machine_obj.can_work_on(repo)`` check (just above this
105
+ call site) only ever reads ``coordinator.yml`` — which the operator can
106
+ edit any time — never the agent process actually running on that
107
+ machine. A repo added to config after the agent started stays invisible
108
+ to it until a full ``systemctl --user restart coord-agent`` (there is no
109
+ partial re-read today). Every pre-flight surface an operator would
110
+ check before spending a dispatch reads config too: ``coord config``,
111
+ ``coord status``, and — worst of all — ``coord assign ... --dry-run``,
112
+ which is the documented way to sanity-check a dispatch before paying
113
+ for it. All three said this was fine while the live agent rejected it
114
+ outright, and a drive queue burned both retry attempts discovering that
115
+ by trial before landing terminally ``blocked`` (#2219). This is the
116
+ same ``/health`` read ``coord status``/``coord doctor`` already make
117
+ (``coord.network.check_machine``) — reused, not duplicated.
118
+
119
+ ``/health``'s ``repos`` field is NOT what ``AgentServer.assign()``
120
+ itself gates on, though — it's ``AgentServer._servable_repos()``'s
121
+ FILTERED list (``coord/agent.py``, #1527), which drops any repo with no
122
+ ``repo_paths`` entry or whose configured path is missing on disk.
123
+ ``assign()``'s own gate (``coord/agent.py``: ``if self.repos and
124
+ spec.repo_name not in self.repos``) checks the UNFILTERED
125
+ ``self.repos``. The two disagree exactly when a repo is configured on
126
+ that machine but degraded (``/health``'s ``degraded`` dict, #1527): in
127
+ that case ``assign()`` would NOT reject with "does not handle repo" —
128
+ it proceeds and fails later with the distinct "repo path does not
129
+ exist" — so this helper checks ``degraded`` FIRST and reports that
130
+ reason (with no restart advice, since restarting coord-agent cannot
131
+ repair a missing/misconfigured ``repo_paths`` entry) before ever
132
+ falling back to the "hasn't re-read config since *repo* was added"
133
+ story, which is only accurate when *repo* is absent from ``/health``
134
+ entirely — not merely degraded.
135
+
136
+ Deliberately narrow otherwise: only refuses when the agent is
137
+ reachable, ANSWERED with a real ``/health`` body, is not running
138
+ config-free (#1801 — a config-free agent's repos come from the dispatch
139
+ payload, not its own config, so an empty/mismatched list there is not a
140
+ capability gap), and either lists *repo* as degraded or published a
141
+ NON-empty repo list that plainly excludes it. Every other case
142
+ (offline, timeout, old agent with no ``repos`` key, empty list) falls
143
+ through to ``None`` — today's behavior, where the POST itself is left
144
+ to surface a real problem — so this never turns a transient network
145
+ hiccup into a new dispatch failure mode.
146
+ """
147
+ from coord.network import check_machine
148
+
149
+ status = check_machine(machine_obj, timeout=timeout)
150
+ if not status.is_online or status.health is None:
151
+ return None
152
+ health = status.health
153
+ if health.get("config_free"):
154
+ return None
155
+ degraded = health.get("degraded") or {}
156
+ if repo in degraded:
157
+ return (
158
+ f"{machine_obj.name!r} lists {repo!r} in coordinator.yml, and "
159
+ f"the live agent agrees it's configured, but the repo is "
160
+ f"DEGRADED there, not just unrefreshed: {degraded[repo]} "
161
+ f"(#1527). This is not the #2219 stale-config case — "
162
+ f"restarting coord-agent will not fix a missing or "
163
+ f"misconfigured repo_paths entry. Repair repo_paths[{repo!r}] "
164
+ f"on {machine_obj.name!r} instead, then retry."
165
+ )
166
+ live_repos = health.get("repos")
167
+ if not live_repos or repo in live_repos:
168
+ return None
169
+ return (
170
+ f"{machine_obj.name!r} rejected the assignment: this agent does "
171
+ f"not handle repo {repo!r} (supported: {live_repos}) — "
172
+ f"coordinator.yml lists it, but the live agent process hasn't "
173
+ f"re-read its config since {repo!r} was added (#2219). Restart "
174
+ f"coord-agent on {machine_obj.name!r} to pick it up, then retry."
175
+ )
176
+
177
+
92
178
  @click.command(help="Brain proposes assignments for idle machines.")
93
179
  @_CONFIG_OPTION
94
180
  @click.option("--dry-run", is_flag=True, help="Plan without saving proposals.")
@@ -951,6 +1037,18 @@ def assign(
951
1037
  )
952
1038
  sys.exit(2)
953
1039
 
1040
+ # #2219: config says this machine handles `repo` — but the LIVE agent
1041
+ # process may not (yet) agree, if `repo` was added to coordinator.yml
1042
+ # after that agent started. Refuse with the agent's real reason here,
1043
+ # before any claim/worktree/network work — including under --dry-run,
1044
+ # which is exactly the surface that used to green-light this. See
1045
+ # _repo_capability_refusal's docstring for the full rationale and what
1046
+ # it deliberately does NOT block on (offline/unreachable/config-free).
1047
+ capability_refusal = _repo_capability_refusal(machine_obj, repo)
1048
+ if capability_refusal is not None:
1049
+ click.echo(f"error: {capability_refusal}", err=True)
1050
+ sys.exit(2)
1051
+
954
1052
  # Refuse direct assignment to a paused machine — `coord pause` exists
955
1053
  # so the user can explicitly steer work away. If they meant to dispatch
956
1054
  # anyway they should `coord unpause` first. #1862: also refuses inside
@@ -765,6 +765,53 @@ def _health_vs_config_lines(machine, health: dict) -> list[tuple[bool, str]]:
765
765
  ))
766
766
  for repo, reason in sorted(degraded.items()):
767
767
  out.append((True, f" {repo}: {reason}"))
768
+ elif declared_repos and published_repos and not config_free:
769
+ # #2219: the ABOVE branch only fires when /health publishes NOTHING
770
+ # — it silently missed the partial-drift shape that actually bit
771
+ # stick-demo#1: a repo added to coordinator.yml after the agent
772
+ # process started stays off /health's list while everything ELSE
773
+ # the agent publishes (including all its OTHER repos) looks
774
+ # perfectly healthy. `coord config`/`coord status` both read
775
+ # config, so both still advertised it; only the live agent —
776
+ # and, at dispatch cost, the drive queue that burned both retry
777
+ # attempts on it — knew better.
778
+ #
779
+ # `published_repos` (``/health``'s ``repos``) is
780
+ # ``AgentServer._servable_repos()``'s FILTERED list (#1527) — it
781
+ # also drops any repo that IS configured on that machine but is
782
+ # DEGRADED (no ``repo_paths`` entry, or the configured path is
783
+ # missing on disk). A drifted repo that's actually degraded is not
784
+ # the #2219 stale-config story: `AgentServer.assign()` gates on the
785
+ # UNFILTERED `self.repos`, so it would still accept that repo and
786
+ # fail later with a distinct "repo path does not exist" error —
787
+ # restarting coord-agent cannot repair a missing/misconfigured
788
+ # `repo_paths` entry. Split on `degraded` so each drifted repo gets
789
+ # the accurate story and remedy.
790
+ drifted = [r for r in declared_repos if r not in published_repos]
791
+ stale = [r for r in drifted if r not in degraded]
792
+ if stale:
793
+ out.append((
794
+ True,
795
+ f" ✗ CRIT repos: coordinator.yml declares {declared_repos} "
796
+ f"but /health only advertises {published_repos} — {stale} "
797
+ "were added to config after this agent process started and "
798
+ "it hasn't re-read them; a dispatch to any of "
799
+ f"{stale} on this machine will be refused despite `coord "
800
+ "config`/`coord status` showing it as supported (#2219). "
801
+ "Restart coord-agent on this machine to pick it up.",
802
+ ))
803
+ for repo in drifted:
804
+ if repo in degraded:
805
+ out.append((
806
+ True,
807
+ f" ✗ CRIT repos: coordinator.yml declares {repo!r} for "
808
+ "this machine and the live agent agrees it's "
809
+ f"configured, but it's DEGRADED there, not just "
810
+ f"unrefreshed: {degraded[repo]} (#1527). This is not "
811
+ "the #2219 stale-config case — restarting coord-agent "
812
+ f"will not fix it; repair repo_paths[{repo!r}] on this "
813
+ "machine instead.",
814
+ ))
768
815
 
769
816
  return out
770
817
 
@@ -1464,6 +1511,15 @@ def _diagnose_graph_health(config_path: Path) -> None:
1464
1511
  checks ``core.hooksPath``, the one-time per-machine setting that decides
1465
1512
  whether worktrees on this box get a linked graph at all.
1466
1513
 
1514
+ #2211: also reports HEAD vs ``origin/<default_branch>``, alongside the
1515
+ existing graph-vs-HEAD comparison. The base checkout is fetched but
1516
+ never pulled by design (worktrees always branch from a fresh
1517
+ ``origin/<default>``, so a stale base never breaks dispatch) — which
1518
+ means a graph can match HEAD exactly while HEAD itself sits arbitrarily
1519
+ far behind the remote, and the graph-vs-HEAD check alone reports a clean
1520
+ ``✓ in sync`` for it. This never fetches or pulls; it only reads whatever
1521
+ ``origin/<default_branch>`` the last fetch left behind.
1522
+
1467
1523
  Local-machine only, same scope as ``--orphan-worktrees``: it inspects the
1468
1524
  checkouts named in ``coordinator.yml`` that actually exist here.
1469
1525
  """
@@ -1476,7 +1532,7 @@ def _diagnose_graph_health(config_path: Path) -> None:
1476
1532
  cfg = _load_config(config_path)
1477
1533
 
1478
1534
  seen: set[Path] = set()
1479
- checkouts: list[tuple[str, Path]] = []
1535
+ checkouts: list[tuple[str, Path, str]] = []
1480
1536
  for machine in cfg.machines:
1481
1537
  for repo_cfg in cfg.repos:
1482
1538
  rp = machine.repo_path(repo_cfg.name)
@@ -1486,16 +1542,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
1486
1542
  if path in seen or not (path / ".git").exists():
1487
1543
  continue
1488
1544
  seen.add(path)
1489
- checkouts.append((repo_cfg.name, path))
1545
+ checkouts.append((repo_cfg.name, path, repo_cfg.default_branch or "main"))
1490
1546
 
1491
1547
  if not checkouts:
1492
1548
  click.echo("no local checkouts from coordinator.yml exist on this machine.")
1493
1549
  return
1494
1550
 
1495
1551
  stale_count = 0
1496
- for repo_name, path in checkouts:
1552
+ origin_behind_count = 0
1553
+ for repo_name, path, default_branch in checkouts:
1497
1554
  click.echo(f"── {repo_name}")
1498
- st = graph_status(path)
1555
+ # #2211: default_branch drives the HEAD-vs-origin comparison
1556
+ # alongside the existing graph-vs-HEAD one — never fetches, only
1557
+ # reads whatever `origin/<default_branch>` the last fetch left.
1558
+ st = graph_status(path, default_branch)
1499
1559
  for line in format_status_lines(st):
1500
1560
  click.echo(f" {line}")
1501
1561
  if st.stale:
@@ -1504,11 +1564,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
1504
1564
  " fix: run `graphify update .` in the checkout "
1505
1565
  "(the hooks skip rebase/merge/cherry-pick and reset --hard)"
1506
1566
  )
1567
+ if st.origin_behind:
1568
+ origin_behind_count += 1
1569
+ click.echo(
1570
+ f" fix: HEAD is behind origin/{default_branch} — the base "
1571
+ "checkout is fetched but never auto-pulled (by design; "
1572
+ "checkouts are sometimes deliberately parked). Review and "
1573
+ "pull by hand if it isn't."
1574
+ )
1507
1575
  ok, detail = hooks_path_status(path)
1508
1576
  click.echo(f" {'✓' if ok else '⚠'} {detail}")
1509
1577
 
1510
1578
  click.echo(
1511
- f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count}"
1579
+ f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count} "
1580
+ f"origin_behind={origin_behind_count}"
1512
1581
  )
1513
1582
 
1514
1583
 
@@ -81,6 +81,16 @@ class GraphStatus:
81
81
  built_sha: str | None = None
82
82
  head_sha: str | None = None
83
83
  in_sync: bool = False
84
+ # HEAD vs origin/<default_branch> — the axis graph<->HEAD alone cannot see
85
+ # (#2211). The base checkout is fetched but never pulled by design (see
86
+ # module docstring), so HEAD can sit arbitrarily far behind origin while
87
+ # graph == HEAD reports a clean bill of health. ``default_branch`` is the
88
+ # branch name the comparison used; ``origin_sha`` / ``commits_behind_origin``
89
+ # are ``None`` when it could not be determined (no remote, ref never
90
+ # fetched, or the git call failed) rather than treated as "0 behind".
91
+ default_branch: str | None = None
92
+ origin_sha: str | None = None
93
+ commits_behind_origin: int | None = None
84
94
  age_seconds: float | None = None
85
95
  # mtime of graphify-out/manifest.json — the last time graphify *checked* the
86
96
  # graph against the working tree, whether or not it rewrote anything.
@@ -122,6 +132,19 @@ class GraphStatus:
122
132
  *unknown* — an unknown is reported separately, not counted as drift."""
123
133
  return self.stamp_behind and not self.verified_current
124
134
 
135
+ @property
136
+ def origin_behind(self) -> bool:
137
+ """HEAD (of the checkout that owns the graph) is behind
138
+ ``origin/<default_branch>`` by at least one commit — i.e. the graph
139
+ may match HEAD exactly and still describe stale code, because HEAD
140
+ itself is stale relative to the remote (#2211).
141
+
142
+ False — not True — when this could not be proven (no remote, the ref
143
+ was never fetched, or the git call failed): mirrors ``stale``'s rule
144
+ that an unknown must never be counted as drift.
145
+ """
146
+ return bool(self.commits_behind_origin)
147
+
125
148
 
126
149
  def read_built_sha(report_path: Path) -> str | None:
127
150
  """The commit ``GRAPH_REPORT.md`` says the graph was built from."""
@@ -161,6 +184,22 @@ def _head_committed_at(repo_path: Path) -> float | None:
161
184
  return None
162
185
 
163
186
 
187
+ def _commits_ahead(repo_path: Path, base: str, ahead_of: str) -> int | None:
188
+ """Count of commits reachable from *ahead_of* that are not in *base*
189
+ (``git rev-list --count base..ahead_of``).
190
+
191
+ Best-effort like the rest of this module: ``None`` (never raised) when
192
+ git can't answer — an unproven comparison must not be reported as drift.
193
+ """
194
+ out = _git_out(repo_path, "rev-list", "--count", f"{base}..{ahead_of}")
195
+ if out is None:
196
+ return None
197
+ try:
198
+ return int(out)
199
+ except ValueError:
200
+ return None
201
+
202
+
164
203
  def _shas_agree(built: str, head: str) -> bool:
165
204
  """Compare on the shorter of the two — the report abbreviates (8 chars by
166
205
  default) while ``git rev-parse HEAD`` is full-length."""
@@ -170,12 +209,20 @@ def _shas_agree(built: str, head: str) -> bool:
170
209
  return built[:n].lower() == head[:n].lower()
171
210
 
172
211
 
173
- def graph_status(repo_path: Path) -> GraphStatus:
212
+ def graph_status(repo_path: Path, default_branch: str = "main") -> GraphStatus:
174
213
  """Freshness of the graphify graph for the checkout at *repo_path*.
175
214
 
176
215
  Read-only and best-effort: a missing graph, a missing report, or a repo
177
216
  git can't read all return a populated :class:`GraphStatus` with
178
217
  ``unknown_reason`` set rather than raising.
218
+
219
+ *default_branch* names the branch to compare HEAD against on
220
+ ``origin`` (#2211) — pass the repo's configured default branch
221
+ (``coordinator.yml``'s ``default_branch``, "main" if unset). Never
222
+ fetches: it only reads whatever ``origin/<default_branch>`` the last
223
+ ``git fetch`` left behind, so a checkout that was never fetched or has
224
+ no ``origin`` remote simply leaves ``origin_sha``/``commits_behind_origin``
225
+ unset rather than reporting drift it can't prove.
179
226
  """
180
227
  st = GraphStatus(repo_path=repo_path)
181
228
  out_dir = repo_path / "graphify-out"
@@ -213,6 +260,7 @@ def graph_status(repo_path: Path) -> GraphStatus:
213
260
  owner = st.link_target.parent if (st.is_symlink and st.link_target) else repo_path
214
261
  st.head_sha = _head_sha(owner)
215
262
  st.head_committed_at = _head_committed_at(owner)
263
+ st.default_branch = default_branch
216
264
 
217
265
  if not st.built_sha:
218
266
  st.unknown_reason = "GRAPH_REPORT.md has no 'Built from commit' line"
@@ -220,6 +268,15 @@ def graph_status(repo_path: Path) -> GraphStatus:
220
268
  st.unknown_reason = f"could not read HEAD of {owner}"
221
269
  else:
222
270
  st.in_sync = _shas_agree(st.built_sha, st.head_sha)
271
+
272
+ # HEAD vs origin/<default_branch> — independent of the graph<->HEAD
273
+ # comparison above. Best-effort: no remote, or the ref not fetched yet,
274
+ # just leaves this unset (see docstring).
275
+ if st.head_sha:
276
+ origin_sha = _git_out(owner, "rev-parse", f"origin/{default_branch}")
277
+ if origin_sha:
278
+ st.origin_sha = origin_sha
279
+ st.commits_behind_origin = _commits_ahead(owner, st.head_sha, origin_sha)
223
280
  return st
224
281
 
225
282
 
@@ -326,17 +383,39 @@ def format_status_lines(st: GraphStatus) -> list[str]:
326
383
  if st.is_symlink:
327
384
  lines.append(f"↳ {where}/graphify-out → {st.link_target} (linked worktree)")
328
385
 
386
+ # #2211: graph == HEAD only proves the graph matches the checkout's own
387
+ # HEAD — it says nothing about whether that HEAD itself is stale relative
388
+ # to origin (the base checkout is fetched but never pulled, by design;
389
+ # see module docstring). Shared by both "graph matches HEAD" branches
390
+ # below so a genuinely-current-but-unpushed-tracking checkout doesn't
391
+ # report a false ✓.
392
+ origin_note = ""
393
+ if st.origin_behind:
394
+ n = st.commits_behind_origin or 0
395
+ origin_note = (
396
+ f" — HEAD is {n} commit{'' if n == 1 else 's'} behind "
397
+ f"origin/{st.default_branch}; the graph describes stale code "
398
+ f"(fix: review + pull — not automatic, see #2211)"
399
+ )
400
+
329
401
  if st.unknown_reason:
330
402
  lines.append(f"? {where}: freshness unknown — {st.unknown_reason}")
331
403
  elif st.in_sync:
332
- lines.append(f"✓ {where}: graph in sync (built from {st.built_sha})")
404
+ if origin_note:
405
+ lines.append(
406
+ f"⚠ {where}: graph matches HEAD (built from {st.built_sha}){origin_note}"
407
+ )
408
+ else:
409
+ lines.append(f"✓ {where}: graph in sync (built from {st.built_sha})")
333
410
  elif st.verified_current:
334
411
  # Stamp behind, but graphify has re-checked the tree since HEAD landed
335
412
  # and found no topology change — the graph content is current.
413
+ mark = "⚠" if origin_note else "✓"
336
414
  lines.append(
337
- f" {where}: graph content current — stamp says {st.built_sha} "
415
+ f"{mark} {where}: graph content current — stamp says {st.built_sha} "
338
416
  f"(HEAD {(st.head_sha or '')[:8]}), but verified against the tree "
339
- f"since; graphify leaves outputs untouched when topology is unchanged"
417
+ f"since; graphify leaves outputs untouched when topology is "
418
+ f"unchanged{origin_note}"
340
419
  )
341
420
  else:
342
421
  lines.append(
@@ -23,6 +23,14 @@ longer HEAD. That is the 2026-07-30 vimcode incident: 128.8h stale, hooks
23
23
  disabled, and nothing in the fleet said so. Age escalates a
24
24
  hooks-working checkout from WARN to CRIT at ``graph_stale_crit_hours``;
25
25
  hooks-disabled skips straight to CRIT because time cannot fix it.
26
+
27
+ **graph == HEAD is not the whole story (#2211).** ``status.stale`` only
28
+ compares the graph to this checkout's OWN HEAD. The base checkout is fetched
29
+ but never pulled (see ``coord.graph_health``'s module docstring), so HEAD can
30
+ sit arbitrarily far behind ``origin/<default_branch>`` while the graph
31
+ matches it exactly — a confidently-correct-looking graph of stale code. This
32
+ module reports that as its own WARN (``status.origin_behind``), independent
33
+ of and never overriding ``status.stale``'s verdict.
26
34
  """
27
35
 
28
36
  from __future__ import annotations
@@ -79,7 +87,10 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
79
87
  results: list[CheckResult] = []
80
88
 
81
89
  for checkout in ctx.checkouts:
82
- status = graph_status(checkout.path)
90
+ # #2211: default_branch drives the HEAD-vs-origin comparison
91
+ # alongside the existing graph-vs-HEAD one. Never fetches — only
92
+ # reads whatever origin/<default_branch> the last `git fetch` left.
93
+ status = graph_status(checkout.path, checkout.default_branch)
83
94
  hooks_ok, hooks_detail = hooks_path_status(checkout.path)
84
95
 
85
96
  values = {
@@ -91,6 +102,10 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
91
102
  "verified_current": status.verified_current,
92
103
  "built_sha": status.built_sha,
93
104
  "head_sha": status.head_sha,
105
+ "default_branch": status.default_branch,
106
+ "origin_sha": status.origin_sha,
107
+ "commits_behind_origin": status.commits_behind_origin,
108
+ "origin_behind": status.origin_behind,
94
109
  "age_seconds": status.age_seconds,
95
110
  "age_hours": (
96
111
  round(status.age_seconds / 3600.0, 1) if status.age_seconds is not None else None
@@ -153,11 +168,35 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
153
168
  else f", {commits_behind} commit{'' if commits_behind == 1 else 's'} behind"
154
169
  )
155
170
 
171
+ # #2211: graph == HEAD only proves the graph matches this checkout's
172
+ # OWN HEAD — it says nothing about whether HEAD itself is behind
173
+ # origin. The base checkout is fetched but never pulled by design
174
+ # (see coord.graph_health module docstring), so this must be judged
175
+ # independently of `status.stale`, not folded into it.
176
+ origin_suffix = (
177
+ ""
178
+ if not status.origin_behind
179
+ else (
180
+ f", {status.commits_behind_origin} commit"
181
+ f"{'' if status.commits_behind_origin == 1 else 's'} behind "
182
+ f"origin/{status.default_branch}"
183
+ )
184
+ )
185
+
156
186
  if not status.stale:
157
- severity = Severity.OK
158
- headroom = f"in sync ({(status.built_sha or '')[:8]}), {age_text} old"
159
- if status.verified_current and status.stamp_behind:
160
- headroom = f"content current (stamp {(status.built_sha or '')[:8]}), {age_text} old"
187
+ if status.origin_behind:
188
+ severity = Severity.WARN
189
+ headroom = (
190
+ f"graph matches HEAD ({(status.built_sha or '')[:8]}){origin_suffix} "
191
+ "— describes stale code"
192
+ )
193
+ else:
194
+ severity = Severity.OK
195
+ headroom = f"in sync ({(status.built_sha or '')[:8]}), {age_text} old"
196
+ if status.verified_current and status.stamp_behind:
197
+ headroom = (
198
+ f"content current (stamp {(status.built_sha or '')[:8]}), {age_text} old"
199
+ )
161
200
  elif not hooks_ok:
162
201
  severity = Severity.CRIT
163
202
  headroom = f"{age_text} stale{commits_suffix}, hooks disabled -> will not self-heal"
@@ -172,7 +211,17 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
172
211
  headroom = f"stale, {age_text} old{commits_suffix} (HEAD {(status.head_sha or '')[:8]})"
173
212
 
174
213
  detail = ""
175
- if severity is not Severity.OK:
214
+ if not status.stale and status.origin_behind:
215
+ # Not a graph problem — `graphify update` would rebuild from the
216
+ # same stale HEAD. Naming a `git pull` here deliberately, but not
217
+ # running one: automatic pulls are unsafe for a base checkout
218
+ # (see coord.graph_health module docstring — deliberately-parked
219
+ # branches, stale .git/index.lock, etc).
220
+ detail = (
221
+ f"fix: review, then pull {checkout.path} to catch it up to "
222
+ f"origin/{status.default_branch} (not automatic)"
223
+ )
224
+ elif severity is not Severity.OK:
176
225
  detail = f"fix: graphify update {checkout.path}"
177
226
  if not hooks_ok:
178
227
  detail = f"{detail} — {hooks_detail}"
@@ -68,6 +68,24 @@ def _no_agent_health_probe(monkeypatch):
68
68
  )
69
69
 
70
70
 
71
+ @pytest.fixture(autouse=True)
72
+ def _no_assign_repo_drift_probe(monkeypatch):
73
+ """#2219: default `coord assign`'s live-agent repo-capability cross-check
74
+ (``coord.commands.dispatch._repo_capability_refusal``) to fail-open
75
+ (``None`` — never refuse) so tests that don't care about it don't make a
76
+ real ``httpx.get(".../health")`` call keyed off whatever bogus
77
+ ``host.tailnet`` hostnames the fixture configs use. Mirrors
78
+ ``_no_agent_health_probe`` (#904) for the same reason: the suite's
79
+ default behavior must not depend on network/DNS timing. Tests exercising
80
+ the drift check itself monkeypatch this function to return a message
81
+ (or call the real one against a stubbed ``coord.network.check_machine``),
82
+ which takes priority over this default and is unaffected by it.
83
+ """
84
+ monkeypatch.setattr(
85
+ "coord.commands.dispatch._repo_capability_refusal", lambda *a, **k: None
86
+ )
87
+
88
+
71
89
  @pytest.fixture(autouse=True)
72
90
  def _no_worktree_writable_deny_scan(monkeypatch):
73
91
  """#1445 review: keep `check_worktree_writable`'s deny-rule scan from