code-coordinator 0.5.67__tar.gz → 0.5.69__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 (817) hide show
  1. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent.py +56 -1
  5. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/drive_queue.py +108 -0
  6. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive_queue.py +49 -0
  7. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/merge_queue.py +39 -0
  8. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent.py +60 -0
  9. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_drive_queue.py +227 -0
  10. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_merge_queue.py +26 -0
  11. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_operational_defaults.py +111 -1
  12. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_board_audit.py +12 -0
  13. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/cargo-test.yml +0 -0
  24. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/release-tui.yml +0 -0
  26. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.gitignore +0 -0
  28. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/GOAL.md +0 -0
  30. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/LICENSE +0 -0
  31. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/README.md +0 -0
  33. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/SOURCES.txt +0 -0
  34. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/scm_file_list.json +0 -0
  38. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/acceptance_drivers.py +0 -0
  43. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/client.py +0 -0
  62. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/gate_a.py +0 -0
  72. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/gates.py +0 -0
  73. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/issues.py +0 -0
  74. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/lifecycle.py +0 -0
  75. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/merge.py +0 -0
  76. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/milestone.py +0 -0
  77. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/plan_followup.py +0 -0
  78. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/plans.py +0 -0
  79. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/portal.py +0 -0
  80. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/release.py +0 -0
  81. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/report.py +0 -0
  82. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/review.py +0 -0
  83. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/scorecard.py +0 -0
  84. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/sessions.py +0 -0
  85. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/setup.py +0 -0
  86. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/status.py +0 -0
  87. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/terminal.py +0 -0
  88. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/test_gate.py +0 -0
  89. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/tui.py +0 -0
  90. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/comments.py +0 -0
  91. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/config.py +0 -0
  92. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  102. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  104. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  105. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/db.py +0 -0
  203. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dispatch.py +0 -0
  226. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dist_name.py +0 -0
  227. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive.py +0 -0
  228. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive_state.py +0 -0
  229. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/events.py +0 -0
  230. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/failure_class.py +0 -0
  231. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/filelock.py +0 -0
  232. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/fleet_config_health.py +0 -0
  233. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/freshness.py +0 -0
  234. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_a.py +0 -0
  235. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_b.py +0 -0
  236. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_snapshot.py +0 -0
  237. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gates.py +0 -0
  238. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/github_ops.py +0 -0
  239. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/goal.py +0 -0
  240. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/graph_health.py +0 -0
  241. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/__init__.py +0 -0
  242. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/aggregate.py +0 -0
  243. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/__init__.py +0 -0
  244. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/agent_install.py +0 -0
  245. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/cargo_targets.py +0 -0
  246. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/claude_binary.py +0 -0
  247. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/deploy_lane_facts.py +0 -0
  248. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/disk.py +0 -0
  249. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_board.py +0 -0
  250. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  251. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_phantom.py +0 -0
  252. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_unit_drift.py +0 -0
  253. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/graph.py +0 -0
  254. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/plan_usage.py +0 -0
  255. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/repo_state.py +0 -0
  256. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/spawned_coord.py +0 -0
  257. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/timer_active.py +0 -0
  258. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/toolchain.py +0 -0
  259. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/unit_drift.py +0 -0
  260. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/unit_enablement.py +0 -0
  261. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/worktrees.py +0 -0
  262. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/cli.py +0 -0
  263. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/context.py +0 -0
  264. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/fleet_snapshot.py +0 -0
  265. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/models.py +0 -0
  266. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/pypi.py +0 -0
  267. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/registry.py +0 -0
  268. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/render.py +0 -0
  269. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/units.py +0 -0
  270. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/hooks.py +0 -0
  271. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/housekeeping.py +0 -0
  272. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/interactive.py +0 -0
  273. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/issue_store.py +0 -0
  274. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/liveness_auditor.py +0 -0
  275. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/machine_pause.py +0 -0
  276. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_chat.py +0 -0
  277. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_dispatch.py +0 -0
  278. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_gate.py +0 -0
  279. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_order.py +0 -0
  280. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/mock_author.py +0 -0
  281. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/models.py +0 -0
  282. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/network.py +0 -0
  283. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/new_issue_chat.py +0 -0
  284. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/__init__.py +0 -0
  285. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/baseline.py +0 -0
  286. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/cli.py +0 -0
  287. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/collect.py +0 -0
  288. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/digest.py +0 -0
  289. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/models.py +0 -0
  290. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/predicate.py +0 -0
  291. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/service.py +0 -0
  292. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/store.py +0 -0
  293. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/transport.py +0 -0
  294. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notify.py +0 -0
  295. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/openapi.py +0 -0
  296. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/overlap_fence.py +0 -0
  297. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/parentage.py +0 -0
  298. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/parentage_github.py +0 -0
  299. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/pipeline.py +0 -0
  300. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/plan_parser.py +0 -0
  301. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/plans.py +0 -0
  302. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/platform_paths.py +0 -0
  303. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/portal_bridge.py +0 -0
  304. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/pr_body_lint.py +0 -0
  305. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/prereqs.py +0 -0
  306. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/progress.py +0 -0
  307. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/__init__.py +0 -0
  308. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/base.py +0 -0
  309. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/claude.py +0 -0
  310. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/claude_pty.py +0 -0
  311. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/opencode.py +0 -0
  312. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/reconcile.py +0 -0
  313. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/refine_chat.py +0 -0
  314. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_cordon.py +0 -0
  315. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_propagate.py +0 -0
  316. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_verify.py +0 -0
  317. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_window.py +0 -0
  318. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/reports.py +0 -0
  319. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/revalidate.py +0 -0
  320. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/review.py +0 -0
  321. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/scorecard.py +0 -0
  322. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/serve_app.py +0 -0
  323. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/skills/update-issue/SKILL.md +0 -0
  324. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/smoke.py +0 -0
  325. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/spend_ceiling.py +0 -0
  326. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/split_work.py +0 -0
  327. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/stage_projection.py +0 -0
  328. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/state.py +0 -0
  329. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_author.py +0 -0
  330. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_chat.py +0 -0
  331. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_orchestrator.py +0 -0
  332. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_report.py +0 -0
  333. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/tui_release.py +0 -0
  334. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage.py +0 -0
  335. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage_limits.py +0 -0
  336. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage_rollup.py +0 -0
  337. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/worker_events.py +0 -0
  338. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coordinator.example.yml +0 -0
  339. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-agent.service +0 -0
  340. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.service +0 -0
  341. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.sh +0 -0
  342. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.timer +0 -0
  343. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-drive-queue.service +0 -0
  344. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-drive-queue.timer +0 -0
  345. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-notify.service +0 -0
  346. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-notify.timer +0 -0
  347. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-propagate.service +0 -0
  348. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-propagate.timer +0 -0
  349. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-window.service +0 -0
  350. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-window.timer +0 -0
  351. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-serve.service +0 -0
  352. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.service +0 -0
  353. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.sh +0 -0
  354. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.timer +0 -0
  355. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-rollback.sh +0 -0
  356. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web.service +0 -0
  357. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/node-shim.sh +0 -0
  358. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/AGENT_OPERATIONS.md +0 -0
  359. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ARCHITECTURE.md +0 -0
  360. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ARCH_SECURITY_GATES.md +0 -0
  361. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/COCKPIT.md +0 -0
  362. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CONTROL_CENTER.md +0 -0
  363. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CROSS_PLATFORM.md +0 -0
  364. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CUSTOMER_PORTAL.md +0 -0
  365. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/DRIVE_QUEUE.md +0 -0
  366. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/EPHEMERAL_WORKERS.md +0 -0
  367. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/FORGE_MIGRATION.md +0 -0
  368. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/GRAPHIFY_SETUP.md +0 -0
  369. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ISSUE_GUIDANCE.md +0 -0
  370. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/MAC_MINI.md +0 -0
  371. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  372. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/NOTIFIER.md +0 -0
  373. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/OPENCODE_VERIFICATION.md +0 -0
  374. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/OPERATING_GOTCHAS.md +0 -0
  375. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ORACLE_LOOP.md +0 -0
  376. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PHONE_WEBAPP.md +0 -0
  377. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PIPELINE_V2.md +0 -0
  378. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PLATFORM_EVOLUTION.md +0 -0
  379. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/SECOND_BACKEND.md +0 -0
  380. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/STORE_SERVICE.md +0 -0
  381. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  382. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/WEB_CONTROL_CENTER.md +0 -0
  383. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/README.md +0 -0
  384. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/_tokens.css +0 -0
  385. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/issue-detail.html +0 -0
  386. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/pipeline-narrow.html +0 -0
  387. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/pipeline-wide.html +0 -0
  388. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/graphify-out/.gitignore +0 -0
  389. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/install-agent.sh +0 -0
  390. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/pyproject.toml +0 -0
  391. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/audit_review_verdict_overrides.py +0 -0
  392. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  393. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/build-worker-image.sh +0 -0
  394. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/coordinator-machine.py +0 -0
  395. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/provision-worker.sh +0 -0
  399. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  400. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  401. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/verify-github-token.sh +0 -0
  402. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/codegen.py +0 -0
  403. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/coord-test-runner.sh +0 -0
  404. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/drive-batch.sh +0 -0
  405. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/gen_board_fixture.py +0 -0
  406. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/next_release_tag.py +0 -0
  407. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/run_tests_in_populated_home.sh +0 -0
  408. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/run_tests_without_gh.sh +0 -0
  409. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/smoke_437_interactive.py +0 -0
  410. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_878_review_capture.py +0 -0
  411. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_release_published.py +0 -0
  412. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_release_wheel.py +0 -0
  413. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/setup.cfg +0 -0
  414. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/SMOKE_SET.md +0 -0
  415. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/__init__.py +0 -0
  416. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  417. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/contract.md +0 -0
  418. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/manifest.yml +0 -0
  419. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  420. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  421. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  422. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  423. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/conftest.py +0 -0
  424. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/contract.md +0 -0
  425. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/manifest.yml +0 -0
  426. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  427. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  428. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/contract.md +0 -0
  429. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/manifest.yml +0 -0
  430. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  431. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  432. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  433. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  434. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  435. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  436. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  437. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  438. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  439. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  440. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/contract.md +0 -0
  441. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  442. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  443. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/manifest.yml +0 -0
  444. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  445. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/tsconfig.json +0 -0
  446. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  447. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/conftest.py +0 -0
  448. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/board-pipeline-basic.json +0 -0
  449. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  450. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  451. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  452. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/all_pass.json +0 -0
  453. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  454. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/mixed_fail.json +0 -0
  455. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  456. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  457. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/skip.json +0 -0
  458. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/truncated.json +0 -0
  459. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  460. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  461. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  462. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  463. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  464. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  465. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  466. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  467. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_acceptance.py +0 -0
  468. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_acceptance_drivers.py +0 -0
  469. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_graph_self_heal.py +0 -0
  477. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_health_h3.py +0 -0
  478. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_idle_restart.py +0 -0
  479. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_push_failure.py +0 -0
  480. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_reap.py +0 -0
  481. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_repos_and_pull.py +0 -0
  482. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_restart_services_endpoint.py +0 -0
  483. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_startup_diagnostics.py +0 -0
  484. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_update.py +0 -0
  485. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_update_bluegreen.py +0 -0
  486. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_usage_limit.py +0 -0
  487. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_zero_commit.py +0 -0
  488. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ambient_home_isolation.py +0 -0
  489. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_approve_reject_plan.py +0 -0
  490. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_approve_usage_gate.py +0 -0
  491. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_assignment_already_recorded_daemon.py +0 -0
  492. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_log.py +0 -0
  493. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_outcome.py +0 -0
  494. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_query.py +0 -0
  495. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_auto_loop.py +0 -0
  496. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_auto_release_publish_2035.py +0 -0
  497. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_base_checkout_restore.py +0 -0
  498. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_cap_762.py +0 -0
  499. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_fixture.py +0 -0
  500. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_read_path.py +0 -0
  501. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_service.py +0 -0
  502. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_state.py +0 -0
  503. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_wire.py +0 -0
  504. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_brain.py +0 -0
  505. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_branch_model.py +0 -0
  506. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_bug_intake.py +0 -0
  507. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_build_worker_image_env_update.py +0 -0
  508. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cargo_cache.py +0 -0
  509. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_acceptance_gate_1950.py +0 -0
  510. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_parity_2091.py +0 -0
  511. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_store.py +0 -0
  512. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_claim.py +0 -0
  513. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_acceptance.py +0 -0
  514. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign.py +0 -0
  515. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  516. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_interactive_remote.py +0 -0
  517. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_provider.py +0 -0
  518. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_audit.py +0 -0
  519. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_chat_continue.py +0 -0
  520. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_diagnose_config_provenance.py +0 -0
  521. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_diagnose_graph.py +0 -0
  522. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor.py +0 -0
  523. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor_config_free_1801.py +0 -0
  524. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  525. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_drive.py +0 -0
  526. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_escalate.py +0 -0
  527. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_fix_headless_review.py +0 -0
  528. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_gate_a.py +0 -0
  529. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_install_drift.py +0 -0
  530. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_install_skills.py +0 -0
  531. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_issue_create_label.py +0 -0
  532. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_issue_reopen.py +0 -0
  533. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_merge.py +0 -0
  534. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_assign.py +0 -0
  535. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_capture.py +0 -0
  536. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_chat_add_child.py +0 -0
  537. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_dispatch.py +0 -0
  538. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_gate_b.py +0 -0
  539. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_gate_c.py +0 -0
  540. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_order.py +0 -0
  541. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  542. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_ship.py +0 -0
  543. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_network.py +0 -0
  544. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_new_issue_chat.py +0 -0
  545. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_plans.py +0 -0
  546. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_portal.py +0 -0
  547. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_pull_artifact.py +0 -0
  548. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_queue.py +0 -0
  549. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_reattach_sessions.py +0 -0
  550. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_refine_board.py +0 -0
  551. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_preflight.py +0 -0
  552. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_propagate.py +0 -0
  553. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_window.py +0 -0
  554. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_scorecard.py +0 -0
  555. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_set_review_findings.py +0 -0
  556. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_advisory_terminal.py +0 -0
  557. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_merge_queue.py +0 -0
  558. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_provider.py +0 -0
  559. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_review_finalizing.py +0 -0
  560. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_test_failed_tag.py +0 -0
  561. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_usage_limit.py +0 -0
  562. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_sync_comments_873.py +0 -0
  563. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_test_plan.py +0 -0
  564. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_track.py +0 -0
  565. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_tui_update.py +0 -0
  566. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_wait.py +0 -0
  567. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_client_base_install.py +0 -0
  568. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_comments.py +0 -0
  569. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_completion_summary.py +0 -0
  570. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config.py +0 -0
  571. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_acceptance.py +0 -0
  572. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_audit.py +0 -0
  573. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_pricing.py +0 -0
  574. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_usage_gate.py +0 -0
  575. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_conflict_fix.py +0 -0
  576. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_conflict_fix_semantic.py +0 -0
  577. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test.py +0 -0
  578. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_baseline.py +0 -0
  579. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_routing.py +0 -0
  580. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_toolchain.py +0 -0
  581. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_web_sse_restart_live.py +0 -0
  582. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coordinator_machine.py +0 -0
  583. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cross_platform_imports.py +0 -0
  584. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard.py +0 -0
  585. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_fixture.py +0 -0
  586. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_terminal.py +0 -0
  587. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_terminal_live.py +0 -0
  588. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_db.py +0 -0
  589. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dead_end.py +0 -0
  590. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_db_backup.py +0 -0
  591. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_web_dist.py +0 -0
  592. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_web_rollback.py +0 -0
  593. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_drive_queue_unit.py +0 -0
  594. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_manifest.py +0 -0
  595. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_units_lane.py +0 -0
  596. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_web_unit.py +0 -0
  597. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deps.py +0 -0
  598. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_diagnose.py +0 -0
  599. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dispatch.py +0 -0
  600. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dispatch_target_validation.py +0 -0
  601. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dist_name.py +0 -0
  602. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_done_housekeeping.py +0 -0
  603. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive.py +0 -0
  604. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_queue.py +0 -0
  605. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_state.py +0 -0
  606. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_tmux.py +0 -0
  607. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_capability_detection.py +0 -0
  608. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  609. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_image_provenance.py +0 -0
  610. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_errors.py +0 -0
  611. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_events.py +0 -0
  612. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_failure_class.py +0 -0
  613. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_filelock.py +0 -0
  614. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  615. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fix_of_force_override.py +0 -0
  616. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_config_health.py +0 -0
  617. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_health_probes.py +0 -0
  618. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_health_snapshot.py +0 -0
  619. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_freshness.py +0 -0
  620. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_a.py +0 -0
  621. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_b.py +0 -0
  622. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_snapshot_staleness.py +0 -0
  623. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gates.py +0 -0
  624. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_generated_types_fixture.py +0 -0
  625. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_github_ops.py +0 -0
  626. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_goal.py +0 -0
  627. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_graph_health.py +0 -0
  628. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_handoff.py +0 -0
  629. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_checks.py +0 -0
  630. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_cli.py +0 -0
  631. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_cli_graph.py +0 -0
  632. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_config.py +0 -0
  633. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_context.py +0 -0
  634. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_deploy_lane_facts.py +0 -0
  635. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_incident_regression.py +0 -0
  636. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_pypi.py +0 -0
  637. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_registry.py +0 -0
  638. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_timer_active.py +0 -0
  639. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_toolchain.py +0 -0
  640. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_unit_drift.py +0 -0
  641. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_unit_enablement.py +0 -0
  642. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_hooks.py +0 -0
  643. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_human_attended_437.py +0 -0
  644. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_init.py +0 -0
  645. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_integration.py +0 -0
  646. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_briefing_echo.py +0 -0
  647. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_prefill_state.py +0 -0
  648. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_session_relaunch.py +0 -0
  649. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_test_verdict_backstop.py +0 -0
  650. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_token_attribution.py +0 -0
  651. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_worktree.py +0 -0
  652. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_issue_store_seam.py +0 -0
  653. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_liveness_auditor.py +0 -0
  654. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_liveness_notify.py +0 -0
  655. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_machine_pause.py +0 -0
  656. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_merge_verify.py +0 -0
  657. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_chat.py +0 -0
  658. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_dispatch.py +0 -0
  659. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_gate.py +0 -0
  660. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_order.py +0 -0
  661. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_seam.py +0 -0
  662. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_mock_author.py +0 -0
  663. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_model_tiering.py +0 -0
  664. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_models.py +0 -0
  665. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_models_config_labels.py +0 -0
  666. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_needs_attention.py +0 -0
  667. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_network.py +0 -0
  668. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_new_issue_chat.py +0 -0
  669. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_next_release_tag.py +0 -0
  670. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_no_direct_gh_calls.py +0 -0
  671. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_node_shim.py +0 -0
  672. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_baseline.py +0 -0
  673. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_cli.py +0 -0
  674. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_collect.py +0 -0
  675. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_config.py +0 -0
  676. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_drive_seam.py +0 -0
  677. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_isolation.py +0 -0
  678. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_predicate.py +0 -0
  679. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_quiet_hours.py +0 -0
  680. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_service.py +0 -0
  681. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notify.py +0 -0
  682. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notify_drain.py +0 -0
  683. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_openapi.py +0 -0
  684. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_overlap_fence.py +0 -0
  685. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_packaged_deploy_units.py +0 -0
  686. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_parentage.py +0 -0
  687. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_paste_landed.py +0 -0
  688. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_pipeline.py +0 -0
  689. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_approve_plan_command.py +0 -0
  690. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_pr_command.py +0 -0
  691. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_review_command.py +0 -0
  692. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_only.py +0 -0
  693. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_parser.py +0 -0
  694. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_platform_paths.py +0 -0
  695. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_portal_bridge.py +0 -0
  696. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_portal_config.py +0 -0
  697. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_pr_body_lint.py +0 -0
  698. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_prereqs.py +0 -0
  699. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_production_db_guard.py +0 -0
  700. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_progress.py +0 -0
  701. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_provider_seam.py +0 -0
  702. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers.py +0 -0
  703. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers_config_labels.py +0 -0
  704. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers_pty.py +0 -0
  705. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_quiet_hours.py +0 -0
  706. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_quiet_hours_store_2146.py +0 -0
  707. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reap_merged_sessions.py +0 -0
  708. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reap_stale_interactive_tick.py +0 -0
  709. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_branch.py +0 -0
  710. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_completions.py +0 -0
  711. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_merges.py +0 -0
  712. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_usage_limit_done.py +0 -0
  713. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_refine_chat.py +0 -0
  714. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_cordon_2101.py +0 -0
  715. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_propagate.py +0 -0
  716. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_unified_1242.py +0 -0
  717. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_verify.py +0 -0
  718. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_window.py +0 -0
  719. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_remote_auto_prune.py +0 -0
  720. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_remote_interactive_reaper.py +0 -0
  721. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_report_result_push.py +0 -0
  722. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reports.py +0 -0
  723. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry.py +0 -0
  724. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry_advisory_1606.py +0 -0
  725. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry_type_1636.py +0 -0
  726. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_revalidate.py +0 -0
  727. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review.py +0 -0
  728. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_end_review_without_verdict.py +0 -0
  729. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_parse_failure_diagnostic.py +0 -0
  730. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_reaffirm.py +0 -0
  731. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_state.py +0 -0
  732. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_backstop.py +0 -0
  733. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_override_audit.py +0 -0
  734. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_relay.py +0 -0
  735. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_zero_commits.py +0 -0
  736. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_scoped_review_wiring.py +0 -0
  737. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_scorecard.py +0 -0
  738. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_serve.py +0 -0
  739. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_serve_app_board_trim.py +0 -0
  740. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_session.py +0 -0
  741. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_slice_issue_attribution.py +0 -0
  742. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke.py +0 -0
  743. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke_live_checkout_restore.py +0 -0
  744. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke_workflow.py +0 -0
  745. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_spend_ceiling.py +0 -0
  746. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_spend_ceiling_coordinator.py +0 -0
  747. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_split.py +0 -0
  748. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_split_work.py +0 -0
  749. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stage_projection.py +0 -0
  750. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stalled_pipeline.py +0 -0
  751. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_state.py +0 -0
  752. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_state_review_findings_daemon.py +0 -0
  753. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_status_fleet_footer.py +0 -0
  754. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stop_1567.py +0 -0
  755. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stuck.py +0 -0
  756. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_terminal_command.py +0 -0
  757. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_author.py +0 -0
  758. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_chat.py +0 -0
  759. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_orchestrator.py +0 -0
  760. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_report.py +0 -0
  761. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_verdict_parsing.py +0 -0
  762. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_verdict_transcript_floor.py +0 -0
  763. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_config_load_1080.py +0 -0
  764. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_daemon_routing_906.py +0 -0
  765. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_tmux_host.py +0 -0
  766. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_tmux_session.py +0 -0
  767. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_transcript_floor.py +0 -0
  768. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage.py +0 -0
  769. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage_limits.py +0 -0
  770. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage_rollup.py +0 -0
  771. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_venv_live_install_2121.py +0 -0
  772. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_version_single_source.py +0 -0
  773. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_watch.py +0 -0
  774. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_events.py +0 -0
  775. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_image_pin_sync.py +0 -0
  776. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_safety.py +0 -0
  777. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_test_scoping.py +0 -0
  778. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worktree.py +0 -0
  779. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  780. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/Cargo.lock +0 -0
  781. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/Cargo.toml +0 -0
  782. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/cargo-config-local-quadraui.toml.example +0 -0
  783. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/audit.rs +0 -0
  784. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/chat.rs +0 -0
  785. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/data.rs +0 -0
  786. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/dialogs.rs +0 -0
  787. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.67 → code_coordinator-0.5.69}/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.67
3
+ Version: 0.5.69
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.67
3
+ Version: 0.5.69
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.67",
2
+ "tag": "0.5.69",
3
3
  "distance": 0,
4
- "node": "g24273de7c436f9fc913f05fd3536c014eca80c25",
4
+ "node": "g9207e64664c53099584e448cecb53206429b6a9c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -747,6 +747,43 @@ def _graphify_update(repo_path: Path, *, timeout: float = 600.0) -> tuple[bool,
747
747
  return True, (result.stdout or "").strip()
748
748
 
749
749
 
750
+ # #2212: count how many Bash commands in a worker's leg invoked `graphify` —
751
+ # the measurable half of the graph-first navigation rule in
752
+ # WORKER_SYSTEM_PROMPT above. The rule has lapsed into disuse before (see
753
+ # #2212's issue body) because nothing tracked whether workers actually
754
+ # queried the graph; this is written into every reaped worker's log (see
755
+ # the "# reap: done" line in `_reap`) as a plain `grep`-able counter — zero
756
+ # across N consecutive legs means the prompt instruction isn't landing.
757
+ # Deliberately NOT a DB column: this is a cheap, best-effort signal, not a
758
+ # gate anything blocks on, so it stays out of the Assignment schema/migrations.
759
+ # Separators recognized before a command token: `;`, `&`, `|` (covers `&&`
760
+ # and `||` too, since `\s*` after the class soaks up the second char) and a
761
+ # bare newline — Claude Code's Bash tool very commonly emits multi-line
762
+ # command strings (e.g. `cd repo\ngraphify query "foo"`) that aren't joined
763
+ # with `;`/`&&`, so newline must count as a separator or those legs
764
+ # undercount to 0 (#2212 review).
765
+ _GRAPHIFY_INVOCATION_RE = re.compile(r"(?:^|[\n;&|]\s*)graphify(?:\s|$)")
766
+
767
+
768
+ def _count_graphify_invocations(bash_commands: list[str]) -> int:
769
+ """Count *bash_commands* entries that invoke the ``graphify`` CLI.
770
+
771
+ Matches ``graphify`` as a command token — at the start of the string,
772
+ after a shell separator (``;``, ``&&``, ``||``, ``|``), or after a bare
773
+ newline (multi-line Bash tool calls, e.g. ``cd repo\\ngraphify query
774
+ "..."``) — so ``graphify query "..."`` counts but a path or string that
775
+ merely contains the substring ``graphify`` (e.g. ``cat
776
+ graphify-out/graph.json``, where ``graphify`` is a path component rather
777
+ than a command) does not.
778
+
779
+ Note this counts matching *entries* in ``bash_commands``, not individual
780
+ invocations: a single command like ``"graphify query a && graphify query
781
+ b"`` counts once, not twice. Treat the result as an "at least one graph
782
+ query this leg" signal, not an exact invocation tally.
783
+ """
784
+ return sum(1 for cmd in bash_commands if cmd and _GRAPHIFY_INVOCATION_RE.search(cmd))
785
+
786
+
750
787
  def _infer_repo_github_slug(repo_path: str) -> str | None:
751
788
  """Best-effort ``owner/repo`` slug for *repo_path*'s ``origin`` remote (#1492).
752
789
 
@@ -2878,6 +2915,11 @@ absolute path outside your cwd). That shared checkout is not yours: edits \
2878
2915
  there are lost, or collide with other workers running at the same time. If \
2879
2916
  your worktree looks unexpectedly empty or unwritable, STOP and report it — \
2880
2917
  do not fall back to editing the base checkout and copying files over.
2918
+ - For "where is X handled" / "what calls this" / architecture questions, \
2919
+ query the codebase graph first: `graphify query "<question>"` via Bash. \
2920
+ Grep/Read are for confirming an exact string or line, not for discovering \
2921
+ structure. No `graphify-out/graph.json` in this worktree? Skip straight to \
2922
+ grep, silently — do not stop to build one (#2212).
2881
2923
 
2882
2924
  This session is ONE-SHOT and non-interactive (#1394):
2883
2925
  - There is no next turn and no human to reply to you. Background-task \
@@ -7440,7 +7482,20 @@ class AgentServer:
7440
7482
  try:
7441
7483
  with open(assignment.log_path, "a") as reopen:
7442
7484
  final_status = assignment.status if assignment else "unknown"
7443
- reopen.write(f"# reap: done (exit_code={exit_code} status={final_status})\n")
7485
+ # #2212: log a plain `graphify_invocations=N` counter alongside
7486
+ # the existing reap line — this is the measurable half of the
7487
+ # graph-first navigation rule (see WORKER_SYSTEM_PROMPT and
7488
+ # `_count_graphify_invocations`). `_worker_summary` is `None`
7489
+ # for a non-stream-json log or a parse failure; counting 0 in
7490
+ # that case is the honest answer, not a lie — best-effort like
7491
+ # everything else in this function.
7492
+ _graphify_invocations = _count_graphify_invocations(
7493
+ _worker_summary.bash_commands if _worker_summary is not None else []
7494
+ )
7495
+ reopen.write(
7496
+ f"# reap: done (exit_code={exit_code} status={final_status} "
7497
+ f"graphify_invocations={_graphify_invocations})\n"
7498
+ )
7444
7499
  except (OSError, AttributeError):
7445
7500
  pass
7446
7501
 
@@ -1006,6 +1006,105 @@ def _fetch_gate_a_pending(entries: list) -> dict[str, bool]:
1006
1006
  return pending
1007
1007
 
1008
1008
 
1009
+ def _fetch_live_ci_gate(
1010
+ entries: list, config_path: Path | None
1011
+ ) -> dict[str, bool]:
1012
+ """``{entry_key: still_blocked}`` for every ``parked`` entry whose OWN
1013
+ park reason is CI-shaped (#1891/#1892) — a FRESH, single-entry
1014
+ re-derivation of the SAME gate ``coord merge --plan`` computes, taken
1015
+ live, right now, this tick (#2182).
1016
+
1017
+ THE GAP THIS CLOSES. On the daemon host — the only machine that ever
1018
+ runs this tick (``docs/AGENT_OPERATIONS.md``) — ``_fetch_board_view``
1019
+ reads the local DB directly and never populates ``merge_plan`` at all
1020
+ (see ``_local_merge_queue_rows``'s docstring): it is *computed*, not
1021
+ stored, and computing it needs a live ``ci_store``/``gh_ops`` this
1022
+ read-only board fetch deliberately does not build. So
1023
+ ``IssueFacts.merge_ci_pending_live`` is unconditionally ``False`` on
1024
+ every parked entry this tick ever sees, and the ONLY thing that used to
1025
+ release such a park was :data:`coord.drive_queue.PARK_STALE_SECONDS` —
1026
+ up to 45 minutes — even at the instant CI actually reports, because
1027
+ nothing on the read path ever re-checked. claude-coordinator#2159 is
1028
+ that gap caught live: at 03:25:46 UTC, ``coord merge --dry-run`` for the
1029
+ entry read READY (no gate objection) while ``coord drive-queue list``,
1030
+ reading the SAME board a moment later, still read ``parked`` — the two
1031
+ surfaces disagreeing about the exact same fact.
1032
+
1033
+ THE FIX. Scoped to the bounded few entries actually sitting in
1034
+ ``parked`` on a CI reason right now (typically 0-1, never the whole
1035
+ merge queue — see :func:`coord.merge_queue.entry_gate_status`'s
1036
+ docstring for why this deliberately does NOT call the whole-queue
1037
+ :func:`coord.merge_queue.plan` instead), so paying for a live
1038
+ ``gh``-backed check per entry, every ~3-minute tick, is the same
1039
+ "small and predictable" cost an operator's own ``coord merge --plan``
1040
+ already pays on demand — not the unbounded per-tick GitHub polling
1041
+ #1344 removed from the read path.
1042
+
1043
+ Fails OPEN per entry and CLOSED overall in the sense that matters: a key
1044
+ simply ABSENT from the returned dict (an unreadable config, a
1045
+ ``ci_store`` that failed to build, an entry ``coord.merge_queue.
1046
+ load_queue()`` no longer carries, or any other exception) leaves that
1047
+ entry to :func:`coord.drive_queue.plan_tick`'s pre-#2182 fallback — the
1048
+ #2158 :data:`~coord.drive_queue.PARK_STALE_SECONDS` ceiling — exactly as
1049
+ if this function had never run. A transient failure here degrades to
1050
+ the OLD (already-shipped, already-bounded) behaviour, never to a wedge
1051
+ and never to a wrongly-forced resume.
1052
+
1053
+ Gated on ``resolve_board_service() is None`` (the daemon-host tick,
1054
+ same guard :func:`_fetch_board_view` uses for its own local-DB top-up):
1055
+ on a thin client the daemon's real ``GET /board`` already carries a live
1056
+ ``merge_plan`` section, so ``build_board_view`` already resolves
1057
+ ``merge_ci_pending_live=True`` there on its own and this function would
1058
+ have nothing to add — worse, ``coord.state.load_board()`` guards against
1059
+ being called from a thin client at all (#615).
1060
+ """
1061
+ from coord.merge_queue import is_ci_infra_reason, is_ci_pending_reason # noqa: PLC0415
1062
+
1063
+ targets = [
1064
+ e for e in entries
1065
+ if e.state == STATE_PARKED
1066
+ and (
1067
+ is_ci_pending_reason(getattr(e, "last_reason", "") or "")
1068
+ or is_ci_infra_reason(getattr(e, "last_reason", "") or "")
1069
+ )
1070
+ ]
1071
+ if not targets:
1072
+ return {}
1073
+
1074
+ from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
1075
+
1076
+ if resolve_board_service() is not None:
1077
+ return {}
1078
+
1079
+ try:
1080
+ from coord import github_ops as _gh_ops # noqa: PLC0415
1081
+ from coord import merge_queue as _mq # noqa: PLC0415
1082
+ from coord.ci_store import build_ci_store # noqa: PLC0415
1083
+ from coord.commands._common import _load_config # noqa: PLC0415
1084
+ from coord.state import load_board as _load_board # noqa: PLC0415
1085
+
1086
+ cfg = _load_config(config_path)
1087
+ board = _load_board()
1088
+ ci_store = build_ci_store(cfg.ci_store.type)
1089
+ queue_by_key = {
1090
+ entry_key(q.repo_name, q.issue_number): q for q in _mq.load_queue()
1091
+ }
1092
+ except Exception: # noqa: BLE001 — see the fail-soft note above
1093
+ return {}
1094
+
1095
+ overrides: dict[str, bool] = {}
1096
+ for e in targets:
1097
+ q = queue_by_key.get(e.key)
1098
+ if q is None or not q.pr_number:
1099
+ continue
1100
+ try:
1101
+ status, _reason = _mq.entry_gate_status(q, board, cfg, ci_store, _gh_ops)
1102
+ except Exception: # noqa: BLE001 — leave this one entry to the ceiling
1103
+ continue
1104
+ overrides[e.key] = status != _mq.PLAN_READY
1105
+ return overrides
1106
+
1107
+
1009
1108
  def _launch_argv(entry: QueueEntry, config_path: Path | None) -> list[str]:
1010
1109
  """The ``coord drive --tmux`` argv for *entry*.
1011
1110
 
@@ -1318,6 +1417,14 @@ def drive_queue_tick(
1318
1417
  # tick when no entry is parked that way — which is the common case.
1319
1418
  gate_a_pending = _fetch_gate_a_pending(entries)
1320
1419
 
1420
+ # #2182: for every entry parked on a CI reason, a fresh single-entry
1421
+ # re-derivation of its gate, taken live THIS tick — see
1422
+ # `_fetch_live_ci_gate`'s docstring for the gap this closes (a park
1423
+ # on the daemon-host tick could previously be released only by the
1424
+ # #2158 45-minute ceiling, never by CI actually reporting, because
1425
+ # this tick's board read never computes a live `merge_plan`).
1426
+ live_ci_gate = _fetch_live_ci_gate(entries, config_path)
1427
+
1321
1428
  # #2101: release cordons. THIS is the hole the issue names — the
1322
1429
  # queue's launcher had zero pause awareness (`coord/drive.py` checks
1323
1430
  # pause only when routing a *worker*), so a cordoned host kept getting
@@ -1349,6 +1456,7 @@ def drive_queue_tick(
1349
1456
  exit_dead_end=exit_dead_end,
1350
1457
  gate_a_pending=gate_a_pending,
1351
1458
  cordons=cordons,
1459
+ live_ci_gate=live_ci_gate,
1352
1460
  )
1353
1461
 
1354
1462
  if reconcile_only:
@@ -1932,6 +1932,7 @@ def plan_tick(
1932
1932
  exit_dead_end: Mapping[str, bool] | None = None,
1933
1933
  gate_a_pending: Mapping[str, bool] | None = None,
1934
1934
  cordons: Mapping[str, str] | None = None,
1935
+ live_ci_gate: Mapping[str, bool] | None = None,
1935
1936
  ) -> TickPlan:
1936
1937
  """Decide one tick. Pure; the caller executes the returned plan.
1937
1938
 
@@ -2008,6 +2009,21 @@ def plan_tick(
2008
2009
  #2110 deadlock, re-created by the very mechanism meant to end it. A
2009
2010
  cordoned tick is exactly `--reconcile-only`.
2010
2011
 
2012
+ *live_ci_gate* maps a `parked` entry's key to whether a FRESH,
2013
+ single-entry re-derivation of its gate — computed by the shell THIS
2014
+ tick, via :func:`coord.merge_queue.entry_gate_status` with a live
2015
+ ``ci_store``/``gh_ops``, the same backend ``coord merge --plan`` builds
2016
+ — still finds it blocked (#2182). A key present here is authoritative
2017
+ over both the cached board's `merge_ci_pending` and the #2158 staleness
2018
+ ceiling below: there is no ceiling to apply to a reading taken just now.
2019
+ A key ABSENT (the entry isn't CI-parked, or the shell's live check
2020
+ itself couldn't be made — no PR yet, an unreadable config, a `ci_store`
2021
+ that failed to build) falls through unchanged to the pre-#2182 path,
2022
+ the #2158 ceiling included — see
2023
+ :func:`coord.commands.drive_queue._fetch_live_ci_gate` for the shell
2024
+ side, which computes this ONLY for the bounded set of entries currently
2025
+ `parked` on a CI reason, never the whole queue.
2026
+
2011
2027
  The algorithm, from #1754, plus #1757's step 2, #1891's step 1b, and
2012
2028
  #2055's extension of it:
2013
2029
 
@@ -2164,6 +2180,39 @@ def plan_tick(
2164
2180
  # relaunch a gave-up entry outside the `blocked`/`failed`
2165
2181
  # attempt-tracking this function's docstring describes (#2055).
2166
2182
  continue
2183
+ # #2182: a FRESH, single-entry re-derivation of this exact entry's
2184
+ # gate, taken by the shell THIS tick (see the `live_ci_gate`
2185
+ # parameter doc above) — authoritative over both the cached board
2186
+ # reading below and the #2158 staleness ceiling, because there is no
2187
+ # staleness to a reading computed just now. Bypasses that whole
2188
+ # apparatus entirely rather than layering on top of it: a `True`
2189
+ # here means the SAME check `coord merge --plan` would run still
2190
+ # finds this entry blocked (stay parked, no ceiling needed — held
2191
+ # for as long as the live check keeps saying so, exactly like a
2192
+ # live `merge_plan` reason always was); a `False` means the plan
2193
+ # reads READY right now (resume immediately). A MISSING key — the
2194
+ # entry isn't CI-parked, or the shell's live check itself could not
2195
+ # be made — falls through unchanged to the pre-#2182 path.
2196
+ live_override = (live_ci_gate or {}).get(entry.key)
2197
+ if live_override is not None:
2198
+ if live_override:
2199
+ continue
2200
+ reason = (
2201
+ f"live re-check of {entry.key}'s gate this tick reads READY "
2202
+ "(coord merge --plan agrees) — resuming from parked without "
2203
+ "spending an attempt (#1891, #2182)"
2204
+ )
2205
+ reconciles.append(
2206
+ Reconcile(
2207
+ entry.key,
2208
+ "resumed",
2209
+ reason,
2210
+ occupies=False,
2211
+ updates={"state": STATE_WAITING, "last_reason": reason},
2212
+ )
2213
+ )
2214
+ states[entry.key] = STATE_WAITING
2215
+ continue
2167
2216
  # #2158: a park whose CI reading can still refresh itself is held for
2168
2217
  # as long as it keeps saying so. One that CANNOT — the reading came
2169
2218
  # only from the raw `merge_queue` row's frozen `error`, which is
@@ -3244,6 +3244,45 @@ def _entry_gate_status(
3244
3244
  return PLAN_READY, None
3245
3245
 
3246
3246
 
3247
+ def entry_gate_status(
3248
+ entry: "QueuedMerge",
3249
+ board,
3250
+ config,
3251
+ ci_store: "CiStore | None" = None,
3252
+ gh_ops: "GhOps | None" = None,
3253
+ ) -> tuple[str, str | None]:
3254
+ """Public seam onto :func:`_entry_gate_status`, for callers outside this
3255
+ module that need a fresh, SINGLE-entry re-derivation of the gate — not
3256
+ the whole-queue :func:`plan`.
3257
+
3258
+ #2182: ``coord.drive_queue``'s park/resume machinery (#1891/#1892) used
3259
+ to release a `parked` entry only two ways — the cached board's own
3260
+ `merge_plan` reason re-deriving itself (only true off a live daemon
3261
+ `/board`, never on the daemon-host tick itself, which reads the local DB
3262
+ directly and never computes `merge_plan` at all — see
3263
+ ``coord.commands.drive_queue._local_merge_queue_rows``), or
3264
+ :data:`coord.drive_queue.PARK_STALE_SECONDS` ageing the frozen reading
3265
+ out after 45 minutes. Both leave a genuinely-clear gate undetected for
3266
+ up to the ceiling, even though ``coord merge --plan`` can answer correctly on
3267
+ demand at any moment — the same disagreement claude-coordinator#2159
3268
+ surfaced (the queue read `parked` while `--plan` read READY, at the SAME
3269
+ instant, off the SAME board).
3270
+
3271
+ ``coord.commands.drive_queue._fetch_live_ci_gate`` calls this directly,
3272
+ once per currently-`parked` entry, with a LIVE ``ci_store``/``gh_ops`` —
3273
+ the same live backend ``coord merge --plan``'s local branch builds — so
3274
+ the two readings can no longer disagree. Deliberately NOT routed through
3275
+ :func:`plan`: that function evaluates *every* PENDING queue entry with a
3276
+ PR, so handing it a live backend would pay for a `gh` call per entry in
3277
+ the whole merge queue on every 3-minute tick, not just the bounded
3278
+ handful currently parked — reintroducing the unbounded-`gh`-polling
3279
+ shape #1344 removed from the read path. A single-entry call, made only
3280
+ for entries already sitting in `parked`, keeps the cost exactly where
3281
+ the issue says it should be: small and predictable.
3282
+ """
3283
+ return _entry_gate_status(entry, board, config, ci_store, gh_ops)
3284
+
3285
+
3247
3286
  # ── Merge plan (#776) ────────────────────────────────────────────────────────
3248
3287
 
3249
3288
  @dataclass
@@ -1572,6 +1572,66 @@ def test_reap_captures_claude_session_id(tmp_path: Path) -> None:
1572
1572
  server.shutdown()
1573
1573
 
1574
1574
 
1575
+ def test_reap_logs_graphify_invocation_count(tmp_path: Path) -> None:
1576
+ """#2212: `_reap` writes a plain `graphify_invocations=N` counter into
1577
+ the worker's log alongside the existing "# reap: done" line — the
1578
+ measurable half of the graph-first navigation rule in
1579
+ WORKER_SYSTEM_PROMPT. A worker whose transcript shows one `graphify
1580
+ query ...` Bash call and one unrelated Bash call must be counted 1, not
1581
+ 2 or 0, end-to-end through the real reap path (not just the
1582
+ `_count_graphify_invocations` unit)."""
1583
+ repo = _init_repo(tmp_path / "repo")
1584
+
1585
+ graphify_call = json.dumps({
1586
+ "type": "assistant",
1587
+ "message": {
1588
+ "model": "claude-sonnet-4-6",
1589
+ "content": [{
1590
+ "type": "tool_use",
1591
+ "name": "Bash",
1592
+ "id": "tu_1",
1593
+ "input": {"command": 'graphify query "where is X handled"'},
1594
+ }],
1595
+ },
1596
+ })
1597
+ unrelated_call = json.dumps({
1598
+ "type": "assistant",
1599
+ "message": {
1600
+ "model": "claude-sonnet-4-6",
1601
+ "content": [{
1602
+ "type": "tool_use",
1603
+ "name": "Bash",
1604
+ "id": "tu_2",
1605
+ "input": {"command": "grep -rn foo ."},
1606
+ }],
1607
+ },
1608
+ })
1609
+ result_line = json.dumps({"type": "result", "subtype": "success", "is_error": False})
1610
+ worker_sh = (
1611
+ f"echo '{graphify_call}'; echo '{unrelated_call}'; echo '{result_line}'; exit 0"
1612
+ )
1613
+ server = AgentServer(
1614
+ machine_name="test",
1615
+ repos=["api"],
1616
+ repo_paths={"api": str(repo)},
1617
+ state_dir=tmp_path / "state",
1618
+ worker_command=lambda spec: ["/bin/sh", "-c", worker_sh],
1619
+ )
1620
+ spec = AssignmentSpec(
1621
+ repo_name="api",
1622
+ repo_path=str(repo),
1623
+ issue_number=2212,
1624
+ issue_title="t",
1625
+ briefing="b",
1626
+ )
1627
+ a = server.assign(spec)
1628
+ final = server.wait_for(a.id, timeout=10)
1629
+
1630
+ log_text = Path(final.log_path).read_text()
1631
+ assert "graphify_invocations=1" in log_text
1632
+ server.shutdown()
1633
+
1634
+
1575
1635
  def test_assignment_spec_accepts_resume_session_id() -> None:
1576
1636
  """AssignmentSpec round-trips resume_session_id through to_dict / from dict."""
1577
1637
  spec = AssignmentSpec(
@@ -1297,6 +1297,233 @@ def test_a_park_younger_than_the_ceiling_is_left_alone(
1297
1297
  assert len(launches) == 1, launches
1298
1298
 
1299
1299
 
1300
+ # ── #2182: a park is bounded (#2158) but was never RE-CHECKED — a cleared
1301
+ # gate waited up to the 45-minute ceiling even though `coord merge --plan`
1302
+ # could answer correctly on demand the whole time.
1303
+ #
1304
+ # claude-coordinator#2159, 2026-08-13: at 03:25:46 UTC, `coord merge
1305
+ # --dry-run` for a parked entry read READY (no gate objection) while `coord
1306
+ # drive-queue list`, reading the SAME board a moment later, still read
1307
+ # `parked`. The root cause (confirmed by reading the tick's own board-fetch
1308
+ # path, not merely suspected): the daemon host — the ONLY machine that ever
1309
+ # runs this tick (`docs/AGENT_OPERATIONS.md`) — reads the local DB directly
1310
+ # and never computes a `merge_plan` section at all (see
1311
+ # `coord.commands.drive_queue._local_merge_queue_rows`'s docstring), so
1312
+ # `IssueFacts.merge_ci_pending_live` is unconditionally `False` there and
1313
+ # only the #2158 ceiling could ever have released the park — never CI
1314
+ # actually reporting.
1315
+ #
1316
+ # These tests exercise the REAL live re-check (`coord.merge_queue.
1317
+ # entry_gate_status`, called by `_fetch_live_ci_gate`), not a pre-injected
1318
+ # `merge_plan` row the way `board_merge_plan` above stands in for the
1319
+ # daemon-fronted lane — this suite's default lane (no daemon, no
1320
+ # `board_service`) IS the exact lane #2159 hit.
1321
+
1322
+
1323
+ _NO_GATES_CONFIG_YAML = f"""\
1324
+ repos:
1325
+ - name: {REPO}
1326
+ github: john/claude-coordinator
1327
+ default_branch: main
1328
+ - name: {OTHER_REPO}
1329
+ github: john/quadraui
1330
+ default_branch: main
1331
+ machines:
1332
+ - name: dellserver
1333
+ host: dellserver
1334
+ repos: [{REPO}, {OTHER_REPO}]
1335
+ reviews:
1336
+ enabled: false
1337
+ pipeline:
1338
+ default_gates: []
1339
+ """
1340
+
1341
+
1342
+ @pytest.fixture
1343
+ def cli_no_gates(tmp_path: Path):
1344
+ """Same shape as `cli` above, but review/smoke are OFF.
1345
+
1346
+ #2182's live re-check calls the REAL `coord.merge_queue.
1347
+ entry_gate_status` — the same function `coord merge --plan` uses — which
1348
+ evaluates review/smoke BEFORE it ever reaches the CI gate under test
1349
+ here. `config_file`'s default gate list (`["test", "review", "merge"]`,
1350
+ `reviews.enabled: true` by default) would block every re-check on a
1351
+ verdict these tests never seed — a different, real gate, just not the
1352
+ one #2182 is about. A genuinely-parked entry in production already
1353
+ cleared review/smoke to reach the CI block in the first place (that is
1354
+ the gate order `entry_gate_status` evaluates in); these tests start
1355
+ past that point on purpose, same as `_seed_ci_pending_merge_row` above
1356
+ already does for the pre-#2182 machinery.
1357
+ """
1358
+ path = tmp_path / "coordinator-no-gates.yml"
1359
+ path.write_text(_NO_GATES_CONFIG_YAML)
1360
+
1361
+ def run(*args: str):
1362
+ return CliRunner().invoke(main, ["drive-queue", *args, "--config", str(path)])
1363
+
1364
+ return run
1365
+
1366
+
1367
+ class _FakeLiveCi:
1368
+ """Stands in for the live backend `coord.ci_store.build_ci_store` would
1369
+ normally construct (`coord.ci_github.GitHubCi`) — a real `gh` client,
1370
+ which these tests must never touch."""
1371
+
1372
+ def __init__(self, state: dict) -> None:
1373
+ self._state = state
1374
+
1375
+ @property
1376
+ def is_available(self) -> bool:
1377
+ return True
1378
+
1379
+ def list_checks_for_pr(self, repo: str, number: int) -> list:
1380
+ return list(self._state["checks"])
1381
+
1382
+ def expects_checks(self, repo: str, number: int) -> bool:
1383
+ return True
1384
+
1385
+
1386
+ @pytest.fixture
1387
+ def live_ci_backend(monkeypatch):
1388
+ """Fake the live `ci_store`/`github_ops` seam #2182's re-check calls.
1389
+
1390
+ Patches `coord.ci_store.build_ci_store` (what constructs the live
1391
+ backend) and the two `coord.github_ops` functions the CI gate reaches
1392
+ for once the checks themselves resolve (`get_branch_commit_timestamp`
1393
+ for the #1851 staleness check, `get_pr_commit_messages` for the #1318
1394
+ epic-closing-keyword gate) — the same seams `tests/test_board_read_
1395
+ path.py` fakes for the equivalent `/board`-side gate. Returns a setter,
1396
+ `live_ci_backend(checks)`.
1397
+ """
1398
+ import coord.ci_store as ci_store_module
1399
+ import coord.github_ops as github_ops
1400
+
1401
+ state: dict = {"checks": []}
1402
+ monkeypatch.setattr(
1403
+ ci_store_module, "build_ci_store", lambda t: _FakeLiveCi(state)
1404
+ )
1405
+ # A small, fixed base-commit timestamp: every check below starts well
1406
+ # after it, so the #1851 staleness gate reads "fresh", not "stale".
1407
+ monkeypatch.setattr(
1408
+ github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1.0
1409
+ )
1410
+ monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
1411
+
1412
+ def _set(checks: list) -> None:
1413
+ state["checks"] = checks
1414
+
1415
+ return _set
1416
+
1417
+
1418
+ def _green_check(name: str = "test (3.12)"):
1419
+ from coord.ci_store import CheckRun
1420
+
1421
+ return CheckRun(
1422
+ name=name, status="completed", conclusion="success",
1423
+ url="", run_id="1", started_at=100.0, completed_at=160.0,
1424
+ )
1425
+
1426
+
1427
+ def _running_check(name: str = "test (3.12)"):
1428
+ from coord.ci_store import CheckRun
1429
+
1430
+ return CheckRun(
1431
+ name=name, status="in_progress", conclusion=None,
1432
+ url="", run_id="1", started_at=100.0, completed_at=None,
1433
+ )
1434
+
1435
+
1436
+ def _park_with_pr(
1437
+ cli, seed, coord_db, issue: int = 2159, pr_number: int = 42
1438
+ ) -> None:
1439
+ """`_park` above, plus a `pr_number` on the raw row.
1440
+
1441
+ #2182's live re-check (unlike the pre-#2182 machinery it falls back to)
1442
+ needs a PR to ask the CI backend about — exactly what a real `coord
1443
+ merge` attempt would already have set on this row before ever parking
1444
+ it (the CI gate only writes a `CI running:`/`CI infra:` error when
1445
+ `entry.pr_number` is truthy in the first place).
1446
+ """
1447
+ seed(issues={issue: "open"})
1448
+ cli("add", REPO, str(issue))
1449
+ cli("tick")
1450
+ _seed_ci_pending_merge_row(coord_db, issue, reason="CI running: test (3.12)")
1451
+ coord_db.execute(
1452
+ "UPDATE merge_queue SET pr_number = ? WHERE issue_number = ?",
1453
+ (pr_number, issue),
1454
+ )
1455
+ coord_db.commit()
1456
+ _backdate(issue, DRIVE_STARTUP_GRACE_SECONDS + 60)
1457
+ cli("tick")
1458
+ assert queued(issue)["state"] == "parked"
1459
+
1460
+
1461
+ def test_a_parked_entry_resumes_on_a_live_gate_recheck_well_inside_the_ceiling(
1462
+ cli_no_gates, seed, launches, coord_db, live_ci_backend,
1463
+ ):
1464
+ """THE #2182 regression, reproduced rather than injected.
1465
+
1466
+ CI reports green seconds after the park — nowhere near
1467
+ `PARK_STALE_SECONDS` — and no live `coord merge` runs in between. Before
1468
+ #2182 this entry would sit `parked` until the 45-minute ceiling; now the
1469
+ very next tick asks the live gate itself (the same call `coord merge
1470
+ --plan` makes) and resumes immediately.
1471
+ """
1472
+ _park_with_pr(cli_no_gates, seed, coord_db)
1473
+ assert len(launches) == 1, launches
1474
+
1475
+ live_ci_backend([_green_check()])
1476
+
1477
+ result = cli_no_gates("tick")
1478
+ assert result.exit_code == 0, result.output
1479
+ entry = queued(2159)
1480
+ assert entry["state"] == "running" # resumed straight into a fresh launch
1481
+ assert entry["attempts"] == 0 # #1891: still free — no attempt spent
1482
+ assert len(launches) == 2, launches
1483
+
1484
+ status = cli_no_gates("status")
1485
+ assert "parked" not in status.output
1486
+
1487
+
1488
+ def test_a_parked_entry_with_ci_still_genuinely_running_stays_parked(
1489
+ cli_no_gates, seed, launches, coord_db, live_ci_backend,
1490
+ ):
1491
+ """The #1891 property must survive #2182 unchanged: CI genuinely still
1492
+ running is not evidence against the park — the live re-check agrees
1493
+ with it, every tick, with no hot-loop relaunch."""
1494
+ _park_with_pr(cli_no_gates, seed, coord_db)
1495
+ live_ci_backend([_running_check()])
1496
+
1497
+ for _ in range(3):
1498
+ result = cli_no_gates("tick")
1499
+ assert result.exit_code == 0, result.output
1500
+ assert queued(2159)["state"] == "parked"
1501
+ assert len(launches) == 1, launches # no second launch, ever
1502
+
1503
+ assert "1 parked" in cli_no_gates("status").output
1504
+
1505
+
1506
+ def test_a_live_ready_wins_even_over_a_stale_cached_plan_reading(
1507
+ cli_no_gates, seed, launches, coord_db, live_ci_backend, board_merge_plan,
1508
+ ):
1509
+ """#2182's acceptance bar, stated directly: the live re-check is
1510
+ authoritative over the CACHED board reading, not merely over its
1511
+ absence. The board's own `merge_plan` section here still says pending
1512
+ (not yet refreshed since the park — the #2158 unrefreshable case this
1513
+ suite's `board_merge_plan` fixture stands in for), which pre-#2182
1514
+ would hold the park for the full ceiling regardless of what a live
1515
+ check would say. The live gate — the same one `coord merge --plan`
1516
+ reads on demand — wins anyway: the queue must never report `parked`
1517
+ once it agrees."""
1518
+ _park_with_pr(cli_no_gates, seed, coord_db)
1519
+ board_merge_plan(_plan_row(2159, reason="CI running: test (3.12)", running=1))
1520
+ live_ci_backend([_green_check()])
1521
+
1522
+ result = cli_no_gates("tick")
1523
+ assert result.exit_code == 0, result.output
1524
+ assert queued(2159)["state"] == "running"
1525
+
1526
+
1300
1527
  def test_a_repeatedly_dead_drive_still_reaches_blocked_and_escalates(
1301
1528
  cli, seed, launches
1302
1529
  ):