code-coordinator 0.5.128__tar.gz → 0.5.130__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 (860) hide show
  1. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent.py +90 -3
  5. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/milestone.py +99 -57
  6. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_dispatch.py +75 -1
  7. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/serve_app.py +5 -2
  8. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ARCHITECTURE.md +1 -1
  9. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_push_failure.py +186 -0
  10. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_dispatch.py +81 -38
  11. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_dispatch.py +41 -0
  12. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/cargo-test.yml +0 -0
  23. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/release-tui.yml +0 -0
  25. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.gitignore +0 -0
  27. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/GOAL.md +0 -0
  29. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/LICENSE +0 -0
  30. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/README.md +0 -0
  32. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/client.py +0 -0
  62. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/plan_followup.py +0 -0
  78. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/plans.py +0 -0
  79. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/portal.py +0 -0
  80. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/release.py +0 -0
  81. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/repo.py +0 -0
  82. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/report.py +0 -0
  83. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/review.py +0 -0
  84. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/scorecard.py +0 -0
  85. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/sessions.py +0 -0
  86. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/setup.py +0 -0
  87. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/status.py +0 -0
  88. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/terminal.py +0 -0
  89. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/test_gate.py +0 -0
  90. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/tui.py +0 -0
  91. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/comments.py +0 -0
  92. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/config.py +0 -0
  93. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/config_reload.py +0 -0
  94. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/conflict_fix.py +0 -0
  95. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dao.py +0 -0
  96. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/__init__.py +0 -0
  97. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/fixture.py +0 -0
  98. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/index.html +0 -0
  99. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/server.py +0 -0
  100. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/terminal.py +0 -0
  101. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/.gitignore +0 -0
  102. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/components.json +0 -0
  103. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  104. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  105. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  106. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  107. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  108. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  109. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  110. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  111. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  112. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/index.html +0 -0
  113. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  114. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/sw.js +0 -0
  115. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  116. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  117. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  118. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  119. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  120. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  121. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  122. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  123. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  124. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  125. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/eslint.config.js +0 -0
  126. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/index.html +0 -0
  127. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  128. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/package-lock.json +0 -0
  129. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/package.json +0 -0
  130. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  131. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/playwright.config.ts +0 -0
  132. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/postcss.config.js +0 -0
  133. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  134. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  135. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  136. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/App.tsx +0 -0
  137. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/api/client.ts +0 -0
  138. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  139. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  140. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  141. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  142. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  143. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  144. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  145. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  146. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  147. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  148. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  149. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  150. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  151. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  152. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  153. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  154. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  155. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  156. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  157. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  158. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  159. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  160. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  161. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  162. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  163. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  164. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  165. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  166. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  167. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  168. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  169. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  170. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  171. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  172. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  173. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/index.css +0 -0
  174. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  175. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  176. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/main.tsx +0 -0
  177. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  178. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  179. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  180. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  181. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  182. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  183. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  184. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  185. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  186. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  187. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  188. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  189. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  190. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  191. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  192. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  193. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  194. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  195. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  196. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  197. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  198. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  199. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  200. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tailwind.config.js +0 -0
  201. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tsconfig.json +0 -0
  202. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  203. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/vite.config.ts +0 -0
  204. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/db.py +0 -0
  205. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dead_end.py +0 -0
  206. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/README.md +0 -0
  207. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-agent.service +0 -0
  208. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.service +0 -0
  209. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.sh +0 -0
  210. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.timer +0 -0
  211. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-drive-queue.service +0 -0
  212. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-drive-queue.timer +0 -0
  213. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-notify.service +0 -0
  214. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-notify.timer +0 -0
  215. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-propagate.service +0 -0
  216. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-propagate.timer +0 -0
  217. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-window.service +0 -0
  218. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-window.timer +0 -0
  219. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-serve.service +0 -0
  220. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web-dist-build.service +0 -0
  221. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web-dist-build.timer +0 -0
  222. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web.service +0 -0
  223. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy_manifest.py +0 -0
  224. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy_units.py +0 -0
  225. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deps.py +0 -0
  226. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/diagnose.py +0 -0
  227. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dispatch.py +0 -0
  228. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dist_name.py +0 -0
  229. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive.py +0 -0
  230. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive_queue.py +0 -0
  231. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive_state.py +0 -0
  232. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/events.py +0 -0
  233. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/failure_class.py +0 -0
  234. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/filelock.py +0 -0
  235. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/fleet_config_health.py +0 -0
  236. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/freshness.py +0 -0
  237. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_a.py +0 -0
  238. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_b.py +0 -0
  239. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_snapshot.py +0 -0
  240. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gates.py +0 -0
  241. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/github_ops.py +0 -0
  242. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/goal.py +0 -0
  243. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/graph_health.py +0 -0
  244. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/__init__.py +0 -0
  245. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/aggregate.py +0 -0
  246. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/__init__.py +0 -0
  247. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/agent_install.py +0 -0
  248. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/cargo_targets.py +0 -0
  249. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/claude_binary.py +0 -0
  250. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/deploy_lane_facts.py +0 -0
  251. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/disk.py +0 -0
  252. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_board.py +0 -0
  253. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  254. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_phantom.py +0 -0
  255. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_unit_drift.py +0 -0
  256. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/graph.py +0 -0
  257. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/graphify_cli.py +0 -0
  258. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/index_lock.py +0 -0
  259. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/plan_usage.py +0 -0
  260. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/repo_state.py +0 -0
  261. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/spawned_coord.py +0 -0
  262. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/timer_active.py +0 -0
  263. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/toolchain.py +0 -0
  264. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/unit_drift.py +0 -0
  265. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/unit_enablement.py +0 -0
  266. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/worktrees.py +0 -0
  267. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/cli.py +0 -0
  268. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/context.py +0 -0
  269. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/fleet_snapshot.py +0 -0
  270. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/models.py +0 -0
  271. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/pypi.py +0 -0
  272. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/registry.py +0 -0
  273. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/render.py +0 -0
  274. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/units.py +0 -0
  275. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/hooks.py +0 -0
  276. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/housekeeping.py +0 -0
  277. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/interactive.py +0 -0
  278. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/issue_store.py +0 -0
  279. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/liveness_auditor.py +0 -0
  280. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/machine_pause.py +0 -0
  281. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/merge_queue.py +0 -0
  282. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_chat.py +0 -0
  283. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_gate.py +0 -0
  284. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_order.py +0 -0
  285. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/mock_author.py +0 -0
  286. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/models.py +0 -0
  287. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/network.py +0 -0
  288. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/new_issue_chat.py +0 -0
  289. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/__init__.py +0 -0
  290. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/baseline.py +0 -0
  291. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/cli.py +0 -0
  292. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/collect.py +0 -0
  293. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/digest.py +0 -0
  294. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/models.py +0 -0
  295. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/predicate.py +0 -0
  296. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/service.py +0 -0
  297. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/store.py +0 -0
  298. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/transport.py +0 -0
  299. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notify.py +0 -0
  300. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/openapi.py +0 -0
  301. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/overlap_fence.py +0 -0
  302. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/overlap_predict.py +0 -0
  303. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/parentage.py +0 -0
  304. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/parentage_github.py +0 -0
  305. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/pipeline.py +0 -0
  306. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/plan_parser.py +0 -0
  307. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/plans.py +0 -0
  308. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/platform_paths.py +0 -0
  309. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_bridge.py +0 -0
  310. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_store.py +0 -0
  311. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_sync.py +0 -0
  312. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/pr_body_lint.py +0 -0
  313. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/prereqs.py +0 -0
  314. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/progress.py +0 -0
  315. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/__init__.py +0 -0
  316. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/base.py +0 -0
  317. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/claude.py +0 -0
  318. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/claude_pty.py +0 -0
  319. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/opencode.py +0 -0
  320. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/queue_diagnose.py +0 -0
  321. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/reconcile.py +0 -0
  322. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/refine_chat.py +0 -0
  323. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_cordon.py +0 -0
  324. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_propagate.py +0 -0
  325. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_verify.py +0 -0
  326. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_window.py +0 -0
  327. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/repo_edit.py +0 -0
  328. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/repo_onboard.py +0 -0
  329. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/reports.py +0 -0
  330. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/revalidate.py +0 -0
  331. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/review.py +0 -0
  332. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/scorecard.py +0 -0
  333. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/skills/portal-followup/SKILL.md +0 -0
  334. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/skills/update-issue/SKILL.md +0 -0
  335. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/smoke.py +0 -0
  336. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/state.py +0 -0
  340. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_author.py +0 -0
  341. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ARCH_SECURITY_GATES.md +0 -0
  371. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/COCKPIT.md +0 -0
  372. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/COST_DISCIPLINE.md +0 -0
  374. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CROSS_PLATFORM.md +0 -0
  375. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CUSTOMER_PORTAL.md +0 -0
  376. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/DRIVE_QUEUE.md +0 -0
  377. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/EPHEMERAL_WORKERS.md +0 -0
  378. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/FORGE_MIGRATION.md +0 -0
  379. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/GRAPHIFY_SETUP.md +0 -0
  380. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ISSUE_GUIDANCE.md +0 -0
  381. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/MAC_MINI.md +0 -0
  382. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  383. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/NOTIFIER.md +0 -0
  384. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/OPENCODE_VERIFICATION.md +0 -0
  385. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/OPERATING_GOTCHAS.md +0 -0
  386. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ORACLE_LOOP.md +0 -0
  387. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PHONE_WEBAPP.md +0 -0
  388. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PIPELINE_V2.md +0 -0
  389. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PLATFORM_EVOLUTION.md +0 -0
  390. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/SECOND_BACKEND.md +0 -0
  391. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/STORE_SERVICE.md +0 -0
  392. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  393. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/WEB_CONTROL_CENTER.md +0 -0
  394. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/WSL_WINDOWS_WORKER.md +0 -0
  395. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/README.md +0 -0
  396. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/_tokens.css +0 -0
  397. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/issue-detail.html +0 -0
  398. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/pipeline-narrow.html +0 -0
  399. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/pipeline-wide.html +0 -0
  400. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/graphify-out/.gitignore +0 -0
  401. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/install-agent.sh +0 -0
  402. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/pyproject.toml +0 -0
  403. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/audit_review_verdict_overrides.py +0 -0
  404. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  405. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/build-worker-image.sh +0 -0
  406. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/coordinator-machine.py +0 -0
  407. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/epic-down.sh +0 -0
  408. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/epic-up.sh +0 -0
  409. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/preflight.sh +0 -0
  410. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/provision-worker.sh +0 -0
  411. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  412. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  413. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/verify-github-token.sh +0 -0
  414. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/codegen.py +0 -0
  415. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/coord-test-runner.sh +0 -0
  416. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/run_tests_in_populated_home.sh +0 -0
  420. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/run_tests_without_gh.sh +0 -0
  421. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/smoke_437_interactive.py +0 -0
  422. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/setup.cfg +0 -0
  426. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  429. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/contract.md +0 -0
  430. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/manifest.yml +0 -0
  431. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  432. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  433. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  434. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  435. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/conftest.py +0 -0
  436. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/contract.md +0 -0
  437. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/manifest.yml +0 -0
  438. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  439. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  440. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/contract.md +0 -0
  441. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/manifest.yml +0 -0
  442. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  443. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  444. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  445. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  446. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  447. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  448. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  449. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  450. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  451. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  452. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/contract.md +0 -0
  453. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  454. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  455. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/manifest.yml +0 -0
  456. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  457. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/tsconfig.json +0 -0
  458. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  459. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/contract.md +0 -0
  460. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/manifest.yml +0 -0
  461. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  462. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  463. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  464. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  465. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  466. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  467. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  468. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  469. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/conftest.py +0 -0
  471. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/board-pipeline-basic.json +0 -0
  472. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  473. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  474. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  475. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  476. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/all_pass.json +0 -0
  477. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  478. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/mixed_fail.json +0 -0
  479. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  480. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  481. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/skip.json +0 -0
  482. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/truncated.json +0 -0
  483. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  484. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  485. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  486. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  487. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  488. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  489. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  490. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  491. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_acceptance.py +0 -0
  492. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_acceptance_drivers.py +0 -0
  493. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent.py +0 -0
  494. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_api_error.py +0 -0
  495. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_app.py +0 -0
  496. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_branch_base.py +0 -0
  497. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_branch_capture.py +0 -0
  498. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_config_free_1712.py +0 -0
  499. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_deploy_units_endpoint.py +0 -0
  500. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_dirty_worktree.py +0 -0
  501. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_graph_self_heal.py +0 -0
  502. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_health_h3.py +0 -0
  503. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_idle_restart.py +0 -0
  504. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_reap.py +0 -0
  505. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_repos_and_pull.py +0 -0
  506. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_restart_services_endpoint.py +0 -0
  507. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_startup_diagnostics.py +0 -0
  508. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_update.py +0 -0
  509. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_update_bluegreen.py +0 -0
  510. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_usage_limit.py +0 -0
  511. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_zero_commit.py +0 -0
  512. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ambient_home_isolation.py +0 -0
  513. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_approve_reject_plan.py +0 -0
  514. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_approve_usage_gate.py +0 -0
  515. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_assignment_already_recorded_daemon.py +0 -0
  516. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_log.py +0 -0
  517. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_outcome.py +0 -0
  518. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_query.py +0 -0
  519. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_auto_loop.py +0 -0
  520. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_auto_release_publish_2035.py +0 -0
  521. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_base_checkout_restore.py +0 -0
  522. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_block_log.py +0 -0
  523. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_cap_762.py +0 -0
  524. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_fixture.py +0 -0
  525. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_read_path.py +0 -0
  526. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_service.py +0 -0
  527. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_state.py +0 -0
  528. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_wire.py +0 -0
  529. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_brain.py +0 -0
  530. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_branch_model.py +0 -0
  531. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_bug_intake.py +0 -0
  532. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_build_worker_image_env_update.py +0 -0
  533. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cargo_cache.py +0 -0
  534. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_acceptance_gate_1950.py +0 -0
  535. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_parity_2091.py +0 -0
  536. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_store.py +0 -0
  537. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_claim.py +0 -0
  538. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_acceptance.py +0 -0
  539. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign.py +0 -0
  540. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  541. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_interactive_remote.py +0 -0
  542. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_provider.py +0 -0
  543. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  544. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_audit.py +0 -0
  545. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_chat_continue.py +0 -0
  546. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_diagnose_config_provenance.py +0 -0
  547. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_diagnose_graph.py +0 -0
  548. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor.py +0 -0
  549. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor_config_free_1801.py +0 -0
  550. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  551. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_issue_create_label.py +0 -0
  559. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_issue_reopen.py +0 -0
  560. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_merge.py +0 -0
  561. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_assign.py +0 -0
  562. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_capture.py +0 -0
  563. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_chat_add_child.py +0 -0
  564. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_gate_b.py +0 -0
  565. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_gate_c.py +0 -0
  566. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_order.py +0 -0
  567. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  568. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_ship.py +0 -0
  569. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_network.py +0 -0
  570. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_new_issue_chat.py +0 -0
  571. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_plans.py +0 -0
  572. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_portal.py +0 -0
  573. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_pull_artifact.py +0 -0
  574. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_queue.py +0 -0
  575. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_reattach_sessions.py +0 -0
  576. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_refine_board.py +0 -0
  577. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_preflight.py +0 -0
  578. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_propagate.py +0 -0
  579. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_window.py +0 -0
  580. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_repo_2220.py +0 -0
  581. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_scorecard.py +0 -0
  582. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_set_review_findings.py +0 -0
  583. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_advisory_terminal.py +0 -0
  584. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_review_finalizing.py +0 -0
  587. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_test_failed_tag.py +0 -0
  588. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_usage_limit.py +0 -0
  589. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_sync_comments_873.py +0 -0
  590. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_test_plan.py +0 -0
  591. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_track.py +0 -0
  592. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_tui_update.py +0 -0
  593. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_wait.py +0 -0
  594. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_client_base_install.py +0 -0
  595. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_comments.py +0 -0
  596. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_completion_summary.py +0 -0
  597. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config.py +0 -0
  598. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_pricing.py +0 -0
  601. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  602. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_usage_gate.py +0 -0
  603. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_conflict_fix.py +0 -0
  604. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_conflict_fix_semantic.py +0 -0
  605. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test.py +0 -0
  606. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_baseline.py +0 -0
  607. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_routing.py +0 -0
  608. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_toolchain.py +0 -0
  609. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_web_sse_restart_live.py +0 -0
  610. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coordinator_machine.py +0 -0
  611. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cross_platform_imports.py +0 -0
  612. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard.py +0 -0
  613. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_fixture.py +0 -0
  614. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_terminal.py +0 -0
  615. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_terminal_live.py +0 -0
  616. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_db.py +0 -0
  617. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dead_end.py +0 -0
  618. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_db_backup.py +0 -0
  619. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_web_dist.py +0 -0
  620. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_web_rollback.py +0 -0
  621. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_drive_queue_unit.py +0 -0
  622. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_manifest.py +0 -0
  623. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_units_lane.py +0 -0
  624. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_web_unit.py +0 -0
  625. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deps.py +0 -0
  626. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_diagnose.py +0 -0
  627. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dispatch.py +0 -0
  628. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dispatch_target_validation.py +0 -0
  629. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dist_name.py +0 -0
  630. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_done_housekeeping.py +0 -0
  631. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive.py +0 -0
  632. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_queue.py +0 -0
  633. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_state.py +0 -0
  634. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_tmux.py +0 -0
  635. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_capability_detection.py +0 -0
  636. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  637. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_image_provenance.py +0 -0
  638. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_errors.py +0 -0
  639. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_events.py +0 -0
  640. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_failure_class.py +0 -0
  641. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_filelock.py +0 -0
  642. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  643. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fix_of_force_override.py +0 -0
  644. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_config_health.py +0 -0
  645. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_health_probes.py +0 -0
  646. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_health_snapshot.py +0 -0
  647. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_freshness.py +0 -0
  648. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_a.py +0 -0
  649. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_b.py +0 -0
  650. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_snapshot_staleness.py +0 -0
  651. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gates.py +0 -0
  652. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  653. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_generated_types_fixture.py +0 -0
  654. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_github_ops.py +0 -0
  655. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_goal.py +0 -0
  656. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_graph_health.py +0 -0
  657. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_graph_selfheal_absent_2237.py +0 -0
  658. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_handoff.py +0 -0
  659. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_checks.py +0 -0
  660. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_cli.py +0 -0
  661. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_cli_graph.py +0 -0
  662. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_config.py +0 -0
  663. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_context.py +0 -0
  664. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_deploy_lane_facts.py +0 -0
  665. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_incident_regression.py +0 -0
  666. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_pypi.py +0 -0
  667. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_registry.py +0 -0
  668. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_timer_active.py +0 -0
  669. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_toolchain.py +0 -0
  670. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_unit_drift.py +0 -0
  671. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_unit_enablement.py +0 -0
  672. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_hooks.py +0 -0
  673. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_human_attended_437.py +0 -0
  674. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_init.py +0 -0
  675. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_integration.py +0 -0
  676. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_briefing_echo.py +0 -0
  677. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_prefill_state.py +0 -0
  678. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_session_relaunch.py +0 -0
  679. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_test_verdict_backstop.py +0 -0
  680. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_token_attribution.py +0 -0
  681. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_worktree.py +0 -0
  682. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_issue_store_seam.py +0 -0
  683. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_liveness_auditor.py +0 -0
  684. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_liveness_notify.py +0 -0
  685. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_machine_pause.py +0 -0
  686. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_merge_queue.py +0 -0
  687. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_merge_verify.py +0 -0
  688. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_chat.py +0 -0
  689. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_gate.py +0 -0
  690. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_order.py +0 -0
  691. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_seam.py +0 -0
  692. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_mock_author.py +0 -0
  693. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_model_tiering.py +0 -0
  694. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_models.py +0 -0
  695. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_models_config_labels.py +0 -0
  696. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_needs_attention.py +0 -0
  697. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_network.py +0 -0
  698. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_new_issue_chat.py +0 -0
  699. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_next_release_tag.py +0 -0
  700. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_no_direct_gh_calls.py +0 -0
  701. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_node_shim.py +0 -0
  702. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_baseline.py +0 -0
  703. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_cli.py +0 -0
  704. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_collect.py +0 -0
  705. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_config.py +0 -0
  706. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_drive_seam.py +0 -0
  707. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_isolation.py +0 -0
  708. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_predicate.py +0 -0
  709. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_quiet_hours.py +0 -0
  710. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_service.py +0 -0
  711. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notify.py +0 -0
  712. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notify_drain.py +0 -0
  713. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_openapi.py +0 -0
  714. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_operational_defaults.py +0 -0
  715. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_overlap_fence.py +0 -0
  716. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_overlap_predict.py +0 -0
  717. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_packaged_deploy_units.py +0 -0
  718. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_parentage.py +0 -0
  719. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_paste_landed.py +0 -0
  720. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_pipeline.py +0 -0
  721. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_approve_plan_command.py +0 -0
  722. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_pr_command.py +0 -0
  723. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_review_command.py +0 -0
  724. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_only.py +0 -0
  725. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_parser.py +0 -0
  726. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_platform_paths.py +0 -0
  727. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_bridge.py +0 -0
  728. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_config.py +0 -0
  729. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_sync.py +0 -0
  730. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_pr_body_lint.py +0 -0
  731. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_prereqs.py +0 -0
  732. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_production_db_guard.py +0 -0
  733. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_progress.py +0 -0
  734. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_provider_seam.py +0 -0
  735. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers.py +0 -0
  736. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers_config_labels.py +0 -0
  737. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers_pty.py +0 -0
  738. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_quiet_hours.py +0 -0
  739. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_quiet_hours_store_2146.py +0 -0
  740. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reap_merged_sessions.py +0 -0
  741. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reap_stale_interactive_tick.py +0 -0
  742. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile.py +0 -0
  743. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_branch.py +0 -0
  744. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_completions.py +0 -0
  745. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_merges.py +0 -0
  746. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_no_agent_record.py +0 -0
  747. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_usage_limit_done.py +0 -0
  748. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_refine_chat.py +0 -0
  749. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_2101.py +0 -0
  750. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  751. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_deadlock_2240.py +0 -0
  752. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_propagate.py +0 -0
  753. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_unified_1242.py +0 -0
  754. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_verify.py +0 -0
  755. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_window.py +0 -0
  756. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_remote_auto_prune.py +0 -0
  757. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_remote_interactive_reaper.py +0 -0
  758. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_edit_2220.py +0 -0
  759. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_graph_fleet_2237.py +0 -0
  760. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_onboard_2220.py +0 -0
  761. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_report_result_push.py +0 -0
  762. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reports.py +0 -0
  763. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry.py +0 -0
  764. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry_advisory_1606.py +0 -0
  765. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry_type_1636.py +0 -0
  766. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_revalidate.py +0 -0
  767. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review.py +0 -0
  768. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_end_review_without_verdict.py +0 -0
  769. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_parse_failure_diagnostic.py +0 -0
  770. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_reaffirm.py +0 -0
  771. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_state.py +0 -0
  772. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_backstop.py +0 -0
  773. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_override_audit.py +0 -0
  774. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_relay.py +0 -0
  775. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_zero_commits.py +0 -0
  776. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_scoped_review_wiring.py +0 -0
  777. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_scorecard.py +0 -0
  778. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_serve.py +0 -0
  779. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_serve_app_board_trim.py +0 -0
  780. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_session.py +0 -0
  781. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_slice_issue_attribution.py +0 -0
  782. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke.py +0 -0
  783. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke_live_checkout_restore.py +0 -0
  784. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke_workflow.py +0 -0
  785. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_spend_ceiling.py +0 -0
  786. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_spend_ceiling_coordinator.py +0 -0
  787. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_split.py +0 -0
  788. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_split_work.py +0 -0
  789. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stage_projection.py +0 -0
  790. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stalled_pipeline.py +0 -0
  791. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_state.py +0 -0
  792. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_state_review_findings_daemon.py +0 -0
  793. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_status_fleet_footer.py +0 -0
  794. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stop_1567.py +0 -0
  795. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stuck.py +0 -0
  796. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_terminal_command.py +0 -0
  797. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_author.py +0 -0
  798. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_chat.py +0 -0
  799. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_orchestrator.py +0 -0
  800. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_report.py +0 -0
  801. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_verdict_parsing.py +0 -0
  802. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_verdict_transcript_floor.py +0 -0
  803. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_board_audit.py +0 -0
  804. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_config_load_1080.py +0 -0
  805. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_daemon_routing_906.py +0 -0
  806. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_tmux_host.py +0 -0
  807. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_tmux_session.py +0 -0
  808. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_transcript_floor.py +0 -0
  809. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage.py +0 -0
  810. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage_limits.py +0 -0
  811. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage_rollup.py +0 -0
  812. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_venv_live_install_2121.py +0 -0
  813. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_version_single_source.py +0 -0
  814. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_watch.py +0 -0
  815. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  816. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_events.py +0 -0
  817. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_image_pin_sync.py +0 -0
  818. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_safety.py +0 -0
  819. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_test_scoping.py +0 -0
  820. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worktree.py +0 -0
  821. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  822. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/Cargo.lock +0 -0
  823. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/Cargo.toml +0 -0
  824. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/cargo-config-local-quadraui.toml.example +0 -0
  825. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/audit.rs +0 -0
  826. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/chat.rs +0 -0
  827. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/data.rs +0 -0
  828. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/dialogs.rs +0 -0
  829. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/doc_tabs.rs +0 -0
  830. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/drive.rs +0 -0
  831. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/drive_queue.rs +0 -0
  832. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/escalation.rs +0 -0
  833. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/events.rs +0 -0
  834. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fixtures.rs +0 -0
  835. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_health.rs +0 -0
  836. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_sessions.rs +0 -0
  837. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_terminals.rs +0 -0
  838. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/format.rs +0 -0
  839. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/milestone_dag.rs +0 -0
  840. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/mod.rs +0 -0
  841. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/msv.rs +0 -0
  842. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/pipeline.rs +0 -0
  843. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/plans.rs +0 -0
  844. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/render.rs +0 -0
  845. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/reports.rs +0 -0
  846. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/sessions.rs +0 -0
  847. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/settings_ui.rs +0 -0
  848. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/sidebar.rs +0 -0
  849. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/terminal.rs +0 -0
  850. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/tests.rs +0 -0
  851. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/types.rs +0 -0
  852. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/workspace.rs +0 -0
  853. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/bin/gtk.rs +0 -0
  854. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/commands.rs +0 -0
  855. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/lib.rs +0 -0
  856. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/main.rs +0 -0
  857. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/settings.rs +0 -0
  858. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/acceptance.rs +0 -0
  859. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/cli.rs +0 -0
  860. {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.128
3
+ Version: 0.5.130
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.128
3
+ Version: 0.5.130
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.128",
2
+ "tag": "0.5.130",
3
3
  "distance": 0,
4
- "node": "gdb3e5a50ffe1a0bb743d2cc2f791188761858441",
4
+ "node": "g14a2d9301195335040144bf7d82384aeddb54b2b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-17"
@@ -785,6 +785,44 @@ def _git(cwd: Path, *args: str, timeout: float = 15.0) -> str:
785
785
  return result.stdout.strip()
786
786
 
787
787
 
788
+ def _remote_already_has_head(
789
+ wt_path: Path, remote: str, branch: str, *, timeout: float = 30.0
790
+ ) -> bool:
791
+ """True when *remote*'s copy of *branch* already contains the worktree's
792
+ current ``HEAD`` as an ancestor (#2356).
793
+
794
+ Used by `_reap`'s belt-and-suspenders push-failure handling: an
795
+ auth-shaped failure pushing to *remote* does NOT necessarily mean the
796
+ worker's commits never reached it — a worker that hit the same broken
797
+ write-credential wall (e.g. an HTTPS credential helper with nothing to
798
+ expand in a non-interactive shell) may have already worked around it by
799
+ pushing the same commit over a different remote/protocol, most commonly
800
+ an explicit ``git@github.com:...`` SSH URL (the #2269 incident). That
801
+ push landed on the SAME GitHub-hosted branch this function now checks —
802
+ it never touches a second remote name in the worktree's own git config.
803
+
804
+ Fetching *branch* is a READ operation (``git fetch`` invokes
805
+ upload-pack, not receive-pack), which commonly still succeeds — via
806
+ anonymous access on a public repo, or a still-valid read-scoped
807
+ credential — even when the WRITE credential that just failed the push
808
+ is broken or missing entirely. So this is a meaningfully independent
809
+ signal from the push that just failed, not a re-run of the same failing
810
+ operation.
811
+
812
+ Returns ``False`` — never raises — on any git failure: the branch
813
+ missing on the remote, a network error, or `merge-base` reporting "not
814
+ an ancestor" all resolve to "unknown/genuinely behind", and an unknown
815
+ remote state must never suppress the real #1797 failure signal (nothing
816
+ ever reached the remote).
817
+ """
818
+ try:
819
+ _git(wt_path, "fetch", remote, branch, timeout=timeout)
820
+ _git(wt_path, "merge-base", "--is-ancestor", "HEAD", "FETCH_HEAD")
821
+ return True
822
+ except (_GitError, subprocess.TimeoutExpired):
823
+ return False
824
+
825
+
788
826
  def _is_linked_worktree(repo_path: Path) -> bool:
789
827
  """True when *repo_path* is a linked ``git worktree`` rather than the
790
828
  checkout that owns its ``.git`` directory (#1729, H-6's guard 2).
@@ -2988,7 +3026,14 @@ class AgentAssignment:
2988
3026
  # alongside `status == FAILED`; `None` on every other outcome —
2989
3027
  # including a push failure for an unrelated reason (no `origin`
2990
3028
  # configured, network blip), which stays non-fatal exactly as before
2991
- # this field was introduced.
3029
+ # this field was introduced, AND (#2356) including an auth-shaped
3030
+ # failure on THIS push that turns out to be superseded: when
3031
+ # `_remote_already_has_head` confirms the content already reached
3032
+ # `origin` via some other remote/protocol (e.g. the #2269 SSH-
3033
+ # workaround case), the push failure is logged but this field stays
3034
+ # `None` and the assignment keeps its normal (non-FAILED) outcome —
3035
+ # the work is where it needs to be, so the failed push here is a
3036
+ # non-event, not a signal.
2992
3037
  #
2993
3038
  # Exists to keep an auth break from being silently absorbed into either
2994
3039
  # DONE (worker had local commits that never reached origin) or the
@@ -8146,12 +8191,54 @@ class AgentServer:
8146
8191
  # against repos with no `origin` at all (every test
8147
8192
  # fixture, and any local-only deployment), and that
8148
8193
  # failure mode must stay non-fatal exactly as before.
8194
+ #
8195
+ # #2356: an auth-shaped failure on THIS push doesn't
8196
+ # necessarily mean the content never reached origin
8197
+ # — a worker that hit the same broken-credential
8198
+ # wall may have already landed the same commit via
8199
+ # an alternate remote/protocol (#2269: an explicit
8200
+ # SSH URL, worked around a missing HTTPS
8201
+ # credential). Before promoting to FAILED, check
8202
+ # whether origin already has local HEAD as an
8203
+ # ancestor (`_remote_already_has_head` fetches — a
8204
+ # read, which commonly still works even when the
8205
+ # write credential just failed). Only genuinely
8206
+ # missing content — origin behind local HEAD, or the
8207
+ # check itself failing — is promoted, so #1797's
8208
+ # original "nothing ever reached origin" case is
8209
+ # unaffected.
8149
8210
  _reason = str(e)
8211
+ _suppressed_as_already_pushed = False
8150
8212
  if _is_auth_push_failure(_reason):
8151
- _push_failure_reason = _reason
8213
+ _branch_for_check = (
8214
+ head if head and head != "HEAD" else None
8215
+ )
8216
+ if _branch_for_check and _remote_already_has_head(
8217
+ wt_path, "origin", _branch_for_check
8218
+ ):
8219
+ _suppressed_as_already_pushed = True
8220
+ else:
8221
+ _push_failure_reason = _reason
8152
8222
  try:
8153
8223
  with open(assignment.log_path, "a") as reopen:
8154
- reopen.write(f"# reap: push failed ({_reason})\n")
8224
+ if _suppressed_as_already_pushed:
8225
+ # Deliberately NOT the generic "push
8226
+ # failed" line below: that line reads as
8227
+ # a live failure signal, which this
8228
+ # isn't — origin already has HEAD, so
8229
+ # the failed push here is a non-event
8230
+ # (#2356).
8231
+ reopen.write(
8232
+ "# reap: push failed but origin "
8233
+ "already has HEAD as an ancestor "
8234
+ "(pushed via another remote/"
8235
+ "protocol?) — treating as success "
8236
+ f"({_reason}) (#2356)\n"
8237
+ )
8238
+ else:
8239
+ reopen.write(
8240
+ f"# reap: push failed ({_reason})\n"
8241
+ )
8155
8242
  except OSError:
8156
8243
  pass
8157
8244
 
@@ -3,10 +3,11 @@
3
3
 
4
4
  Thin CLI glue around ``coord/milestone_order.py`` (the pure DAG/frontier
5
5
  parser) and ``coord/milestone_dispatch.py`` (Phase 1's machine-picking +
6
- dispatch): fetches the tracking issue + milestone membership + issue
7
- terminal state from GitHub via ``coord.milestone_dispatch.
8
- fetch_milestone_context`` (shared by both subcommands so they see identical
9
- inputs), then hands that data to the pure functions and prints the result.
6
+ dispatch, and #2335's work-order -> drive-queue translation): fetches the
7
+ tracking issue + milestone membership + issue terminal state from GitHub via
8
+ ``coord.milestone_dispatch.fetch_milestone_context`` (shared by both
9
+ subcommands so they see identical inputs), then hands that data to the pure
10
+ functions and prints the result.
10
11
  """
11
12
 
12
13
  from __future__ import annotations
@@ -21,7 +22,6 @@ import httpx
21
22
  from coord.commands._common import _CONFIG_OPTION, _load_config
22
23
  from coord.milestone_dispatch import (
23
24
  DispatchOutcome,
24
- MachinePick,
25
25
  MilestoneDispatchError,
26
26
  dispatch_entry,
27
27
  fetch_milestone_context,
@@ -29,6 +29,7 @@ from coord.milestone_dispatch import (
29
29
  is_milestone_complete,
30
30
  pick_machine,
31
31
  plan_dispatch,
32
+ plan_queue,
32
33
  )
33
34
  from coord.milestone_order import (
34
35
  TRACKING_ISSUE_LABEL,
@@ -859,11 +860,6 @@ def milestone_order_cmd(repo: str, tracking_issue: int, config_path: Path) -> No
859
860
  click.echo(f" #{b.issue_number}: {b.reason}")
860
861
 
861
862
 
862
- def _echo_pick(pick: MachinePick) -> None:
863
- suffix = f" (group {pick.entry.group})" if pick.entry.group else ""
864
- click.echo(f" #{pick.entry.issue_number} -> {pick.machine.name}{suffix}")
865
-
866
-
867
863
  def _echo_outcome(outcome: DispatchOutcome) -> None:
868
864
  if outcome.ok:
869
865
  click.echo(
@@ -883,13 +879,18 @@ def _echo_outcome(outcome: DispatchOutcome) -> None:
883
879
  @milestone_group.command(
884
880
  "dispatch",
885
881
  help=(
886
- "Promote a milestone into the pipeline: dispatch its ready frontier "
887
- "in parallel (up to idle/capable machines), then keep draining it as "
888
- "declared-order dependencies complete. REPO is the local repo name "
889
- "from coordinator.yml; TRACKING_ISSUE is the GH issue number of the "
890
- "tracking issue (its body holds the `## Work order` block). This is "
891
- "the single explicit approval for the whole declared work order — "
892
- "it does not expand scope beyond what `## Work order` lists."
882
+ "Promote a milestone into the pipeline: derive the dependency order "
883
+ "from the `## Work order` DAG and queue every still-open issue into "
884
+ "the drive-queue (`coord drive-queue add --after ...`) in that order "
885
+ "(#2335) the DQ-4 tick then launches each issue as its pre-reqs "
886
+ "land, with #2247 file-overlap prediction, durable board-backed "
887
+ "state, and `coord drive-queue list/status` observability. `--next` "
888
+ "keeps the lighter direct single-dispatch path. REPO is the local "
889
+ "repo name from coordinator.yml; TRACKING_ISSUE is the GH issue "
890
+ "number of the tracking issue (its body holds the `## Work order` "
891
+ "block). This is the single explicit approval for the whole declared "
892
+ "work order — it does not expand scope beyond what `## Work order` "
893
+ "lists."
893
894
  ),
894
895
  )
895
896
  @click.argument("repo")
@@ -902,8 +903,9 @@ def _echo_outcome(outcome: DispatchOutcome) -> None:
902
903
  "--next", "next_", is_flag=True,
903
904
  help=(
904
905
  "Single-pick mode: show up to 3 ready-frontier items and dispatch "
905
- "only the one you choose. Lighter-weight than draining the whole "
906
- "milestone does not register for daemon auto-drain."
906
+ "only the one you choose directly, not via the drive-queue. "
907
+ "Lighter-weight than bulk mode's whole-DAG drive-queue enqueue "
908
+ "(#2335)."
907
909
  ),
908
910
  )
909
911
  @click.option(
@@ -1003,14 +1005,15 @@ def milestone_dispatch_cmd(
1003
1005
  click.echo(f"#{tracking_issue}: no `## Work order` block found")
1004
1006
  return
1005
1007
 
1006
- board = board_service.read_board()
1007
- plan = plan_dispatch(ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues)
1008
-
1009
1008
  click.echo(
1010
1009
  f"Work order for #{tracking_issue} (milestone #{ctx.milestone_number}):"
1011
1010
  )
1012
1011
 
1013
1012
  if next_:
1013
+ board = board_service.read_board()
1014
+ plan = plan_dispatch(
1015
+ ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues
1016
+ )
1014
1017
  if not plan.to_dispatch:
1015
1018
  click.echo("No ready frontier item can dispatch right now.")
1016
1019
  if plan.skipped:
@@ -1075,54 +1078,93 @@ def milestone_dispatch_cmd(
1075
1078
  sys.exit(1)
1076
1079
  return
1077
1080
 
1078
- # Bulk mode: dispatch the entire current ready frontier.
1079
- click.echo("Will dispatch now:")
1080
- if plan.to_dispatch:
1081
- for pick in plan.to_dispatch:
1082
- _echo_pick(pick)
1083
- else:
1084
- click.echo(" (none)")
1085
-
1086
- if plan.skipped:
1087
- click.echo()
1088
- click.echo("Ready but no idle machine:")
1089
- for s in plan.skipped:
1090
- click.echo(f" #{s.entry.issue_number}: {s.reason}")
1081
+ # Bulk mode (#2335): queue the whole declared work order into the
1082
+ # drive-queue rather than dispatching the ready frontier directly. Before
1083
+ # #2335 this path called `dispatch_entry` per frontier pick and registered
1084
+ # the milestone for daemon auto-drain — bypassing the drive-queue
1085
+ # entirely: no #2247 overlap prediction, no durable queue entry surviving
1086
+ # a coordinator restart, nothing in `coord drive-queue list/status`. The
1087
+ # queue's `after=` edges now carry the DAG, so the DQ-4 tick launches each
1088
+ # issue as its pre-reqs land; that also makes `register_milestone_drain`
1089
+ # redundant here (the queue IS the durable drain, and registering would
1090
+ # have the daemon's direct-dispatch drain racing it).
1091
+ queue_plan = plan_queue(ctx.work_order, ctx.terminal_issues, repo_entry.name)
1092
+
1093
+ if not queue_plan:
1094
+ click.echo("Nothing to queue — every work-order node is already closed.")
1095
+ return
1091
1096
 
1092
- if plan.waiting:
1093
- click.echo()
1094
- click.echo("Waiting:")
1095
- for b in plan.waiting:
1096
- click.echo(f" #{b.issue_number}: {b.reason}")
1097
+ click.echo("Will queue (drive-queue), in dependency order:")
1098
+ for qe in queue_plan:
1099
+ bits = []
1100
+ if qe.group:
1101
+ bits.append(f"group {qe.group}")
1102
+ if qe.after:
1103
+ bits.append("after " + ", ".join(qe.after))
1104
+ suffix = f" ({'; '.join(bits)})" if bits else ""
1105
+ click.echo(f" #{qe.issue_number}{suffix}")
1097
1106
 
1098
1107
  if dry_run:
1099
1108
  click.echo()
1100
- click.echo("(dry run — not dispatched)")
1109
+ click.echo("(dry run — nothing queued)")
1101
1110
  return
1102
1111
 
1103
- if not plan.to_dispatch:
1104
- click.echo()
1105
- click.echo("Nothing to dispatch right now.")
1106
- return
1112
+ # Reuse `coord drive-queue add`'s own helpers so a milestone enqueue is
1113
+ # byte-identical to N manual `add` calls: same pre-write validation, same
1114
+ # #2247 overlap prediction (auto-`after` edges recorded to the audit log),
1115
+ # same upsert semantics for an issue already queued.
1116
+ from coord.commands.drive_queue import ( # noqa: PLC0415
1117
+ _applicable_auto_after,
1118
+ _predict_overlap,
1119
+ _record_overlap_prediction,
1120
+ )
1121
+ from coord.drive_queue import ( # noqa: PLC0415
1122
+ QueueError,
1123
+ entries_from_rows,
1124
+ entry_key,
1125
+ validate_enqueue,
1126
+ )
1127
+ from coord.state import enqueue_drive_queue, list_drive_queue # noqa: PLC0415
1107
1128
 
1108
1129
  click.echo()
1109
1130
  failures = 0
1110
- for pick in plan.to_dispatch:
1111
- outcome = dispatch_entry(pick, repo_entry, cfg, board, tracking_issue=tracking_issue)
1112
- _echo_outcome(outcome)
1113
- if not outcome.ok:
1131
+ queued = 0
1132
+ for qe in queue_plan:
1133
+ # Re-read per entry so each add validates (and overlap-predicts)
1134
+ # against the queue as its just-added siblings left it.
1135
+ existing = entries_from_rows(list_drive_queue())
1136
+ after = list(qe.after)
1137
+ key = entry_key(repo_entry.name, qe.issue_number)
1138
+ try:
1139
+ validate_enqueue(existing, repo_entry.name, qe.issue_number, after)
1140
+ except QueueError as exc:
1141
+ click.echo(f" {key}: not queued: {exc}", err=True)
1114
1142
  failures += 1
1143
+ continue
1144
+ prediction = _predict_overlap(
1145
+ config_path, repo_entry.name, qe.issue_number, existing
1146
+ )
1147
+ auto_after = _applicable_auto_after(
1148
+ existing, repo_entry.name, qe.issue_number, after, prediction
1149
+ )
1150
+ after = [*after, *auto_after]
1151
+ enqueue_drive_queue(repo_entry.name, qe.issue_number, after=after)
1152
+ if auto_after:
1153
+ _record_overlap_prediction(
1154
+ repo_entry.name, qe.issue_number, prediction, auto_after
1155
+ )
1156
+ suffix = f" after {', '.join(after)}" if after else ""
1157
+ overlap_note = f"\n {prediction.reason}" if auto_after else ""
1158
+ click.echo(f" queued {key}{suffix}{overlap_note}")
1159
+ queued += 1
1115
1160
 
1116
- if not is_milestone_complete(ctx):
1117
- from coord.state import register_milestone_drain
1118
-
1119
- register_milestone_drain(repo_name=repo_entry.name, tracking_issue=tracking_issue)
1161
+ if queued:
1120
1162
  click.echo()
1121
1163
  click.echo(
1122
- f"Milestone #{tracking_issue} registered for daemon auto-drain "
1123
- "(requires `milestone.auto_dispatch: true` in coordinator.yml + a "
1124
- "daemon restart to activate; `coord milestone dispatch` still "
1125
- "works as a manual re-drain either way)."
1164
+ f"{queued} issue(s) queued `coord drive-queue tick` (the DQ-4 "
1165
+ "timer, or run it manually) launches them in dependency order; "
1166
+ "`coord drive-queue list` shows the queue. Entries are durable "
1167
+ "across coordinator restarts."
1126
1168
  )
1127
1169
 
1128
1170
  if failures:
@@ -16,7 +16,10 @@ not an LLM judgment call like ``coord.brain.propose``.
16
16
  Three call sites share this module:
17
17
 
18
18
  - ``coord milestone dispatch`` (``coord/commands/milestone.py``) — the
19
- one-shot CLI dispatch (bulk or ``--next`` single-pick).
19
+ ``--next`` single-pick still dispatches directly through
20
+ :func:`plan_dispatch`/:func:`dispatch_entry`; bulk mode instead derives
21
+ drive-queue enqueues from the work order via :func:`plan_queue` (#2335),
22
+ so the DQ-4 tick owns the actual launches.
20
23
  - The daemon's auto-drain tick (``coord.serve_app._milestone_drain_tick``,
21
24
  opt-in via ``coordinator.yml`` ``milestone.auto_dispatch``) — re-runs the
22
25
  same fetch → plan → dispatch sequence for milestones registered via a
@@ -38,6 +41,7 @@ from coord.milestone_order import (
38
41
  FrontierEntry,
39
42
  WorkOrder,
40
43
  WorkOrderError,
44
+ WorkOrderNode,
41
45
  parse_work_order,
42
46
  ready_frontier,
43
47
  validate_milestone_membership,
@@ -64,6 +68,8 @@ __all__ = [
64
68
  "NoMachineAvailable",
65
69
  "MilestonePlan",
66
70
  "plan_dispatch",
71
+ "QueuePlanEntry",
72
+ "plan_queue",
67
73
  "DispatchOutcome",
68
74
  "dispatch_entry",
69
75
  "is_milestone_complete",
@@ -684,6 +690,74 @@ def plan_dispatch(
684
690
  )
685
691
 
686
692
 
693
+ @dataclass(frozen=True)
694
+ class QueuePlanEntry:
695
+ """One drive-queue enqueue derived from a work-order node (#2335)."""
696
+
697
+ issue_number: int
698
+ #: Fully-qualified pre-req keys (``"repo#N"``) for the drive-queue's
699
+ #: ``after=`` edge list — the node's declared ``{after: #N}`` targets,
700
+ #: minus any that are already terminal (closed issues never enter the
701
+ #: queue, so an edge at one would read as unsatisfiable to the tick's
702
+ #: ``_resolve_prereqs`` rather than as "already done").
703
+ after: tuple[str, ...] = ()
704
+ group: str | None = None
705
+
706
+
707
+ def plan_queue(
708
+ work_order: WorkOrder,
709
+ terminal_issues: frozenset[int] | set[int],
710
+ repo_name: str,
711
+ ) -> tuple[QueuePlanEntry, ...]:
712
+ """Translate the work order's DAG into drive-queue enqueues (#2335).
713
+
714
+ Pure — no GitHub, no board, no side effects. One entry per non-terminal
715
+ node, in dependency order: a stable topological sort seeded by declared
716
+ order, so independent nodes keep the operator's declared sequence while a
717
+ node declared *before* its own pre-req still queues after it (queue
718
+ position is the tick's tie-break among eligible entries; the ``after``
719
+ edges are what actually gate launches).
720
+
721
+ Each entry's ``after`` carries the node's declared ``{after: #N}`` edges
722
+ as fully-qualified ``repo#N`` keys — the same format ``coord drive-queue
723
+ add --after`` parses — filtered to pre-reqs that are still open.
724
+ :func:`~coord.milestone_order.parse_work_order` already refused cycles,
725
+ self-edges, and edges to undeclared nodes, so the sort always terminates;
726
+ the defensive tail below only fires on inputs constructed outside it.
727
+ """
728
+ from coord.drive_queue import entry_key # noqa: PLC0415
729
+
730
+ terminal = set(terminal_issues)
731
+ remaining: dict[int, WorkOrderNode] = {
732
+ n.issue_number: n for n in work_order.nodes if n.issue_number not in terminal
733
+ }
734
+ open_set = set(remaining)
735
+ placed: set[int] = set()
736
+ ordered: list[WorkOrderNode] = []
737
+ while remaining:
738
+ progressed = False
739
+ for number, node in list(remaining.items()):
740
+ if any(d in open_set and d not in placed for d in node.after):
741
+ continue
742
+ ordered.append(node)
743
+ placed.add(number)
744
+ del remaining[number]
745
+ progressed = True
746
+ if not progressed: # cycle — unreachable via parse_work_order; see above
747
+ ordered.extend(remaining.values())
748
+ break
749
+ return tuple(
750
+ QueuePlanEntry(
751
+ issue_number=n.issue_number,
752
+ after=tuple(
753
+ entry_key(repo_name, d) for d in n.after if d not in terminal
754
+ ),
755
+ group=n.group,
756
+ )
757
+ for n in ordered
758
+ )
759
+
760
+
687
761
  @dataclass(frozen=True)
688
762
  class DispatchOutcome:
689
763
  """The result of one :func:`dispatch_entry` call."""
@@ -1283,8 +1283,11 @@ def _milestone_drain_tick(config: Config) -> list:
1283
1283
 
1284
1284
  Called by ``_tick_loop`` when ``milestone.auto_dispatch: true`` is set in
1285
1285
  ``coordinator.yml`` (default-off). For each ``(repo_name, tracking_issue)``
1286
- registered via a non-dry-run ``coord milestone dispatch`` (``coord.state.
1287
- register_milestone_drain``), re-fetches the tracking issue, recomputes the
1286
+ registered via ``coord.state.register_milestone_drain`` (historically the
1287
+ non-dry-run ``coord milestone dispatch`` bulk path since #2335 that
1288
+ path enqueues the work order into the drive-queue instead and registers
1289
+ nothing, so only pre-#2335 registrations feed this tick), re-fetches the
1290
+ tracking issue, recomputes the
1288
1291
  ready frontier (:func:`coord.milestone_dispatch.plan_dispatch`), and
1289
1292
  dispatches any newly-unblocked entries — the same mechanism a manual
1290
1293
  ``coord milestone dispatch`` uses, so a fix that lands and merges for one
@@ -167,7 +167,7 @@ The auto-loop above sequences a *single* issue. For work that spans many issues,
167
167
 
168
168
  Layering is deliberate: `evaluate_gate(gate, probes)` is **pure** (gate name + a `GateProbes` value in, one `GateStep` out — no board, no GitHub, no clock), so every edge in the machine is decided in exactly one place and any edge is testable without I/O; `probe_milestone()` is the I/O half and reuses the *existing* readers (`milestone_dispatch.gate_a_status`, `gate_b.latest_gate_b_verdict`) so the gate walk and the manual CLI can never disagree about whether a gate is satisfied. `work` is the only state with a side effect, and it delegates to `plan_dispatch` + `dispatch_entry` rather than adding a second dispatch path. Every other edge is currently an explicit, logged **hold** — the machine reports why it cannot advance and stays put. There is no silent fall-through anywhere in the module; that is the failure mode that produced the 240-minute advisory spin in the per-issue driver.
169
169
 
170
- **`drive` vs. `milestone.auto_dispatch` — mutually exclusive per milestone, gate driving wins.** `milestone.auto_dispatch` gates the *legacy standalone drain* (`_milestone_drain_tick`): a milestone registered by `coord milestone dispatch` whose frontier the daemon re-drains with no gate walk around it. A milestone with a gate record is driven by `_milestone_gate_tick` instead, which owns the drain as its `work` state — so `_milestone_drain_tick` **skips** any `(repo_name, tracking_issue)` that has a gate record. Without that exclusion a milestone parked at Gate A could still have its frontier dispatched by the independently-gated drain path. Gate driving is consequently its own per-milestone opt-in (`coord milestone drive`) and `_milestone_gate_tick` is *not* behind the global flag — hiding it there would make `drive` silently no-op.
170
+ **`drive` vs. `milestone.auto_dispatch` — mutually exclusive per milestone, gate driving wins.** `milestone.auto_dispatch` gates the *legacy standalone drain* (`_milestone_drain_tick`): a milestone registered by a pre-#2335 `coord milestone dispatch` whose frontier the daemon re-drains with no gate walk around it. (Since #2335 the bulk `coord milestone dispatch` path enqueues the whole `## Work order` DAG into the drive-queue — `after=` edges carry the dependencies, the DQ-4 tick launches, and nothing new registers for this drain.) A milestone with a gate record is driven by `_milestone_gate_tick` instead, which owns the drain as its `work` state — so `_milestone_drain_tick` **skips** any `(repo_name, tracking_issue)` that has a gate record. Without that exclusion a milestone parked at Gate A could still have its frontier dispatched by the independently-gated drain path. Gate driving is consequently its own per-milestone opt-in (`coord milestone drive`) and `_milestone_gate_tick` is *not* behind the global flag — hiding it there would make `drive` silently no-op.
171
171
 
172
172
  **Exactly one overseer, structurally (#1930).** The gate tick is the sole owner of a gate-controlled milestone's `work` drain. `coord milestone drive` only ever writes/re-persists the `GateRecord` — it never calls `apply_step` or dispatches, so running it twice (any operator, any machine) is inert, not a race. `coord milestone dispatch`, the manual non-gate CLI, now refuses outright against a milestone with a gate record — before #1930 it had no way to know one existed and would dispatch the same frontier the gate tick's `work` state owns, the same "two gates disagreeing about whether work may start" shape #1870 fixed for the drive queue, reached from an operator's keyboard instead of a second host's timer.
173
173