code-coordinator 0.5.61__tar.gz → 0.5.63__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 (815) hide show
  1. {code_coordinator-0.5.61/code_coordinator.egg-info → code_coordinator-0.5.63}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.61 → code_coordinator-0.5.63/code_coordinator.egg-info}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/acceptance.py +69 -0
  5. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent.py +89 -11
  6. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/drive_queue.py +77 -14
  7. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/db.py +14 -0
  8. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dispatch.py +8 -0
  9. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive.py +27 -0
  10. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive_queue.py +179 -30
  11. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/merge_queue.py +55 -0
  12. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/models.py +16 -0
  13. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notify.py +18 -1
  14. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/reports.py +8 -0
  15. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/serve_app.py +5 -0
  16. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/state.py +28 -9
  17. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_author.py +22 -0
  18. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/AGENT_OPERATIONS.md +3 -2
  19. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_acceptance.py +65 -0
  20. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_zero_commit.py +166 -0
  21. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_drive_queue.py +163 -7
  22. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_db.py +98 -0
  23. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dispatch.py +35 -0
  24. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive.py +71 -0
  25. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_queue.py +109 -13
  26. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_merge_queue.py +124 -0
  27. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notify.py +60 -0
  28. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reports.py +25 -0
  29. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_author.py +31 -0
  30. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/drive_queue.rs +236 -26
  31. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/types.rs +11 -0
  32. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/fixtures/board_sample.json +2 -0
  33. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/board.md +0 -0
  34. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/complete-session.md +0 -0
  35. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/coordinator.md +0 -0
  36. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/_lib.sh +0 -0
  37. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-checkout +0 -0
  38. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-commit +0 -0
  39. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-merge +0 -0
  40. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/auto-release.yml +0 -0
  42. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/cargo-test.yml +0 -0
  43. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/publish.yml +0 -0
  44. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/release-tui.yml +0 -0
  45. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/test.yml +0 -0
  46. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.gitignore +0 -0
  47. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/CLAUDE.md +0 -0
  48. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/GOAL.md +0 -0
  49. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/LICENSE +0 -0
  50. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/MANIFEST.in +0 -0
  51. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/README.md +0 -0
  52. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/SOURCES.txt +0 -0
  53. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/dependency_links.txt +0 -0
  54. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/entry_points.txt +0 -0
  55. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/requires.txt +0 -0
  56. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/scm_file_list.json +0 -0
  57. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/top_level.txt +0 -0
  58. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/__init__.py +0 -0
  59. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/_board_mapping.py +0 -0
  60. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/acceptance_drivers.py +0 -0
  61. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent_app.py +0 -0
  62. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent_update.py +0 -0
  63. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/.gitignore +0 -0
  64. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/agents/work.md +0 -0
  65. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/routing.jsonc +0 -0
  66. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/audit.py +0 -0
  67. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/auto_loop.py +0 -0
  68. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_bool_guard.py +0 -0
  69. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_service.py +0 -0
  70. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_wire.py +0 -0
  71. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/brain.py +0 -0
  72. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/branch_model.py +0 -0
  73. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/bug_intake.py +0 -0
  74. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/cargo_cache.py +0 -0
  75. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/ci_github.py +0 -0
  76. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/ci_store.py +0 -0
  77. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/claim.py +0 -0
  78. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/cli.py +0 -0
  79. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/client.py +0 -0
  80. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/__init__.py +0 -0
  81. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/_common.py +0 -0
  82. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/acceptance.py +0 -0
  83. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/agent_ops.py +0 -0
  84. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/audit.py +0 -0
  85. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/chat.py +0 -0
  86. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/dispatch.py +0 -0
  87. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/dispatch_workers.py +0 -0
  88. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/drive.py +0 -0
  89. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/gate_a.py +0 -0
  90. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/gates.py +0 -0
  91. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/issues.py +0 -0
  92. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/lifecycle.py +0 -0
  93. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/merge.py +0 -0
  94. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/milestone.py +0 -0
  95. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/plan_followup.py +0 -0
  96. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/plans.py +0 -0
  97. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/portal.py +0 -0
  98. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/release.py +0 -0
  99. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/report.py +0 -0
  100. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/review.py +0 -0
  101. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/scorecard.py +0 -0
  102. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/sessions.py +0 -0
  103. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/setup.py +0 -0
  104. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/status.py +0 -0
  105. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/test_gate.py +0 -0
  107. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/tui.py +0 -0
  108. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/comments.py +0 -0
  109. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/config.py +0 -0
  110. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/conflict_fix.py +0 -0
  111. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dao.py +0 -0
  112. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/__init__.py +0 -0
  113. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/fixture.py +0 -0
  114. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/index.html +0 -0
  115. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/server.py +0 -0
  116. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/terminal.py +0 -0
  117. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/.gitignore +0 -0
  118. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/components.json +0 -0
  119. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  120. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  121. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  122. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  123. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  124. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  125. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  126. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  127. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  128. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/index.html +0 -0
  129. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  130. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/sw.js +0 -0
  131. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  132. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  133. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  134. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  135. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  136. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  137. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  138. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  139. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  140. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  141. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/eslint.config.js +0 -0
  142. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/index.html +0 -0
  143. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  144. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/package-lock.json +0 -0
  145. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/package.json +0 -0
  146. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  147. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/playwright.config.ts +0 -0
  148. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/postcss.config.js +0 -0
  149. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  150. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  151. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  152. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/App.tsx +0 -0
  153. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/api/client.ts +0 -0
  154. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  155. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  156. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  157. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  158. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  159. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  160. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  161. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  162. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  163. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  164. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  165. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  166. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  167. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  168. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  169. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  170. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  171. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  172. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  173. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  174. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  175. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  176. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  177. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  178. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  179. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  180. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  181. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  182. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  183. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  184. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  185. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  186. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  187. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  188. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  189. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/index.css +0 -0
  190. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  191. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  192. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/main.tsx +0 -0
  193. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  194. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  195. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  196. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  197. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  198. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  199. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  200. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  201. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  202. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  203. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  204. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  205. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  206. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  207. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  208. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  209. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  210. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  211. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  212. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  213. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  214. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  215. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  216. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tailwind.config.js +0 -0
  217. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tsconfig.json +0 -0
  218. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  219. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/vite.config.ts +0 -0
  220. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dead_end.py +0 -0
  221. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/README.md +0 -0
  222. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-agent.service +0 -0
  223. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.service +0 -0
  224. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.sh +0 -0
  225. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.timer +0 -0
  226. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-drive-queue.service +0 -0
  227. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-drive-queue.timer +0 -0
  228. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-notify.service +0 -0
  229. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-notify.timer +0 -0
  230. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-propagate.service +0 -0
  231. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-propagate.timer +0 -0
  232. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-window.service +0 -0
  233. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-window.timer +0 -0
  234. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-serve.service +0 -0
  235. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web-dist-build.service +0 -0
  236. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web-dist-build.timer +0 -0
  237. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web.service +0 -0
  238. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy_manifest.py +0 -0
  239. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy_units.py +0 -0
  240. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deps.py +0 -0
  241. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/diagnose.py +0 -0
  242. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dist_name.py +0 -0
  243. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive_state.py +0 -0
  244. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/events.py +0 -0
  245. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/failure_class.py +0 -0
  246. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/filelock.py +0 -0
  247. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/fleet_config_health.py +0 -0
  248. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/freshness.py +0 -0
  249. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_a.py +0 -0
  250. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_b.py +0 -0
  251. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_snapshot.py +0 -0
  252. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gates.py +0 -0
  253. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/github_ops.py +0 -0
  254. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/goal.py +0 -0
  255. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/graph_health.py +0 -0
  256. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/__init__.py +0 -0
  257. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/aggregate.py +0 -0
  258. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/__init__.py +0 -0
  259. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/agent_install.py +0 -0
  260. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/cargo_targets.py +0 -0
  261. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/claude_binary.py +0 -0
  262. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/deploy_lane_facts.py +0 -0
  263. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/disk.py +0 -0
  264. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_board.py +0 -0
  265. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  266. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_phantom.py +0 -0
  267. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_unit_drift.py +0 -0
  268. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/graph.py +0 -0
  269. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/plan_usage.py +0 -0
  270. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/repo_state.py +0 -0
  271. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/spawned_coord.py +0 -0
  272. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/timer_active.py +0 -0
  273. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/toolchain.py +0 -0
  274. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/unit_drift.py +0 -0
  275. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/unit_enablement.py +0 -0
  276. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/worktrees.py +0 -0
  277. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/cli.py +0 -0
  278. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/context.py +0 -0
  279. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/fleet_snapshot.py +0 -0
  280. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/models.py +0 -0
  281. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/pypi.py +0 -0
  282. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/registry.py +0 -0
  283. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/render.py +0 -0
  284. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/units.py +0 -0
  285. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/hooks.py +0 -0
  286. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/housekeeping.py +0 -0
  287. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/interactive.py +0 -0
  288. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/issue_store.py +0 -0
  289. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/liveness_auditor.py +0 -0
  290. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/machine_pause.py +0 -0
  291. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_chat.py +0 -0
  292. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_dispatch.py +0 -0
  293. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_gate.py +0 -0
  294. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_order.py +0 -0
  295. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/mock_author.py +0 -0
  296. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/network.py +0 -0
  297. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/new_issue_chat.py +0 -0
  298. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/__init__.py +0 -0
  299. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/baseline.py +0 -0
  300. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/cli.py +0 -0
  301. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/collect.py +0 -0
  302. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/digest.py +0 -0
  303. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/models.py +0 -0
  304. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/predicate.py +0 -0
  305. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/service.py +0 -0
  306. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/store.py +0 -0
  307. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/transport.py +0 -0
  308. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/openapi.py +0 -0
  309. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/overlap_fence.py +0 -0
  310. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/parentage.py +0 -0
  311. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/parentage_github.py +0 -0
  312. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/pipeline.py +0 -0
  313. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/plan_parser.py +0 -0
  314. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/plans.py +0 -0
  315. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/platform_paths.py +0 -0
  316. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/portal_bridge.py +0 -0
  317. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/pr_body_lint.py +0 -0
  318. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/prereqs.py +0 -0
  319. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/progress.py +0 -0
  320. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/__init__.py +0 -0
  321. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/base.py +0 -0
  322. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/claude.py +0 -0
  323. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/claude_pty.py +0 -0
  324. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/opencode.py +0 -0
  325. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/reconcile.py +0 -0
  326. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/refine_chat.py +0 -0
  327. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_cordon.py +0 -0
  328. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_propagate.py +0 -0
  329. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_verify.py +0 -0
  330. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_window.py +0 -0
  331. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/revalidate.py +0 -0
  332. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/review.py +0 -0
  333. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/scorecard.py +0 -0
  334. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/skills/update-issue/SKILL.md +0 -0
  335. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/smoke.py +0 -0
  336. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_chat.py +0 -0
  340. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_orchestrator.py +0 -0
  341. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_report.py +0 -0
  342. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/tui_release.py +0 -0
  343. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage.py +0 -0
  344. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage_limits.py +0 -0
  345. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage_rollup.py +0 -0
  346. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/worker_events.py +0 -0
  347. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coordinator.example.yml +0 -0
  348. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-agent.service +0 -0
  349. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.service +0 -0
  350. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.sh +0 -0
  351. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.timer +0 -0
  352. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-drive-queue.service +0 -0
  353. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-drive-queue.timer +0 -0
  354. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-notify.service +0 -0
  355. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-notify.timer +0 -0
  356. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-propagate.service +0 -0
  357. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-propagate.timer +0 -0
  358. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-window.service +0 -0
  359. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-window.timer +0 -0
  360. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-serve.service +0 -0
  361. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.service +0 -0
  362. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.sh +0 -0
  363. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.timer +0 -0
  364. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-rollback.sh +0 -0
  365. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web.service +0 -0
  366. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/node-shim.sh +0 -0
  367. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ARCHITECTURE.md +0 -0
  368. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ARCH_SECURITY_GATES.md +0 -0
  369. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/COCKPIT.md +0 -0
  370. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CONTROL_CENTER.md +0 -0
  371. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CROSS_PLATFORM.md +0 -0
  372. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CUSTOMER_PORTAL.md +0 -0
  373. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/DRIVE_QUEUE.md +0 -0
  374. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/EPHEMERAL_WORKERS.md +0 -0
  375. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/FORGE_MIGRATION.md +0 -0
  376. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/GRAPHIFY_SETUP.md +0 -0
  377. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ISSUE_GUIDANCE.md +0 -0
  378. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/MAC_MINI.md +0 -0
  379. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  380. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/NOTIFIER.md +0 -0
  381. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/OPENCODE_VERIFICATION.md +0 -0
  382. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/OPERATING_GOTCHAS.md +0 -0
  383. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ORACLE_LOOP.md +0 -0
  384. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PHONE_WEBAPP.md +0 -0
  385. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PIPELINE_V2.md +0 -0
  386. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PLATFORM_EVOLUTION.md +0 -0
  387. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/SECOND_BACKEND.md +0 -0
  388. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/STORE_SERVICE.md +0 -0
  389. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  390. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/WEB_CONTROL_CENTER.md +0 -0
  391. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/README.md +0 -0
  392. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/_tokens.css +0 -0
  393. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/issue-detail.html +0 -0
  394. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/pipeline-narrow.html +0 -0
  395. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/pipeline-wide.html +0 -0
  396. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/graphify-out/.gitignore +0 -0
  397. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/install-agent.sh +0 -0
  398. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/pyproject.toml +0 -0
  399. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/audit_review_verdict_overrides.py +0 -0
  400. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  401. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/build-worker-image.sh +0 -0
  402. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/coordinator-machine.py +0 -0
  403. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/epic-down.sh +0 -0
  404. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/epic-up.sh +0 -0
  405. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/preflight.sh +0 -0
  406. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/provision-worker.sh +0 -0
  407. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  408. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  409. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/verify-github-token.sh +0 -0
  410. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/codegen.py +0 -0
  411. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/coord-test-runner.sh +0 -0
  412. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/gen_board_fixture.py +0 -0
  414. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/next_release_tag.py +0 -0
  415. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/run_tests_in_populated_home.sh +0 -0
  416. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/run_tests_without_gh.sh +0 -0
  417. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/smoke_437_interactive.py +0 -0
  418. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/setup.cfg +0 -0
  422. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  425. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/contract.md +0 -0
  426. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/manifest.yml +0 -0
  427. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  428. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  429. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  430. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  431. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/contract.md +0 -0
  437. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/manifest.yml +0 -0
  438. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  439. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  440. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  441. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  442. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  443. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  444. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  445. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  446. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  447. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  448. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/contract.md +0 -0
  449. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  450. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  451. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/manifest.yml +0 -0
  452. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  453. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/tsconfig.json +0 -0
  454. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  455. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/conftest.py +0 -0
  456. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/board-pipeline-basic.json +0 -0
  457. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  458. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  459. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  460. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/all_pass.json +0 -0
  461. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  462. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/mixed_fail.json +0 -0
  463. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  464. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  465. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/skip.json +0 -0
  466. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/truncated.json +0 -0
  467. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  468. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  469. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  470. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  471. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  472. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  473. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  474. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  475. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_acceptance_drivers.py +0 -0
  476. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent.py +0 -0
  477. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_api_error.py +0 -0
  478. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_app.py +0 -0
  479. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_branch_base.py +0 -0
  480. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_branch_capture.py +0 -0
  481. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_config_free_1712.py +0 -0
  482. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_deploy_units_endpoint.py +0 -0
  483. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_dirty_worktree.py +0 -0
  484. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_graph_self_heal.py +0 -0
  485. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_health_h3.py +0 -0
  486. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_idle_restart.py +0 -0
  487. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_push_failure.py +0 -0
  488. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_reap.py +0 -0
  489. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_repos_and_pull.py +0 -0
  490. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_restart_services_endpoint.py +0 -0
  491. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_startup_diagnostics.py +0 -0
  492. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_update.py +0 -0
  493. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_update_bluegreen.py +0 -0
  494. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_usage_limit.py +0 -0
  495. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ambient_home_isolation.py +0 -0
  496. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_approve_reject_plan.py +0 -0
  497. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_approve_usage_gate.py +0 -0
  498. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_assignment_already_recorded_daemon.py +0 -0
  499. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_log.py +0 -0
  500. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_outcome.py +0 -0
  501. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_query.py +0 -0
  502. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_auto_loop.py +0 -0
  503. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_auto_release_publish_2035.py +0 -0
  504. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_base_checkout_restore.py +0 -0
  505. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_cap_762.py +0 -0
  506. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_fixture.py +0 -0
  507. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_read_path.py +0 -0
  508. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_service.py +0 -0
  509. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_state.py +0 -0
  510. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_wire.py +0 -0
  511. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_brain.py +0 -0
  512. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_branch_model.py +0 -0
  513. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_bug_intake.py +0 -0
  514. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_build_worker_image_env_update.py +0 -0
  515. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cargo_cache.py +0 -0
  516. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ci_acceptance_gate_1950.py +0 -0
  517. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ci_store.py +0 -0
  518. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_claim.py +0 -0
  519. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_acceptance.py +0 -0
  520. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign.py +0 -0
  521. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  522. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_interactive_remote.py +0 -0
  523. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_provider.py +0 -0
  524. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_audit.py +0 -0
  525. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_chat_continue.py +0 -0
  526. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_diagnose_config_provenance.py +0 -0
  527. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_diagnose_graph.py +0 -0
  528. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor.py +0 -0
  529. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor_config_free_1801.py +0 -0
  530. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  531. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_drive.py +0 -0
  532. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_escalate.py +0 -0
  533. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_fix_headless_review.py +0 -0
  534. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_gate_a.py +0 -0
  535. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_install_drift.py +0 -0
  536. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_install_skills.py +0 -0
  537. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_issue_create_label.py +0 -0
  538. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_issue_reopen.py +0 -0
  539. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_merge.py +0 -0
  540. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_assign.py +0 -0
  541. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_capture.py +0 -0
  542. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_chat_add_child.py +0 -0
  543. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_dispatch.py +0 -0
  544. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_gate_b.py +0 -0
  545. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_gate_c.py +0 -0
  546. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_order.py +0 -0
  547. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  548. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_ship.py +0 -0
  549. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_network.py +0 -0
  550. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_new_issue_chat.py +0 -0
  551. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_plans.py +0 -0
  552. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_portal.py +0 -0
  553. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_pull_artifact.py +0 -0
  554. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_queue.py +0 -0
  555. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_reattach_sessions.py +0 -0
  556. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_refine_board.py +0 -0
  557. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_preflight.py +0 -0
  558. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_propagate.py +0 -0
  559. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_window.py +0 -0
  560. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_scorecard.py +0 -0
  561. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_set_review_findings.py +0 -0
  562. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_advisory_terminal.py +0 -0
  563. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_merge_queue.py +0 -0
  564. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_provider.py +0 -0
  565. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_review_finalizing.py +0 -0
  566. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_test_failed_tag.py +0 -0
  567. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_usage_limit.py +0 -0
  568. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_sync_comments_873.py +0 -0
  569. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_test_plan.py +0 -0
  570. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_track.py +0 -0
  571. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_tui_update.py +0 -0
  572. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_wait.py +0 -0
  573. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_client_base_install.py +0 -0
  574. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_comments.py +0 -0
  575. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_completion_summary.py +0 -0
  576. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config.py +0 -0
  577. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_acceptance.py +0 -0
  578. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_audit.py +0 -0
  579. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_pricing.py +0 -0
  580. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_usage_gate.py +0 -0
  581. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_conflict_fix.py +0 -0
  582. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_conflict_fix_semantic.py +0 -0
  583. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test.py +0 -0
  584. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_baseline.py +0 -0
  585. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_routing.py +0 -0
  586. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_toolchain.py +0 -0
  587. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_web_sse_restart_live.py +0 -0
  588. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coordinator_machine.py +0 -0
  589. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cross_platform_imports.py +0 -0
  590. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard.py +0 -0
  591. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_fixture.py +0 -0
  592. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_terminal.py +0 -0
  593. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_terminal_live.py +0 -0
  594. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dead_end.py +0 -0
  595. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_db_backup.py +0 -0
  596. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_web_dist.py +0 -0
  597. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_web_rollback.py +0 -0
  598. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_drive_queue_unit.py +0 -0
  599. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_manifest.py +0 -0
  600. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_units_lane.py +0 -0
  601. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_web_unit.py +0 -0
  602. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deps.py +0 -0
  603. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_diagnose.py +0 -0
  604. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dispatch_target_validation.py +0 -0
  605. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dist_name.py +0 -0
  606. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_done_housekeeping.py +0 -0
  607. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_state.py +0 -0
  608. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_tmux.py +0 -0
  609. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_capability_detection.py +0 -0
  610. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  611. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_image_provenance.py +0 -0
  612. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_errors.py +0 -0
  613. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_events.py +0 -0
  614. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_failure_class.py +0 -0
  615. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_filelock.py +0 -0
  616. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  617. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fix_of_force_override.py +0 -0
  618. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_config_health.py +0 -0
  619. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_health_probes.py +0 -0
  620. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_health_snapshot.py +0 -0
  621. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_freshness.py +0 -0
  622. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_a.py +0 -0
  623. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_b.py +0 -0
  624. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_snapshot_staleness.py +0 -0
  625. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gates.py +0 -0
  626. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_generated_types_fixture.py +0 -0
  627. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_github_ops.py +0 -0
  628. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_goal.py +0 -0
  629. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_graph_health.py +0 -0
  630. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_handoff.py +0 -0
  631. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_checks.py +0 -0
  632. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_cli.py +0 -0
  633. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_cli_graph.py +0 -0
  634. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_config.py +0 -0
  635. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_context.py +0 -0
  636. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_deploy_lane_facts.py +0 -0
  637. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_incident_regression.py +0 -0
  638. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_pypi.py +0 -0
  639. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_registry.py +0 -0
  640. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_timer_active.py +0 -0
  641. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_toolchain.py +0 -0
  642. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_unit_drift.py +0 -0
  643. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_unit_enablement.py +0 -0
  644. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_hooks.py +0 -0
  645. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_human_attended_437.py +0 -0
  646. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_init.py +0 -0
  647. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_integration.py +0 -0
  648. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_briefing_echo.py +0 -0
  649. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_prefill_state.py +0 -0
  650. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_session_relaunch.py +0 -0
  651. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_test_verdict_backstop.py +0 -0
  652. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_token_attribution.py +0 -0
  653. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_worktree.py +0 -0
  654. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_issue_store_seam.py +0 -0
  655. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_liveness_auditor.py +0 -0
  656. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_liveness_notify.py +0 -0
  657. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_machine_pause.py +0 -0
  658. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_merge_verify.py +0 -0
  659. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_chat.py +0 -0
  660. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_dispatch.py +0 -0
  661. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_gate.py +0 -0
  662. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_order.py +0 -0
  663. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_seam.py +0 -0
  664. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_mock_author.py +0 -0
  665. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_model_tiering.py +0 -0
  666. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_models.py +0 -0
  667. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_models_config_labels.py +0 -0
  668. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_needs_attention.py +0 -0
  669. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_network.py +0 -0
  670. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_new_issue_chat.py +0 -0
  671. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_next_release_tag.py +0 -0
  672. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_no_direct_gh_calls.py +0 -0
  673. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_node_shim.py +0 -0
  674. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_baseline.py +0 -0
  675. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_cli.py +0 -0
  676. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_collect.py +0 -0
  677. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_config.py +0 -0
  678. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_drive_seam.py +0 -0
  679. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_isolation.py +0 -0
  680. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_predicate.py +0 -0
  681. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_quiet_hours.py +0 -0
  682. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_service.py +0 -0
  683. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notify_drain.py +0 -0
  684. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_openapi.py +0 -0
  685. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_operational_defaults.py +0 -0
  686. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_overlap_fence.py +0 -0
  687. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_packaged_deploy_units.py +0 -0
  688. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_parentage.py +0 -0
  689. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_paste_landed.py +0 -0
  690. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_pipeline.py +0 -0
  691. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_approve_plan_command.py +0 -0
  692. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_pr_command.py +0 -0
  693. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_review_command.py +0 -0
  694. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_only.py +0 -0
  695. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_parser.py +0 -0
  696. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_platform_paths.py +0 -0
  697. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_portal_bridge.py +0 -0
  698. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_portal_config.py +0 -0
  699. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_pr_body_lint.py +0 -0
  700. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_prereqs.py +0 -0
  701. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_production_db_guard.py +0 -0
  702. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_progress.py +0 -0
  703. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_provider_seam.py +0 -0
  704. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers.py +0 -0
  705. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers_config_labels.py +0 -0
  706. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers_pty.py +0 -0
  707. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_quiet_hours.py +0 -0
  708. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_quiet_hours_store_2146.py +0 -0
  709. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reap_merged_sessions.py +0 -0
  710. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reap_stale_interactive_tick.py +0 -0
  711. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_branch.py +0 -0
  712. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_completions.py +0 -0
  713. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_merges.py +0 -0
  714. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_usage_limit_done.py +0 -0
  715. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_refine_chat.py +0 -0
  716. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_cordon_2101.py +0 -0
  717. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_propagate.py +0 -0
  718. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_unified_1242.py +0 -0
  719. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_verify.py +0 -0
  720. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_window.py +0 -0
  721. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_remote_auto_prune.py +0 -0
  722. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_remote_interactive_reaper.py +0 -0
  723. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_report_result_push.py +0 -0
  724. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry.py +0 -0
  725. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry_advisory_1606.py +0 -0
  726. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry_type_1636.py +0 -0
  727. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_revalidate.py +0 -0
  728. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review.py +0 -0
  729. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_end_review_without_verdict.py +0 -0
  730. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_parse_failure_diagnostic.py +0 -0
  731. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_reaffirm.py +0 -0
  732. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_state.py +0 -0
  733. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_backstop.py +0 -0
  734. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_override_audit.py +0 -0
  735. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_relay.py +0 -0
  736. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_zero_commits.py +0 -0
  737. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_scoped_review_wiring.py +0 -0
  738. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_scorecard.py +0 -0
  739. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_serve.py +0 -0
  740. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_serve_app_board_trim.py +0 -0
  741. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_session.py +0 -0
  742. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_slice_issue_attribution.py +0 -0
  743. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke.py +0 -0
  744. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke_live_checkout_restore.py +0 -0
  745. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke_workflow.py +0 -0
  746. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_spend_ceiling.py +0 -0
  747. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_spend_ceiling_coordinator.py +0 -0
  748. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_split.py +0 -0
  749. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_split_work.py +0 -0
  750. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stage_projection.py +0 -0
  751. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stalled_pipeline.py +0 -0
  752. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_state.py +0 -0
  753. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_state_review_findings_daemon.py +0 -0
  754. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_status_fleet_footer.py +0 -0
  755. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stop_1567.py +0 -0
  756. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stuck.py +0 -0
  757. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_terminal_command.py +0 -0
  758. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_chat.py +0 -0
  759. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_orchestrator.py +0 -0
  760. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_report.py +0 -0
  761. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_verdict_parsing.py +0 -0
  762. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_verdict_transcript_floor.py +0 -0
  763. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_board_audit.py +0 -0
  764. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_config_load_1080.py +0 -0
  765. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_daemon_routing_906.py +0 -0
  766. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_tmux_host.py +0 -0
  767. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_tmux_session.py +0 -0
  768. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_transcript_floor.py +0 -0
  769. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage.py +0 -0
  770. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage_limits.py +0 -0
  771. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage_rollup.py +0 -0
  772. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_venv_live_install_2121.py +0 -0
  773. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_version_single_source.py +0 -0
  774. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_watch.py +0 -0
  775. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_events.py +0 -0
  776. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_image_pin_sync.py +0 -0
  777. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_safety.py +0 -0
  778. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_test_scoping.py +0 -0
  779. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worktree.py +0 -0
  780. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  781. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/Cargo.lock +0 -0
  782. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/Cargo.toml +0 -0
  783. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/cargo-config-local-quadraui.toml.example +0 -0
  784. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/audit.rs +0 -0
  785. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/chat.rs +0 -0
  786. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/data.rs +0 -0
  787. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/dialogs.rs +0 -0
  788. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/drive.rs +0 -0
  789. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/workspace.rs +0 -0
  809. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/bin/gtk.rs +0 -0
  810. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/commands.rs +0 -0
  811. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/lib.rs +0 -0
  812. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/main.rs +0 -0
  813. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/settings.rs +0 -0
  814. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/acceptance.rs +0 -0
  815. {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/cli.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.61
3
+ Version: 0.5.63
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.61
3
+ Version: 0.5.63
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.61",
2
+ "tag": "0.5.63",
3
3
  "distance": 0,
4
- "node": "g74884c7dae4507e48a87e147dbfae31765822fd5",
4
+ "node": "gb547d297bb611bfa65077c4a7d42c08edbf3cd8c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -886,6 +886,75 @@ def find_ms_manifest_for_issue_via_api(
886
886
  return None
887
887
 
888
888
 
889
+ def missing_expected_red_warning(
890
+ repo_github: str, branch: str, issue_number: int, *, gh_ops: Any = None,
891
+ ) -> str | None:
892
+ """#2191 — the writer/gate seam: is *issue_number* the signature of an
893
+ unwritten ``expected_red`` registry on *branch*'s manifest? That
894
+ signature is checkable without ever running the suite: the manifest
895
+ maps at least one test id to *issue_number* (a slice was authored for
896
+ it) but records ZERO ``expected_red`` entries for it, and the issue is
897
+ still open. #2164 shipped a reader (:func:`apply_expected_red`), a
898
+ clearer (:func:`clear_expected_red_via_pr`) and a lister
899
+ (:func:`list_expected_red_via_api`) for this registry but no writer —
900
+ :data:`coord.test_author.TEST_AUTHOR_SYSTEM_PROMPT` step 4b is the
901
+ writer (the test-author records what it observed FAIL in its step-4
902
+ run). This function is the gate half: it does not trust the prompt was
903
+ followed, so it re-derives "was anything recorded" from the manifest
904
+ itself at slice-PR-open time (:func:`coord.merge_queue.process`'s
905
+ "Open PRs first" loop, gated on ``assignment_type == "test-author"``)
906
+ and flags exactly the case a skipped step 4b produces.
907
+
908
+ Returns ``None`` — nothing to flag — when: *branch*'s manifest doesn't
909
+ reference *issue_number* at all (no slice authored yet, out of scope);
910
+ ``expected_red`` already has a non-empty entry for it (the writer did
911
+ its job, or the slice is genuinely all-green and needs none); the issue
912
+ is closed (its slice already served its purpose — flagging it now is
913
+ stale noise, not #2191's live deadlock); or any lookup fails. The last
914
+ case is deliberate fail-open, matching every other best-effort API
915
+ sweep in this module (:func:`find_ms_manifest_for_issue_via_api`,
916
+ :func:`coord.merge_queue._issue_has_expected_red_entries`) — this check
917
+ is advisory (see the "refused or warned" phrasing in #2191's acceptance
918
+ criteria; callers choose which), so an unreachable API must degrade to
919
+ "say nothing," never to blocking a PR the check itself couldn't
920
+ evaluate.
921
+
922
+ Otherwise returns a human-readable warning naming the missing ids.
923
+ """
924
+ ops = gh_ops or _default_github_ops()
925
+ found = find_ms_manifest_for_issue_via_api(
926
+ repo_github, branch, issue_number, gh_ops=ops,
927
+ )
928
+ if found is None:
929
+ return None
930
+ path, _text, _blob_sha, data = found
931
+ if data.expected_red.get(issue_number):
932
+ return None
933
+ test_ids = test_ids_for_issue(data.tests, issue_number)
934
+ if not test_ids:
935
+ return None
936
+ live_state = getattr(ops, "get_issues_live_state", None)
937
+ if live_state is None:
938
+ return None
939
+ try:
940
+ states = live_state(repo_github, [issue_number])
941
+ except Exception: # noqa: BLE001 — best-effort, fail open (see docstring)
942
+ return None
943
+ if states.get(issue_number) != "open":
944
+ return None
945
+ return (
946
+ f"#{issue_number}: {path} maps {len(test_ids)} test-id(s) to this "
947
+ f"issue ({', '.join(sorted(test_ids))}) but records no "
948
+ "`expected_red` entries for it — the #2191 signature of an "
949
+ "unwritten registry (the test-author's step 4b never ran, or was "
950
+ "skipped). If this slice is genuinely all-green already, ignore; "
951
+ "otherwise every red id here fails CI with nothing telling "
952
+ "`coord acceptance run --all --ci` that's expected, and `coord "
953
+ "merge` will need `--force-merge` or a hand-edited manifest to "
954
+ "land it."
955
+ )
956
+
957
+
889
958
  def list_expected_red_via_api(
890
959
  repo_github: str, branch: str, *, gh_ops: Any = None,
891
960
  ) -> "dict[str, dict[int, frozenset[str]]]":
@@ -26,6 +26,7 @@ from pathlib import Path
26
26
  from typing import TYPE_CHECKING, Any, Callable, Iterable
27
27
 
28
28
  from coord import cargo_cache
29
+ from coord.models import DELIVERABLE_ANALYSIS_LABEL
29
30
  from coord.platform_paths import default_coord_dir
30
31
 
31
32
  if TYPE_CHECKING:
@@ -604,6 +605,19 @@ class AssignmentSpec:
604
605
  # `AssignmentSpec(**body)` in agent_app.py 400s on those) unless the
605
606
  # operator has actually configured one.
606
607
  cost_ceiling_usd: float | None = None
608
+ # #2188: the issue's GitHub label names, mirroring `Proposal.issue_labels`
609
+ # (#1430) — carried on the wire so a reap running on a config-free agent
610
+ # (docs/EPHEMERAL_WORKERS.md; no local DB or GitHub token to ask) can
611
+ # still see `coord.models.DELIVERABLE_ANALYSIS_LABEL` without an extra
612
+ # round-trip. Only `coord/dispatch.py`'s `dispatch()` populates this (from
613
+ # `proposal.issue_labels`, itself only set for `type="work"` dispatches —
614
+ # see #1430's `model_for_labels`/`provider_for_labels` gating), and only
615
+ # when non-empty — an agent predating this field 400s on an unrecognized
616
+ # kwarg (`AssignmentSpec(**body)` in agent_app.py), same discipline as
617
+ # every other optional wire field above. Empty by default: a spec with no
618
+ # labels (or dispatched by a caller that never populated
619
+ # `Proposal.issue_labels`) behaves exactly as before this field existed.
620
+ issue_labels: list[str] = field(default_factory=list)
607
621
 
608
622
 
609
623
  class _GitError(RuntimeError):
@@ -2700,6 +2714,11 @@ class AgentAssignment:
2700
2714
  # #448: advisory reason when the worker exited cleanly (exit_code==0) but
2701
2715
  # pushed 0 commits. None on all other status values.
2702
2716
  #
2717
+ # #2188: also None (never set) for an issue labelled `deliverable:
2718
+ # analysis` — that shape lands on `status == DONE`/`analysis_deliverable
2719
+ # = True` below instead, since 0 commits is its SUCCESS condition, not
2720
+ # something advisory.
2721
+ #
2703
2722
  # #1323 used to *also* reuse this field (for "work"-type assignments,
2704
2723
  # see _ADVISORY_TYPES) to hold a reason when a configured artifact_paths
2705
2724
  # glob matched 0 files, downgrading DONE -> ADVISORY in the process.
@@ -2787,6 +2806,26 @@ class AgentAssignment:
2787
2806
  # ceiling kill is indistinguishable from a crash and the money is spent
2788
2807
  # again on the next pass.
2789
2808
  spend_ceiling_reason: str | None = None
2809
+ # #2188: True when `_reap` classified a clean (exit_code==0), 0-commit
2810
+ # exit as a DELIVERABLE — the issue was labelled
2811
+ # `coord.models.DELIVERABLE_ANALYSIS_LABEL` (`spec.issue_labels`) — rather
2812
+ # than the #448 "worker did nothing" ADVISORY. Only ever set alongside
2813
+ # `status == DONE`; `False` on every other outcome, including a normal
2814
+ # zero-commit ADVISORY (the label wasn't present) and a labelled issue
2815
+ # whose worker actually pushed commits (that's an ordinary DONE, handled
2816
+ # by the ordinary Test/Review/Merge pipeline — this flag is specifically
2817
+ # "the deliverable IS the message, there is no diff").
2818
+ analysis_deliverable: bool = False
2819
+ # #2188: the worker's own final message — `result` off the last
2820
+ # stream-json `result` event (`coord.worker_events.WorkerSummary.
2821
+ # result_text`), captured here so the coordinator can post the actual
2822
+ # deliverable (a diagnosis/audit's prose) to the issue instead of a bare
2823
+ # "assignment complete" comment. The worker itself has no `gh` access to
2824
+ # post this — see coord.notify.post_transition's EVENT_COMPLETION arm.
2825
+ # Populated only when `analysis_deliverable` is True; `None` otherwise
2826
+ # (a normal work assignment's deliverable is the diff itself, already
2827
+ # visible on the PR — restating the transcript there would be noise).
2828
+ result_text: str | None = None
2790
2829
 
2791
2830
  def to_dict(self) -> dict:
2792
2831
  d = asdict(self)
@@ -7209,6 +7248,16 @@ class AgentServer:
7209
7248
  # ("work",) to the full work-like set so `test-author`/`mock-author`
7210
7249
  # get the same downgrade; before that they could land on `done` with
7211
7250
  # an empty branch.
7251
+ # #2188: an issue labelled `deliverable:analysis` inverts the #448
7252
+ # reading — for it, a clean exit with 0 commits is the SUCCESS
7253
+ # condition (the deliverable is the worker's own final message, not
7254
+ # a diff), not the "worker did nothing" anomaly. Detected off
7255
+ # `assignment.spec.issue_labels` (wire field, #2188) so this works on
7256
+ # a config-free agent too — no DB or GitHub read required. Resolved
7257
+ # in the SAME `_ahead == 0` branch as the advisory check below so
7258
+ # the two can never disagree about what "0 commits" means for this
7259
+ # assignment.
7260
+ _analysis_deliverable = False
7212
7261
  _zero_commit_reason: str | None = None
7213
7262
  if (exit_code == 0 and assignment is not None
7214
7263
  and assignment.worktree_path
@@ -7218,17 +7267,30 @@ class AgentServer:
7218
7267
  _base = assignment.spec.branch or "main"
7219
7268
  _ahead = self._commits_ahead(_wt_advisory, _base)
7220
7269
  if _ahead == 0:
7221
- _zero_commit_reason = (
7222
- "worker exited cleanly but pushed 0 commits"
7223
- )
7224
- try:
7225
- with open(assignment.log_path, "a") as reopen:
7226
- reopen.write(
7227
- "# reap: advisory 0 commits ahead of "
7228
- f"{_base}; status set to advisory\n"
7229
- )
7230
- except OSError:
7231
- pass
7270
+ if DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
7271
+ _analysis_deliverable = True
7272
+ try:
7273
+ with open(assignment.log_path, "a") as reopen:
7274
+ reopen.write(
7275
+ "# reap: analysis deliverable — 0 commits "
7276
+ f"ahead of {_base}; issue labelled "
7277
+ f"{DELIVERABLE_ANALYSIS_LABEL!r}, status "
7278
+ "set to done (#2188)\n"
7279
+ )
7280
+ except OSError:
7281
+ pass
7282
+ else:
7283
+ _zero_commit_reason = (
7284
+ "worker exited cleanly but pushed 0 commits"
7285
+ )
7286
+ try:
7287
+ with open(assignment.log_path, "a") as reopen:
7288
+ reopen.write(
7289
+ "# reap: advisory — 0 commits ahead of "
7290
+ f"{_base}; status set to advisory\n"
7291
+ )
7292
+ except OSError:
7293
+ pass
7232
7294
 
7233
7295
  # This block MUST always run regardless of push outcome so that
7234
7296
  # the assignment transitions out of 'running'.
@@ -7296,6 +7358,22 @@ class AgentServer:
7296
7358
  assignment.zero_commit_reason = _zero_commit_reason
7297
7359
  else:
7298
7360
  assignment.status = DONE
7361
+ if _analysis_deliverable:
7362
+ # #2188: 0 commits on a `deliverable:analysis`
7363
+ # issue is the success shape — capture the
7364
+ # worker's own final message (already parsed
7365
+ # into `_worker_summary` above) so the
7366
+ # coordinator can post the actual deliverable to
7367
+ # the issue instead of a bare "complete" comment.
7368
+ # Best-effort: a non-stream-json log (or one with
7369
+ # no terminal `result` event) just leaves
7370
+ # `result_text` `None` — the assignment is still
7371
+ # correctly `done`, only the auto-posted prose is
7372
+ # missing, same degradation as every other
7373
+ # best-effort log parse in this function.
7374
+ assignment.analysis_deliverable = True
7375
+ if _worker_summary is not None and _worker_summary.result_text:
7376
+ assignment.result_text = _worker_summary.result_text
7299
7377
  else:
7300
7378
  assignment.status = FAILED
7301
7379
  # #1461: only ever attaches to a FAILED/ADVISORY transition —
@@ -43,6 +43,8 @@ from coord.drive_queue import (
43
43
  DEFAULT_MAX_ATTEMPTS,
44
44
  DEFAULT_MAX_PARALLEL_PER_REPO,
45
45
  HOLD_RELEASED,
46
+ HOLD_SCOPE_ENTRY,
47
+ HOLD_SCOPE_FLEET,
46
48
  QUEUE_ALERT_ISSUE,
47
49
  QUEUE_ALERT_REPO,
48
50
  QUEUE_ALERT_STAGE,
@@ -155,6 +157,19 @@ def drive_queue_group() -> None:
155
157
  "treated as a failure. Requires --hold-after."
156
158
  ),
157
159
  )
160
+ @click.option(
161
+ "--scope",
162
+ "hold_scope",
163
+ type=click.Choice([HOLD_SCOPE_ENTRY, HOLD_SCOPE_FLEET]),
164
+ default=HOLD_SCOPE_ENTRY,
165
+ show_default=True,
166
+ help=(
167
+ "How far a fired gate reaches (#2186). `entry` holds only entries "
168
+ "whose own --after names THIS one. `fleet` is the whole-queue stop — "
169
+ "launch NOTHING anywhere, for the rare case (a rename, a schema "
170
+ "migration) where that is really what's needed. Requires --hold-after."
171
+ ),
172
+ )
158
173
  @_CONFIG_OPTION
159
174
  def drive_queue_add(
160
175
  repo: str,
@@ -165,6 +180,7 @@ def drive_queue_add(
165
180
  hold_after: bool,
166
181
  hold_reason: str,
167
182
  resume_when: str,
183
+ hold_scope: str,
168
184
  config_path: Path,
169
185
  ) -> None:
170
186
  """Queue REPO ISSUE for `coord drive`, or update it if already queued.
@@ -175,14 +191,36 @@ def drive_queue_add(
175
191
  """
176
192
  from coord.state import enqueue_drive_queue, list_drive_queue # noqa: PLC0415
177
193
 
194
+ existing_entries = entries_from_rows(list_drive_queue())
178
195
  try:
179
196
  after = parse_after_spec(after_specs, repo)
180
197
  validate_config_repo(config_path, repo)
181
- validate_hold_flags(hold_after, hold_reason, resume_when)
182
- validate_enqueue(entries_from_rows(list_drive_queue()), repo, issue, after)
198
+ validate_hold_flags(hold_after, hold_reason, resume_when, hold_scope)
199
+ validate_enqueue(existing_entries, repo, issue, after)
183
200
  except QueueError as exc:
184
201
  raise click.ClickException(str(exc)) from None
185
202
 
203
+ # #2186: the UPDATE path in `_enqueue_drive_queue_local` always writes
204
+ # whatever `hold_scope` THIS call passed (default `entry`) — so re-adding
205
+ # an already fleet-scoped gate without repeating `--scope fleet` silently
206
+ # narrows it. That fails toward the safer/narrower scope, not a
207
+ # correctness bug, but it is a real behaviour change an operator who only
208
+ # meant to touch `--machine`/`--after` would not expect, so it is echoed
209
+ # rather than left silent.
210
+ previous = next((e for e in existing_entries if e.key == entry_key(repo, issue)), None)
211
+ scope_downgrade_warning = ""
212
+ if (
213
+ previous is not None
214
+ and previous.hold_scope == HOLD_SCOPE_FLEET
215
+ and hold_after
216
+ and hold_scope != HOLD_SCOPE_FLEET
217
+ ):
218
+ scope_downgrade_warning = (
219
+ f"\nwarning: {entry_key(repo, issue)} was scope=fleet — this add did not "
220
+ f"repeat --scope {HOLD_SCOPE_FLEET}, so its gate is now scope={hold_scope} "
221
+ "(entries-only). Pass --scope fleet again if the fleet-wide stop was still needed."
222
+ )
223
+
186
224
  enqueue_drive_queue(
187
225
  repo,
188
226
  issue,
@@ -192,37 +230,51 @@ def drive_queue_add(
192
230
  hold_after=hold_after,
193
231
  hold_reason=hold_reason,
194
232
  resume_when=resume_when,
233
+ hold_scope=hold_scope,
195
234
  )
196
235
  suffix = f" after {', '.join(after)}" if after else ""
197
236
  pinned = f" on {machine}" if machine else ""
198
237
  gate = ""
199
238
  if hold_after:
200
239
  gate = " · holds the queue when done"
240
+ if hold_scope == HOLD_SCOPE_FLEET:
241
+ gate += " (fleet-wide — nothing anywhere launches)"
201
242
  if resume_when:
202
243
  gate += f" (auto-resume when `{resume_when}` passes)"
203
- click.echo(f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}")
244
+ click.echo(f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}{scope_downgrade_warning}")
204
245
 
205
246
 
206
- def validate_hold_flags(hold_after: bool, hold_reason: str, resume_when: str) -> None:
207
- """Refuse gate detail without a gate (#1757).
208
-
209
- `--resume-when` / `--hold-reason` on an entry with no `--hold-after` would
210
- be stored and then never read — a silent no-op on the ONE flag whose whole
211
- job is to stop the queue. An operator who mistyped that has no signal at
212
- all that overnight sequencing will now blow straight through the deploy
213
- step, so this is a usage error, not a warning.
247
+ def validate_hold_flags(
248
+ hold_after: bool,
249
+ hold_reason: str,
250
+ resume_when: str,
251
+ hold_scope: str = HOLD_SCOPE_ENTRY,
252
+ ) -> None:
253
+ """Refuse gate detail without a gate (#1757, extended by #2186).
254
+
255
+ `--resume-when` / `--hold-reason` / a non-default `--scope` on an entry
256
+ with no `--hold-after` would be stored and then never read — a silent
257
+ no-op on the ONE flag whose whole job is to stop the queue (or narrow
258
+ what it stops). An operator who mistyped that has no signal at all that
259
+ overnight sequencing will now blow straight through the deploy step, so
260
+ this is a usage error, not a warning.
214
261
  """
215
262
  if hold_after:
216
263
  return
217
264
  offenders = [
218
265
  flag
219
- for flag, value in (("--resume-when", resume_when), ("--hold-reason", hold_reason))
266
+ for flag, value in (
267
+ ("--resume-when", resume_when),
268
+ ("--hold-reason", hold_reason),
269
+ )
220
270
  if value
221
271
  ]
272
+ if hold_scope == HOLD_SCOPE_FLEET:
273
+ offenders.append("--scope=fleet")
222
274
  if offenders:
223
275
  raise QueueError(
224
276
  f"{' and '.join(offenders)} require --hold-after "
225
- "(without it there is no gate to resume or explain)"
277
+ "(without it there is no gate to resume, explain, or scope)"
226
278
  )
227
279
 
228
280
 
@@ -277,6 +329,8 @@ def drive_queue_list(repo: str | None, output_json: bool, config_path: Path) ->
277
329
  bits.append(f"deferrals={entry.deferrals}")
278
330
  if entry.hold_after:
279
331
  bits.append(f"hold={entry.hold_state or 'armed'}")
332
+ if entry.hold_scope == HOLD_SCOPE_FLEET:
333
+ bits.append("scope=fleet")
280
334
  click.echo(" ".join(bits))
281
335
  if entry.last_reason:
282
336
  click.echo(f" last{_reason_age_suffix(entry, now)}: {entry.last_reason}")
@@ -325,7 +379,12 @@ def _hold_lines(entry: QueueEntry) -> list[str]:
325
379
  """
326
380
  if not entry.hold_after:
327
381
  return []
328
- lines = [f" hold-after: {entry.gate_reason}"]
382
+ scope_suffix = (
383
+ " [fleet-wide — holds everything, not just this entry's dependents]"
384
+ if entry.hold_scope == HOLD_SCOPE_FLEET
385
+ else ""
386
+ )
387
+ lines = [f" hold-after: {entry.gate_reason}{scope_suffix}"]
329
388
  if entry.resume_when:
330
389
  probe = f" resume-when: {entry.resume_when}"
331
390
  if entry.hold_probes:
@@ -416,6 +475,10 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
416
475
  "reason": e.gate_reason,
417
476
  "resume_when": e.resume_when,
418
477
  "probes": e.hold_probes,
478
+ # #2186: typed, so a client reads what this gate
479
+ # holds without parsing the `[fleet-wide ...]`
480
+ # suffix back out of the rendered text.
481
+ "scope": e.hold_scope,
419
482
  }
420
483
  for e in held
421
484
  ],
@@ -401,6 +401,13 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
401
401
  hold_state TEXT NOT NULL DEFAULT '',
402
402
  hold_probes INTEGER NOT NULL DEFAULT 0,
403
403
  launch_host TEXT NOT NULL DEFAULT '',
404
+ -- #2186: how far a FIRED gate reaches. 'entry' (the default) holds
405
+ -- only entries whose own after_json names this row's key; 'fleet'
406
+ -- is the pre-#2186 whole-queue stop, kept for an explicit
407
+ -- --scope=fleet. NOT NULL DEFAULT 'entry' so a row written before
408
+ -- this column existed reads as the narrower scope, never a silent
409
+ -- fleet-wide one — see coord.drive_queue.QueueEntry.hold_scope.
410
+ hold_scope TEXT NOT NULL DEFAULT 'entry',
404
411
  UNIQUE(repo_name, issue_number)
405
412
  );
406
413
 
@@ -717,6 +724,13 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
717
724
  # carries its age instead of rendering a stale snapshot as current
718
725
  # state. NULL for every row predating this migration.
719
726
  "ALTER TABLE drive_queue ADD COLUMN reason_at REAL",
727
+ # #2186: deploy-gate SCOPE — see the CREATE TABLE comment above and
728
+ # coord/drive_queue.py's HOLD_SCOPE_ENTRY/HOLD_SCOPE_FLEET. Every row
729
+ # predating this migration (and every armed-but-not-yet-fired gate)
730
+ # defaults to 'entry', the narrower reading — a fired gate on such a
731
+ # row holds only its own dependents rather than the whole queue, which
732
+ # is the #2186 fix itself, not just a schema detail.
733
+ "ALTER TABLE drive_queue ADD COLUMN hold_scope TEXT NOT NULL DEFAULT 'entry'",
720
734
  ]
721
735
  for sql in migrations:
722
736
  try:
@@ -755,6 +755,14 @@ def dispatch(
755
755
  # field reject unknown payload keys with a 400.
756
756
  if getattr(proposal, "resume_session_id", None):
757
757
  payload["resume_session_id"] = proposal.resume_session_id
758
+ # #2188: the issue's GitHub labels, so the agent's own reap can see
759
+ # `coord.models.DELIVERABLE_ANALYSIS_LABEL` without a DB/GitHub round
760
+ # trip (config-free agent — docs/EPHEMERAL_WORKERS.md). Only sent when
761
+ # non-empty, same discipline as every optional wire field above — an
762
+ # agent predating `AssignmentSpec.issue_labels` 400s on an unrecognized
763
+ # kwarg.
764
+ if proposal.issue_labels:
765
+ payload["issue_labels"] = list(proposal.issue_labels)
758
766
  # #2131: per-leg spend ceiling, resolved here (CLI/daemon lane) and
759
767
  # carried on the wire so a config-free agent is covered too. Sent ONLY
760
768
  # when the operator has actually configured one — with no `budget:` block
@@ -109,6 +109,7 @@ from coord.interactive import (
109
109
  )
110
110
  from coord.dead_end import DeadEnd, detect_dead_end
111
111
  from coord.failure_class import classify_failure, plan_usage_limit_resume
112
+ from coord.models import DELIVERABLE_ANALYSIS_LABEL
112
113
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
113
114
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
114
115
  # import lived in a hunk #1590 rewrote, so the merge came out textually clean
@@ -1397,6 +1398,32 @@ def decide(
1397
1398
  f"{state.work_machine or machine}"
1398
1399
  )
1399
1400
 
1401
+ # ---- analysis deliverable: done + 0 commits is the SUCCESS shape (#2188)
1402
+ #
1403
+ # An issue labelled `deliverable:analysis` inverts the read on a 0-commit
1404
+ # exit: the deliverable is the worker's own final message (already
1405
+ # posted to the issue by the coordinator — see coord.notify.
1406
+ # post_transition's EVENT_COMPLETION arm), not a diff. `coord.agent.
1407
+ # AgentServer._reap` only ever produces this shape on `status == "done"`
1408
+ # (never "advisory" — see `AgentAssignment.analysis_deliverable`), so
1409
+ # this only needs to guard the `done` arm above, and it runs BEFORE the
1410
+ # "no branch"/dead-end/Test/Review/Merge machinery below: none of that
1411
+ # applies when there is nothing to test, review, or merge. A labelled
1412
+ # issue whose worker DID push commits (the label describes the common
1413
+ # case, not a hard rule) falls through unchanged — `branch_has_commits`
1414
+ # is False only for the genuine 0-commit shape.
1415
+ if (
1416
+ state.work_status == "done"
1417
+ and DELIVERABLE_ANALYSIS_LABEL in state.issue_labels
1418
+ and (not state.work_branch or not verifier.branch_has_commits(state))
1419
+ ):
1420
+ return _succeed(
1421
+ f"✓ ANALYSIS DELIVERABLE — {state.work_aid} completed with 0 "
1422
+ f"commits (issue labelled `{DELIVERABLE_ANALYSIS_LABEL}`); the "
1423
+ "worker's final message is the deliverable and was posted to "
1424
+ "the issue automatically — nothing to test, review, or merge."
1425
+ )
1426
+
1400
1427
  # A 'done' row with no branch never pushed anything either.
1401
1428
  if not state.work_branch:
1402
1429
  return _die(