code-coordinator 0.5.126__tar.gz → 0.5.128__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.126 → code_coordinator-0.5.128}/CLAUDE.md +1 -0
  2. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/SOURCES.txt +2 -0
  5. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/scm_file_list.json +2 -0
  6. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/acceptance.py +155 -102
  8. code_coordinator-0.5.128/docs/WSL_WINDOWS_WORKER.md +77 -0
  9. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_acceptance.py +111 -0
  10. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/Cargo.lock +1 -1
  11. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/Cargo.toml +1 -1
  12. code_coordinator-0.5.128/tui/src/app/doc_tabs.rs +480 -0
  13. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/events.rs +84 -1
  14. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/fixtures.rs +4 -0
  15. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/mod.rs +475 -7
  16. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/render.rs +107 -4
  17. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/tests.rs +433 -0
  18. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/workflows/cargo-test.yml +0 -0
  29. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/workflows/release-tui.yml +0 -0
  31. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.github/workflows/test.yml +0 -0
  32. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/.gitignore +0 -0
  33. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/GOAL.md +0 -0
  34. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/LICENSE +0 -0
  35. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/MANIFEST.in +0 -0
  36. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/README.md +0 -0
  37. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agent.py +0 -0
  46. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/block_log.py +0 -0
  54. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/board_bool_guard.py +0 -0
  55. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/client.py +0 -0
  66. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/lifecycle.py +0 -0
  79. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/config.py +0 -0
  97. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/conflict_fix.py +0 -0
  99. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dao.py +0 -0
  100. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/__init__.py +0 -0
  101. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/fixture.py +0 -0
  102. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/index.html +0 -0
  103. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/server.py +0 -0
  104. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/terminal.py +0 -0
  105. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/.gitignore +0 -0
  106. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/components.json +0 -0
  107. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  108. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  109. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  110. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  111. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  112. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  113. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  114. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  115. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  116. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/index.html +0 -0
  117. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  118. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/sw.js +0 -0
  119. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  120. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  121. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  122. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  123. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  124. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  125. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  126. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  127. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  128. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  129. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/eslint.config.js +0 -0
  130. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/index.html +0 -0
  131. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  132. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/package-lock.json +0 -0
  133. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/package.json +0 -0
  134. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  135. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/playwright.config.ts +0 -0
  136. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/postcss.config.js +0 -0
  137. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  138. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  139. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  140. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/App.tsx +0 -0
  141. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/api/client.ts +0 -0
  142. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  143. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  144. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  145. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  146. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  147. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  148. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  149. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  150. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  151. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  152. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  153. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  154. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  155. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  156. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  157. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  158. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  159. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  160. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  161. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  162. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  163. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  164. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  165. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  166. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  167. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  168. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  169. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  170. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  171. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  172. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  173. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  174. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  175. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  176. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  177. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/index.css +0 -0
  178. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  179. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  180. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/main.tsx +0 -0
  181. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  182. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  183. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  184. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  185. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  186. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  187. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  188. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  189. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  190. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  191. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  192. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  193. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  194. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  195. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  196. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  197. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  198. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  199. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  200. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  201. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  202. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  203. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  204. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/tailwind.config.js +0 -0
  205. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/tsconfig.json +0 -0
  206. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  207. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dashboard/webapp/vite.config.ts +0 -0
  208. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/db.py +0 -0
  209. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dead_end.py +0 -0
  210. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/README.md +0 -0
  211. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-agent.service +0 -0
  212. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-db-backup.service +0 -0
  213. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-db-backup.sh +0 -0
  214. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-db-backup.timer +0 -0
  215. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-drive-queue.service +0 -0
  216. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-drive-queue.timer +0 -0
  217. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-notify.service +0 -0
  218. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-notify.timer +0 -0
  219. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-release-propagate.service +0 -0
  220. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-release-propagate.timer +0 -0
  221. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-release-window.service +0 -0
  222. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-release-window.timer +0 -0
  223. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-serve.service +0 -0
  224. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-web-dist-build.service +0 -0
  225. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-web-dist-build.timer +0 -0
  226. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy/coord-web.service +0 -0
  227. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy_manifest.py +0 -0
  228. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deploy_units.py +0 -0
  229. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/deps.py +0 -0
  230. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/diagnose.py +0 -0
  231. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dispatch.py +0 -0
  232. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/dist_name.py +0 -0
  233. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/drive.py +0 -0
  234. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/drive_queue.py +0 -0
  235. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/drive_state.py +0 -0
  236. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/events.py +0 -0
  237. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/failure_class.py +0 -0
  238. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/filelock.py +0 -0
  239. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/fleet_config_health.py +0 -0
  240. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/freshness.py +0 -0
  241. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/gate_a.py +0 -0
  242. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/gate_b.py +0 -0
  243. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/gate_snapshot.py +0 -0
  244. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/gates.py +0 -0
  245. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/github_ops.py +0 -0
  246. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/goal.py +0 -0
  247. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/graph_health.py +0 -0
  248. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/__init__.py +0 -0
  249. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/aggregate.py +0 -0
  250. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/__init__.py +0 -0
  251. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/agent_install.py +0 -0
  252. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/cargo_targets.py +0 -0
  253. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/claude_binary.py +0 -0
  254. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/deploy_lane_facts.py +0 -0
  255. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/disk.py +0 -0
  256. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/fleet_board.py +0 -0
  257. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  258. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/fleet_phantom.py +0 -0
  259. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/fleet_unit_drift.py +0 -0
  260. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/graph.py +0 -0
  261. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/graphify_cli.py +0 -0
  262. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/index_lock.py +0 -0
  263. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/plan_usage.py +0 -0
  264. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/repo_state.py +0 -0
  265. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/spawned_coord.py +0 -0
  266. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/timer_active.py +0 -0
  267. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/toolchain.py +0 -0
  268. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/unit_drift.py +0 -0
  269. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/unit_enablement.py +0 -0
  270. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/checks/worktrees.py +0 -0
  271. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/cli.py +0 -0
  272. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/context.py +0 -0
  273. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/fleet_snapshot.py +0 -0
  274. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/models.py +0 -0
  275. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/pypi.py +0 -0
  276. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/registry.py +0 -0
  277. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/render.py +0 -0
  278. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/health/units.py +0 -0
  279. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/hooks.py +0 -0
  280. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/housekeeping.py +0 -0
  281. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/interactive.py +0 -0
  282. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/issue_store.py +0 -0
  283. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/liveness_auditor.py +0 -0
  284. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/machine_pause.py +0 -0
  285. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/merge_queue.py +0 -0
  286. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/milestone_chat.py +0 -0
  287. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/milestone_dispatch.py +0 -0
  288. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/milestone_gate.py +0 -0
  289. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/milestone_order.py +0 -0
  290. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/mock_author.py +0 -0
  291. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/models.py +0 -0
  292. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/network.py +0 -0
  293. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/new_issue_chat.py +0 -0
  294. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/__init__.py +0 -0
  295. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/baseline.py +0 -0
  296. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/cli.py +0 -0
  297. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/collect.py +0 -0
  298. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/digest.py +0 -0
  299. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/models.py +0 -0
  300. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/predicate.py +0 -0
  301. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/service.py +0 -0
  302. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/store.py +0 -0
  303. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notifier/transport.py +0 -0
  304. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/notify.py +0 -0
  305. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/openapi.py +0 -0
  306. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/overlap_fence.py +0 -0
  307. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/overlap_predict.py +0 -0
  308. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/parentage.py +0 -0
  309. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/parentage_github.py +0 -0
  310. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/pipeline.py +0 -0
  311. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/plan_parser.py +0 -0
  312. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/plans.py +0 -0
  313. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/platform_paths.py +0 -0
  314. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/portal_bridge.py +0 -0
  315. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/portal_store.py +0 -0
  316. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/portal_sync.py +0 -0
  317. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/pr_body_lint.py +0 -0
  318. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/prereqs.py +0 -0
  319. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/progress.py +0 -0
  320. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/providers/__init__.py +0 -0
  321. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/providers/base.py +0 -0
  322. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/providers/claude.py +0 -0
  323. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/providers/claude_pty.py +0 -0
  324. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/providers/opencode.py +0 -0
  325. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/queue_diagnose.py +0 -0
  326. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/reconcile.py +0 -0
  327. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/refine_chat.py +0 -0
  328. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/release_cordon.py +0 -0
  329. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/release_propagate.py +0 -0
  330. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/release_verify.py +0 -0
  331. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/release_window.py +0 -0
  332. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/repo_edit.py +0 -0
  333. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/repo_onboard.py +0 -0
  334. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/reports.py +0 -0
  335. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/revalidate.py +0 -0
  336. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/review.py +0 -0
  337. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/scorecard.py +0 -0
  338. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/serve_app.py +0 -0
  339. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/skills/portal-followup/SKILL.md +0 -0
  340. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/skills/update-issue/SKILL.md +0 -0
  341. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/smoke.py +0 -0
  342. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/spend_ceiling.py +0 -0
  343. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/split_work.py +0 -0
  344. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/stage_projection.py +0 -0
  345. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/state.py +0 -0
  346. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/test_author.py +0 -0
  347. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/test_chat.py +0 -0
  348. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/test_orchestrator.py +0 -0
  349. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/test_report.py +0 -0
  350. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/tui_release.py +0 -0
  351. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/usage.py +0 -0
  352. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/usage_limits.py +0 -0
  353. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/usage_rollup.py +0 -0
  354. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coord/worker_events.py +0 -0
  355. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/coordinator.example.yml +0 -0
  356. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-agent.service +0 -0
  357. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-db-backup.service +0 -0
  358. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-db-backup.sh +0 -0
  359. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-db-backup.timer +0 -0
  360. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-drive-queue.service +0 -0
  361. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-drive-queue.timer +0 -0
  362. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-notify.service +0 -0
  363. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-notify.timer +0 -0
  364. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-release-propagate.service +0 -0
  365. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-release-propagate.timer +0 -0
  366. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-release-window.service +0 -0
  367. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-release-window.timer +0 -0
  368. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-serve.service +0 -0
  369. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-web-dist-build.service +0 -0
  370. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-web-dist-build.sh +0 -0
  371. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-web-dist-build.timer +0 -0
  372. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-web-rollback.sh +0 -0
  373. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/coord-web.service +0 -0
  374. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/deploy/node-shim.sh +0 -0
  375. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/AGENT_OPERATIONS.md +0 -0
  376. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/ARCHITECTURE.md +0 -0
  377. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/ARCH_SECURITY_GATES.md +0 -0
  378. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/COCKPIT.md +0 -0
  379. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/COST_DISCIPLINE.md +0 -0
  381. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/CROSS_PLATFORM.md +0 -0
  382. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/CUSTOMER_PORTAL.md +0 -0
  383. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/DRIVE_QUEUE.md +0 -0
  384. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/EPHEMERAL_WORKERS.md +0 -0
  385. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/FORGE_MIGRATION.md +0 -0
  386. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/GRAPHIFY_SETUP.md +0 -0
  387. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/ISSUE_GUIDANCE.md +0 -0
  388. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/MAC_MINI.md +0 -0
  389. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  390. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/NOTIFIER.md +0 -0
  391. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/OPENCODE_VERIFICATION.md +0 -0
  392. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/OPERATING_GOTCHAS.md +0 -0
  393. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/ORACLE_LOOP.md +0 -0
  394. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/PHONE_WEBAPP.md +0 -0
  395. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/PIPELINE_V2.md +0 -0
  396. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/PLATFORM_EVOLUTION.md +0 -0
  397. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/SECOND_BACKEND.md +0 -0
  398. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/STORE_SERVICE.md +0 -0
  399. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  400. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/WEB_CONTROL_CENTER.md +0 -0
  401. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/mocks/web/README.md +0 -0
  402. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/mocks/web/_tokens.css +0 -0
  403. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/mocks/web/issue-detail.html +0 -0
  404. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/mocks/web/pipeline-narrow.html +0 -0
  405. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/docs/mocks/web/pipeline-wide.html +0 -0
  406. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/graphify-out/.gitignore +0 -0
  407. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/install-agent.sh +0 -0
  408. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/pyproject.toml +0 -0
  409. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/audit_review_verdict_overrides.py +0 -0
  410. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  411. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/build-worker-image.sh +0 -0
  412. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/coordinator-machine.py +0 -0
  413. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/epic-down.sh +0 -0
  414. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/epic-up.sh +0 -0
  415. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/preflight.sh +0 -0
  416. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/provision-worker.sh +0 -0
  417. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  418. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  419. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/azure-workers/verify-github-token.sh +0 -0
  420. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/codegen.py +0 -0
  421. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/coord-test-runner.sh +0 -0
  422. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/drive-batch.sh +0 -0
  423. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/gen_board_fixture.py +0 -0
  424. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/next_release_tag.py +0 -0
  425. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/run_tests_in_populated_home.sh +0 -0
  426. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/run_tests_without_gh.sh +0 -0
  427. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/smoke_437_interactive.py +0 -0
  428. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/verify_878_review_capture.py +0 -0
  429. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/verify_release_published.py +0 -0
  430. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/scripts/verify_release_wheel.py +0 -0
  431. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/setup.cfg +0 -0
  432. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/SMOKE_SET.md +0 -0
  433. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/__init__.py +0 -0
  434. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  435. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/contract.md +0 -0
  436. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/manifest.yml +0 -0
  437. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  438. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  439. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  440. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  441. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-37/conftest.py +0 -0
  442. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-37/contract.md +0 -0
  443. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-37/manifest.yml +0 -0
  444. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  445. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  446. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/contract.md +0 -0
  447. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/manifest.yml +0 -0
  448. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  449. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  450. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  451. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  452. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  453. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  454. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  455. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  456. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  457. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  458. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/contract.md +0 -0
  459. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  460. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  461. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/manifest.yml +0 -0
  462. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  463. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-51/tsconfig.json +0 -0
  464. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  465. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/contract.md +0 -0
  466. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/manifest.yml +0 -0
  467. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  468. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  469. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  470. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  471. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  472. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  473. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  474. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  475. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  476. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/conftest.py +0 -0
  477. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/board-pipeline-basic.json +0 -0
  478. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  479. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  480. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  481. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  482. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/all_pass.json +0 -0
  483. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  484. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/mixed_fail.json +0 -0
  485. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  486. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  487. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/skip.json +0 -0
  488. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/playwright/truncated.json +0 -0
  489. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  490. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  491. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  492. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  493. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  494. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  495. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  496. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  497. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_acceptance.py +0 -0
  498. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_acceptance_drivers.py +0 -0
  499. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent.py +0 -0
  500. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_api_error.py +0 -0
  501. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_app.py +0 -0
  502. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_branch_base.py +0 -0
  503. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_branch_capture.py +0 -0
  504. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_config_free_1712.py +0 -0
  505. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_deploy_units_endpoint.py +0 -0
  506. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_dirty_worktree.py +0 -0
  507. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_graph_self_heal.py +0 -0
  508. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_health_h3.py +0 -0
  509. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_idle_restart.py +0 -0
  510. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_push_failure.py +0 -0
  511. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_reap.py +0 -0
  512. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_repos_and_pull.py +0 -0
  513. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_restart_services_endpoint.py +0 -0
  514. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_startup_diagnostics.py +0 -0
  515. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_update.py +0 -0
  516. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_update_bluegreen.py +0 -0
  517. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_usage_limit.py +0 -0
  518. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_agent_zero_commit.py +0 -0
  519. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_ambient_home_isolation.py +0 -0
  520. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_approve_reject_plan.py +0 -0
  521. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_approve_usage_gate.py +0 -0
  522. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_assignment_already_recorded_daemon.py +0 -0
  523. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_audit_log.py +0 -0
  524. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_audit_outcome.py +0 -0
  525. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_audit_query.py +0 -0
  526. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_auto_loop.py +0 -0
  527. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_auto_release_publish_2035.py +0 -0
  528. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_base_checkout_restore.py +0 -0
  529. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_block_log.py +0 -0
  530. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_cap_762.py +0 -0
  531. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_fixture.py +0 -0
  532. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_read_path.py +0 -0
  533. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_service.py +0 -0
  534. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_state.py +0 -0
  535. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_board_wire.py +0 -0
  536. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_brain.py +0 -0
  537. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_branch_model.py +0 -0
  538. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_bug_intake.py +0 -0
  539. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_build_worker_image_env_update.py +0 -0
  540. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cargo_cache.py +0 -0
  541. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_ci_acceptance_gate_1950.py +0 -0
  542. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_ci_parity_2091.py +0 -0
  543. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_ci_store.py +0 -0
  544. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_claim.py +0 -0
  545. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_assign.py +0 -0
  546. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  547. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_assign_interactive_remote.py +0 -0
  548. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_assign_provider.py +0 -0
  549. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  550. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_audit.py +0 -0
  551. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_chat_continue.py +0 -0
  552. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_diagnose_config_provenance.py +0 -0
  553. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_diagnose_graph.py +0 -0
  554. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_doctor.py +0 -0
  555. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_doctor_config_free_1801.py +0 -0
  556. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  557. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_drive.py +0 -0
  558. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_drive_queue.py +0 -0
  559. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_escalate.py +0 -0
  560. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_fix_headless_review.py +0 -0
  561. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_gate_a.py +0 -0
  562. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_install_drift.py +0 -0
  563. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_install_skills.py +0 -0
  564. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_issue_create_label.py +0 -0
  565. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_issue_reopen.py +0 -0
  566. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_merge.py +0 -0
  567. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_assign.py +0 -0
  568. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_capture.py +0 -0
  569. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_chat_add_child.py +0 -0
  570. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_dispatch.py +0 -0
  571. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_gate_b.py +0 -0
  572. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_gate_c.py +0 -0
  573. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_order.py +0 -0
  574. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  575. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_milestone_ship.py +0 -0
  576. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_network.py +0 -0
  577. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_new_issue_chat.py +0 -0
  578. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_plans.py +0 -0
  579. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_portal.py +0 -0
  580. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_pull_artifact.py +0 -0
  581. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_queue.py +0 -0
  582. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_reattach_sessions.py +0 -0
  583. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_refine_board.py +0 -0
  584. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_release_preflight.py +0 -0
  585. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_release_propagate.py +0 -0
  586. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_release_window.py +0 -0
  587. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_repo_2220.py +0 -0
  588. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_scorecard.py +0 -0
  589. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_merge_queue.py +0 -0
  592. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_provider.py +0 -0
  593. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_review_finalizing.py +0 -0
  594. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_test_failed_tag.py +0 -0
  595. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_status_usage_limit.py +0 -0
  596. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_sync_comments_873.py +0 -0
  597. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_test_plan.py +0 -0
  598. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_track.py +0 -0
  599. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_tui_update.py +0 -0
  600. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cli_wait.py +0 -0
  601. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_client_base_install.py +0 -0
  602. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_comments.py +0 -0
  603. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_completion_summary.py +0 -0
  604. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config.py +0 -0
  605. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config_acceptance.py +0 -0
  606. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config_audit.py +0 -0
  607. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config_pricing.py +0 -0
  608. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  609. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_config_usage_gate.py +0 -0
  610. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_conflict_fix.py +0 -0
  611. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_conflict_fix_semantic.py +0 -0
  612. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coord_test.py +0 -0
  613. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coord_test_runner_baseline.py +0 -0
  614. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coord_test_runner_routing.py +0 -0
  615. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coord_test_runner_toolchain.py +0 -0
  616. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coord_web_sse_restart_live.py +0 -0
  617. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_coordinator_machine.py +0 -0
  618. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_cross_platform_imports.py +0 -0
  619. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dashboard.py +0 -0
  620. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dashboard_fixture.py +0 -0
  621. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dashboard_terminal.py +0 -0
  622. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dashboard_terminal_live.py +0 -0
  623. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_db.py +0 -0
  624. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dead_end.py +0 -0
  625. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_coord_db_backup.py +0 -0
  626. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_coord_web_dist.py +0 -0
  627. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_coord_web_rollback.py +0 -0
  628. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_drive_queue_unit.py +0 -0
  629. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_manifest.py +0 -0
  630. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_units_lane.py +0 -0
  631. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deploy_web_unit.py +0 -0
  632. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_deps.py +0 -0
  633. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_diagnose.py +0 -0
  634. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dispatch.py +0 -0
  635. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dispatch_target_validation.py +0 -0
  636. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_dist_name.py +0 -0
  637. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_done_housekeeping.py +0 -0
  638. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_drive.py +0 -0
  639. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_drive_queue.py +0 -0
  640. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_drive_state.py +0 -0
  641. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_drive_tmux.py +0 -0
  642. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_epic_up_capability_detection.py +0 -0
  643. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  644. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_epic_up_image_provenance.py +0 -0
  645. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_errors.py +0 -0
  646. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_events.py +0 -0
  647. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_failure_class.py +0 -0
  648. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_filelock.py +0 -0
  649. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  650. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_fix_of_force_override.py +0 -0
  651. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_fleet_config_health.py +0 -0
  652. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_fleet_health_probes.py +0 -0
  653. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_fleet_health_snapshot.py +0 -0
  654. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_freshness.py +0 -0
  655. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_gate_a.py +0 -0
  656. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_gate_b.py +0 -0
  657. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_gate_snapshot_staleness.py +0 -0
  658. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_gates.py +0 -0
  659. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  660. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_generated_types_fixture.py +0 -0
  661. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_github_ops.py +0 -0
  662. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_goal.py +0 -0
  663. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_graph_health.py +0 -0
  664. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_graph_selfheal_absent_2237.py +0 -0
  665. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_handoff.py +0 -0
  666. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_checks.py +0 -0
  667. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_cli.py +0 -0
  668. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_cli_graph.py +0 -0
  669. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_config.py +0 -0
  670. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_context.py +0 -0
  671. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_deploy_lane_facts.py +0 -0
  672. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_incident_regression.py +0 -0
  673. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_pypi.py +0 -0
  674. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_registry.py +0 -0
  675. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_timer_active.py +0 -0
  676. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_toolchain.py +0 -0
  677. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_unit_drift.py +0 -0
  678. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_health_unit_enablement.py +0 -0
  679. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_hooks.py +0 -0
  680. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_human_attended_437.py +0 -0
  681. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_init.py +0 -0
  682. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_integration.py +0 -0
  683. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_briefing_echo.py +0 -0
  684. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_prefill_state.py +0 -0
  685. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_session_relaunch.py +0 -0
  686. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_test_verdict_backstop.py +0 -0
  687. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_token_attribution.py +0 -0
  688. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_interactive_worktree.py +0 -0
  689. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_issue_store_seam.py +0 -0
  690. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_liveness_auditor.py +0 -0
  691. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_liveness_notify.py +0 -0
  692. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_machine_pause.py +0 -0
  693. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_merge_queue.py +0 -0
  694. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_merge_verify.py +0 -0
  695. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_milestone_chat.py +0 -0
  696. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_milestone_dispatch.py +0 -0
  697. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_milestone_gate.py +0 -0
  698. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_milestone_order.py +0 -0
  699. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_milestone_seam.py +0 -0
  700. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_mock_author.py +0 -0
  701. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_model_tiering.py +0 -0
  702. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_models.py +0 -0
  703. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_models_config_labels.py +0 -0
  704. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_needs_attention.py +0 -0
  705. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_network.py +0 -0
  706. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_new_issue_chat.py +0 -0
  707. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_next_release_tag.py +0 -0
  708. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_no_direct_gh_calls.py +0 -0
  709. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_node_shim.py +0 -0
  710. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_baseline.py +0 -0
  711. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_cli.py +0 -0
  712. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_collect.py +0 -0
  713. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_config.py +0 -0
  714. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_drive_seam.py +0 -0
  715. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_isolation.py +0 -0
  716. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_predicate.py +0 -0
  717. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_quiet_hours.py +0 -0
  718. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notifier_service.py +0 -0
  719. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notify.py +0 -0
  720. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_notify_drain.py +0 -0
  721. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_openapi.py +0 -0
  722. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_operational_defaults.py +0 -0
  723. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_overlap_fence.py +0 -0
  724. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_overlap_predict.py +0 -0
  725. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_packaged_deploy_units.py +0 -0
  726. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_parentage.py +0 -0
  727. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_paste_landed.py +0 -0
  728. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_pipeline.py +0 -0
  729. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_plan_followup_approve_plan_command.py +0 -0
  730. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_plan_followup_pr_command.py +0 -0
  731. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_plan_followup_review_command.py +0 -0
  732. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_plan_only.py +0 -0
  733. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_plan_parser.py +0 -0
  734. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_platform_paths.py +0 -0
  735. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_portal_bridge.py +0 -0
  736. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_portal_config.py +0 -0
  737. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_portal_sync.py +0 -0
  738. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_pr_body_lint.py +0 -0
  739. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_prereqs.py +0 -0
  740. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_production_db_guard.py +0 -0
  741. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_progress.py +0 -0
  742. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_provider_seam.py +0 -0
  743. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_providers.py +0 -0
  744. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_providers_config_labels.py +0 -0
  745. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_providers_pty.py +0 -0
  746. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_quiet_hours.py +0 -0
  747. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_quiet_hours_store_2146.py +0 -0
  748. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reap_merged_sessions.py +0 -0
  749. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reap_stale_interactive_tick.py +0 -0
  750. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile.py +0 -0
  751. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile_branch.py +0 -0
  752. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile_completions.py +0 -0
  753. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile_merges.py +0 -0
  754. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile_no_agent_record.py +0 -0
  755. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reconcile_usage_limit_done.py +0 -0
  756. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_refine_chat.py +0 -0
  757. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_cordon_2101.py +0 -0
  758. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  759. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_cordon_deadlock_2240.py +0 -0
  760. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_propagate.py +0 -0
  761. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_unified_1242.py +0 -0
  762. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_verify.py +0 -0
  763. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_release_window.py +0 -0
  764. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_remote_auto_prune.py +0 -0
  765. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_remote_interactive_reaper.py +0 -0
  766. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_repo_edit_2220.py +0 -0
  767. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_repo_graph_fleet_2237.py +0 -0
  768. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_repo_onboard_2220.py +0 -0
  769. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_report_result_push.py +0 -0
  770. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_reports.py +0 -0
  771. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_retry.py +0 -0
  772. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_retry_advisory_1606.py +0 -0
  773. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_retry_type_1636.py +0 -0
  774. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_revalidate.py +0 -0
  775. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review.py +0 -0
  776. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_end_review_without_verdict.py +0 -0
  777. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_parse_failure_diagnostic.py +0 -0
  778. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_reaffirm.py +0 -0
  779. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_state.py +0 -0
  780. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_verdict_backstop.py +0 -0
  781. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_verdict_override_audit.py +0 -0
  782. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_verdict_relay.py +0 -0
  783. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_review_zero_commits.py +0 -0
  784. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_scoped_review_wiring.py +0 -0
  785. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_scorecard.py +0 -0
  786. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_serve.py +0 -0
  787. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_serve_app_board_trim.py +0 -0
  788. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_session.py +0 -0
  789. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_slice_issue_attribution.py +0 -0
  790. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_smoke.py +0 -0
  791. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_smoke_live_checkout_restore.py +0 -0
  792. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_smoke_workflow.py +0 -0
  793. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_spend_ceiling.py +0 -0
  794. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_spend_ceiling_coordinator.py +0 -0
  795. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_split.py +0 -0
  796. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_split_work.py +0 -0
  797. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_stage_projection.py +0 -0
  798. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_stalled_pipeline.py +0 -0
  799. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_state.py +0 -0
  800. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_state_review_findings_daemon.py +0 -0
  801. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_status_fleet_footer.py +0 -0
  802. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_stop_1567.py +0 -0
  803. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_stuck.py +0 -0
  804. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_terminal_command.py +0 -0
  805. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_author.py +0 -0
  806. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_chat.py +0 -0
  807. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_orchestrator.py +0 -0
  808. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_report.py +0 -0
  809. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_verdict_parsing.py +0 -0
  810. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_test_verdict_transcript_floor.py +0 -0
  811. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_thin_client_board_audit.py +0 -0
  812. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_thin_client_config_load_1080.py +0 -0
  813. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_thin_client_daemon_routing_906.py +0 -0
  814. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_tmux_host.py +0 -0
  815. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_tmux_session.py +0 -0
  816. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_transcript_floor.py +0 -0
  817. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_usage.py +0 -0
  818. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_usage_limits.py +0 -0
  819. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_usage_rollup.py +0 -0
  820. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_venv_live_install_2121.py +0 -0
  821. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_version_single_source.py +0 -0
  822. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_watch.py +0 -0
  823. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  824. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worker_events.py +0 -0
  825. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worker_image_pin_sync.py +0 -0
  826. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worker_safety.py +0 -0
  827. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worker_test_scoping.py +0 -0
  828. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worktree.py +0 -0
  829. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  830. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/cargo-config-local-quadraui.toml.example +0 -0
  831. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/audit.rs +0 -0
  832. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/chat.rs +0 -0
  833. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/data.rs +0 -0
  834. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/dialogs.rs +0 -0
  835. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/drive.rs +0 -0
  836. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/drive_queue.rs +0 -0
  837. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/escalation.rs +0 -0
  838. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/fleet_health.rs +0 -0
  839. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/fleet_sessions.rs +0 -0
  840. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/fleet_terminals.rs +0 -0
  841. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/format.rs +0 -0
  842. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/milestone_dag.rs +0 -0
  843. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/msv.rs +0 -0
  844. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/pipeline.rs +0 -0
  845. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/plans.rs +0 -0
  846. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/reports.rs +0 -0
  847. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/sessions.rs +0 -0
  848. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/settings_ui.rs +0 -0
  849. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/sidebar.rs +0 -0
  850. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/terminal.rs +0 -0
  851. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/types.rs +0 -0
  852. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/app/workspace.rs +0 -0
  853. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/bin/gtk.rs +0 -0
  854. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/commands.rs +0 -0
  855. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/lib.rs +0 -0
  856. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/main.rs +0 -0
  857. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/src/settings.rs +0 -0
  858. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/tests/acceptance.rs +0 -0
  859. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/tests/cli.rs +0 -0
  860. {code_coordinator-0.5.126 → code_coordinator-0.5.128}/tui/tests/fixtures/board_sample.json +0 -0
@@ -261,6 +261,7 @@ reviewer can stop reading here.
261
261
  - [`docs/GRAPHIFY_SETUP.md`](docs/GRAPHIFY_SETUP.md) — installing the knowledge graph on a new machine (four layers, all of which fail *silently*).
262
262
  - [`docs/EPHEMERAL_WORKERS.md`](docs/EPHEMERAL_WORKERS.md) — on-demand Azure worker VMs per epic. **The tailnet ACL is the security boundary** — `agent_app.py` has no authentication.
263
263
  - [`docs/MAC_MINI.md`](docs/MAC_MINI.md) — adding a Mac mini; sizing, provisioning, and what non-macOS work routes there. The port itself is [`docs/CROSS_PLATFORM.md`](docs/CROSS_PLATFORM.md) (milestone #39).
264
+ - [`docs/WSL_WINDOWS_WORKER.md`](docs/WSL_WINDOWS_WORKER.md) — using a Tailscale-connected WSL2 box as the Windows worker for quadraui/vimcode's Win-GUI ports. Not the coord-itself Windows port.
264
265
  - [`docs/FORGE_MIGRATION.md`](docs/FORGE_MIGRATION.md) — surviving a forge outage (cheap) versus leaving a forge (expensive); milestone #58 / epic #1902.
265
266
 
266
267
  **Two deploy facts that bite most often:**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.126
3
+ Version: 0.5.128
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.126
3
+ Version: 0.5.128
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
@@ -389,6 +389,7 @@ docs/SECOND_BACKEND.md
389
389
  docs/STORE_SERVICE.md
390
390
  docs/TEST_FIRST_BUG_LANE.md
391
391
  docs/WEB_CONTROL_CENTER.md
392
+ docs/WSL_WINDOWS_WORKER.md
392
393
  docs/mocks/web/README.md
393
394
  docs/mocks/web/_tokens.css
394
395
  docs/mocks/web/issue-detail.html
@@ -827,6 +828,7 @@ tui/src/app/audit.rs
827
828
  tui/src/app/chat.rs
828
829
  tui/src/app/data.rs
829
830
  tui/src/app/dialogs.rs
831
+ tui/src/app/doc_tabs.rs
830
832
  tui/src/app/drive.rs
831
833
  tui/src/app/drive_queue.rs
832
834
  tui/src/app/escalation.rs
@@ -367,6 +367,7 @@
367
367
  "docs/STORE_SERVICE.md",
368
368
  "docs/TEST_FIRST_BUG_LANE.md",
369
369
  "docs/WEB_CONTROL_CENTER.md",
370
+ "docs/WSL_WINDOWS_WORKER.md",
370
371
  "docs/mocks/web/README.md",
371
372
  "docs/mocks/web/_tokens.css",
372
373
  "docs/mocks/web/issue-detail.html",
@@ -803,6 +804,7 @@
803
804
  "tui/src/app/chat.rs",
804
805
  "tui/src/app/data.rs",
805
806
  "tui/src/app/dialogs.rs",
807
+ "tui/src/app/doc_tabs.rs",
806
808
  "tui/src/app/drive.rs",
807
809
  "tui/src/app/drive_queue.rs",
808
810
  "tui/src/app/escalation.rs",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.126",
2
+ "tag": "0.5.128",
3
3
  "distance": 0,
4
- "node": "gd69faff040adaad7a346ab65c483934e1eca4c66",
4
+ "node": "gdb3e5a50ffe1a0bb743d2cc2f791188761858441",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-17"
@@ -420,6 +420,37 @@ def _acceptance_worktree_path(repo_name: str, issue_number: int) -> Path:
420
420
  return COORD_DIR / "acceptance-worktrees" / f"{repo_name}-{issue_number}"
421
421
 
422
422
 
423
+ def _acceptance_worktree_lock_path(repo_name: str, issue_number: int) -> Path:
424
+ """The ``flock`` guarding :func:`_acceptance_worktree_path` (#2352).
425
+
426
+ That path is deliberately ONE per ``(repo, issue)``, reused across every
427
+ SHA/round for that issue (same incremental-build rationale as `coord
428
+ test`'s #561) — but nothing serialised *access* to it. Two concurrent
429
+ ``coord acceptance record`` calls for the same issue (an orphaned drive
430
+ process — #1660 — racing a fresh queue relaunch, or a by-hand re-run
431
+ overlapping an in-flight one) each did an unconditional ``git worktree
432
+ remove --force`` + ``add --force`` on the SAME directory: the second
433
+ invocation's remove ripped the tree out from under the first's
434
+ in-flight build/test, mid-compile. The corrupted build then printed
435
+ ordinary-looking compiler errors and exited non-zero having run zero
436
+ tests — indistinguishable from a genuinely red suite to
437
+ ``_scoped_verdict``, so it landed on the board as a real
438
+ ``acceptance_state=failed`` and burned a drive's fix-round budget on a
439
+ PR that was never actually broken.
440
+
441
+ A sibling ``.lock`` file next to the worktree directory itself (not one
442
+ global lock for the whole ``acceptance-worktrees/`` tree) so unrelated
443
+ ``(repo, issue)`` pairs never wait on each other.
444
+
445
+ Derived from :func:`_acceptance_worktree_path` (module-level lookup, so
446
+ a test monkeypatching that name — e.g. to redirect it under
447
+ ``tmp_path`` — redirects this lock alongside it) rather than
448
+ re-deriving ``COORD_DIR`` independently, which would silently drift the
449
+ two apart the moment either one's path scheme changes."""
450
+ wt_path = _acceptance_worktree_path(repo_name, issue_number)
451
+ return wt_path.with_name(wt_path.name + ".lock")
452
+
453
+
423
454
  def _remove_acceptance_worktree(repo_dir: Path, wt_path: Path) -> None:
424
455
  if not wt_path.exists():
425
456
  return
@@ -819,6 +850,7 @@ def _acceptance_record_local(
819
850
  config_path: Path,
820
851
  route_path: str | None = None,
821
852
  ) -> None:
853
+ from coord.filelock import FileLock # noqa: PLC0415
822
854
  from coord.test_orchestrator import find_local_repo_path # noqa: PLC0415
823
855
 
824
856
  cfg = _load_config(config_path)
@@ -835,119 +867,140 @@ def _acceptance_record_local(
835
867
  sys.exit(1)
836
868
 
837
869
  wt_path = _acceptance_worktree_path(repo, issue_number)
838
- click.echo(
839
- f"Fetching origin and preparing acceptance worktree at {sha!r} "
840
- f"(base checkout {repo_dir} stays untouched)..."
841
- )
842
- try:
843
- subprocess.run(
844
- ["git", "fetch", "origin", "--prune"], cwd=str(repo_dir),
845
- check=True, capture_output=True, text=True,
846
- )
847
- except subprocess.CalledProcessError as e:
848
- click.echo(f"error: git fetch failed: {e.stderr.strip()}", err=True)
849
- sys.exit(1)
850
870
 
851
- _remove_acceptance_worktree(repo_dir, wt_path)
852
- wt_path.parent.mkdir(parents=True, exist_ok=True)
853
- res = subprocess.run(
854
- ["git", "worktree", "add", "--force", "--detach", str(wt_path), sha],
855
- cwd=str(repo_dir), capture_output=True, text=True,
856
- )
857
- if res.returncode != 0:
871
+ # #2352: everything from here down touches the ONE worktree this
872
+ # (repo, issue) reuses across every SHA/round — remove+add it, build in
873
+ # it, read its results. A second concurrent `coord acceptance record`
874
+ # for the same issue (an orphaned drive racing a fresh queue relaunch,
875
+ # or a by-hand re-run overlapping an in-flight one — see
876
+ # _acceptance_worktree_lock_path's docstring) must never interleave
877
+ # with this, or its `git worktree remove --force` clobbers whatever the
878
+ # first invocation is mid-build on. Blocking (not fail-fast) is
879
+ # deliberate: `flock` is released by the kernel even if the holder is
880
+ # killed, so there is no stale-lock deadlock risk to trade away, and
881
+ # blocking needs no change to `_decide_acceptance_gate`'s error
882
+ # handling — the second invocation just waits its turn and then records
883
+ # its own (correct) verdict, same as if it had been dispatched later.
884
+ with FileLock(_acceptance_worktree_lock_path(repo, issue_number)):
858
885
  click.echo(
859
- f"error: could not create acceptance worktree at {sha!r}: "
860
- f"{res.stderr.strip()}",
861
- err=True,
886
+ f"Fetching origin and preparing acceptance worktree at {sha!r} "
887
+ f"(base checkout {repo_dir} stays untouched)..."
862
888
  )
863
- sys.exit(1)
864
-
865
- # #1125 review finding 2: resolve `{ms}` from the issue's manifest-mapped
866
- # ms-NN dir (the worktree just checked out at `sha`) before running —
867
- # same fail-soft-to-None rationale as `acceptance_run` above.
868
- ms: str | None = None
869
- try:
870
- ms = ms_dir_for_issue(wt_path / ACCEPTANCE_DIRNAME, issue_number)
871
- except Exception: # noqa: BLE001
872
- ms = None
889
+ try:
890
+ subprocess.run(
891
+ ["git", "fetch", "origin", "--prune"], cwd=str(repo_dir),
892
+ check=True, capture_output=True, text=True,
893
+ )
894
+ except subprocess.CalledProcessError as e:
895
+ click.echo(f"error: git fetch failed: {e.stderr.strip()}", err=True)
896
+ sys.exit(1)
873
897
 
874
- try:
875
- result = run_driver(
876
- driver_cfg.kind, driver_cfg.run, cwd=str(wt_path), ms=ms,
877
- setup_command=driver_cfg.setup,
878
- )
879
- except DriverError as e:
880
- click.echo(f"error: {e}", err=True)
881
898
  _remove_acceptance_worktree(repo_dir, wt_path)
882
- sys.exit(1)
883
-
884
- # #944 review: _scoped_verdict exits(1) internally for a manifest that
885
- # hasn't been authored yet / has no slice for this issue — a
886
- # configuration error, not a real (kept-for-inspection) test failure, so
887
- # the throwaway worktree must still be cleaned up on the way out.
888
- try:
889
- verdict = _scoped_verdict(
890
- result.tests, wt_path / ACCEPTANCE_DIRNAME, issue_number,
891
- entrypoint=driver_cfg.entrypoint,
899
+ wt_path.parent.mkdir(parents=True, exist_ok=True)
900
+ res = subprocess.run(
901
+ ["git", "worktree", "add", "--force", "--detach", str(wt_path), sha],
902
+ cwd=str(repo_dir), capture_output=True, text=True,
892
903
  )
893
- except SystemExit:
894
- _remove_acceptance_worktree(repo_dir, wt_path)
895
- raise
904
+ if res.returncode != 0:
905
+ click.echo(
906
+ f"error: could not create acceptance worktree at {sha!r}: "
907
+ f"{res.stderr.strip()}",
908
+ err=True,
909
+ )
910
+ sys.exit(1)
896
911
 
897
- from coord.board_service import read_board # noqa: PLC0415
898
- from coord.diagnose import stage_assignments # noqa: PLC0415
912
+ # #1125 review finding 2: resolve `{ms}` from the issue's
913
+ # manifest-mapped ms-NN dir (the worktree just checked out at
914
+ # `sha`) before running — same fail-soft-to-None rationale as
915
+ # `acceptance_run` above.
916
+ ms: str | None = None
917
+ try:
918
+ ms = ms_dir_for_issue(wt_path / ACCEPTANCE_DIRNAME, issue_number)
919
+ except Exception: # noqa: BLE001
920
+ ms = None
899
921
 
900
- board = read_board()
901
- work_rows = stage_assignments(board, repo, issue_number, "work")
902
- if not work_rows:
903
- click.echo(
904
- f"error: no work assignment found for {repo} #{issue_number}; "
905
- "cannot record verdict",
906
- err=True,
907
- )
908
- # Same rationale: a lookup error, not a failing-verdict "kept for
909
- # inspection" case — don't leak the worktree.
910
- _remove_acceptance_worktree(repo_dir, wt_path)
911
- sys.exit(1)
912
- assignment_id = work_rows[0].assignment_id
913
-
914
- from coord.state import record_acceptance_verdict # noqa: PLC0415
915
-
916
- acceptance_state = "passed" if verdict["green"] else "failed"
917
- reason = failure_summary(verdict) or None
918
- record_acceptance_verdict(
919
- assignment_id=assignment_id,
920
- acceptance_state=acceptance_state,
921
- acceptance_reason=reason,
922
- acceptance_sha=sha,
923
- # #932: per-test counts so the Acceptance box can show partial
924
- # progress ("3/7 acceptance green") instead of a bare verdict.
925
- acceptance_total=verdict["total"],
926
- acceptance_passed=verdict["passed"],
927
- )
922
+ try:
923
+ result = run_driver(
924
+ driver_cfg.kind, driver_cfg.run, cwd=str(wt_path), ms=ms,
925
+ setup_command=driver_cfg.setup,
926
+ )
927
+ except DriverError as e:
928
+ click.echo(f"error: {e}", err=True)
929
+ _remove_acceptance_worktree(repo_dir, wt_path)
930
+ sys.exit(1)
928
931
 
929
- click.echo(json.dumps(verdict, indent=2))
930
- click.echo(f"\nAcceptance {acceptance_state.upper()} for {repo} #{issue_number} @ {sha}")
931
-
932
- if acceptance_state == "passed":
933
- # #2164 review: clearing expected_red here (before Test/Review/the
934
- # actual merge to the default branch have happened) was the bug —
935
- # it could reopen "red default branch" for reasons unrelated to
936
- # whatever CI run next observed this issue's still-unmerged fix.
937
- # The clear now happens in `coord.merge_queue.process`, right after
938
- # this SHA's PR actually merges — see
939
- # `coord.acceptance.clear_expected_red_via_pr`'s docstring. Nothing
940
- # to do here beyond pointing the operator at how to check.
941
- if ms is not None:
932
+ # #944 review: _scoped_verdict exits(1) internally for a manifest
933
+ # that hasn't been authored yet / has no slice for this issue a
934
+ # configuration error, not a real (kept-for-inspection) test
935
+ # failure, so the throwaway worktree must still be cleaned up on
936
+ # the way out.
937
+ try:
938
+ verdict = _scoped_verdict(
939
+ result.tests, wt_path / ACCEPTANCE_DIRNAME, issue_number,
940
+ entrypoint=driver_cfg.entrypoint,
941
+ )
942
+ except SystemExit:
943
+ _remove_acceptance_worktree(repo_dir, wt_path)
944
+ raise
945
+
946
+ from coord.board_service import read_board # noqa: PLC0415
947
+ from coord.diagnose import stage_assignments # noqa: PLC0415
948
+
949
+ board = read_board()
950
+ work_rows = stage_assignments(board, repo, issue_number, "work")
951
+ if not work_rows:
942
952
  click.echo(
943
- f" note: any expected_red entries for #{issue_number} clear "
944
- f"automatically once its fix merges — see `coord acceptance "
945
- f"expected-red {repo}` to check current state."
953
+ f"error: no work assignment found for {repo} #{issue_number}; "
954
+ "cannot record verdict",
955
+ err=True,
946
956
  )
947
- _remove_acceptance_worktree(repo_dir, wt_path)
948
- else:
949
- click.echo(f" worktree kept for inspection: {wt_path}")
950
- sys.exit(1)
957
+ # Same rationale: a lookup error, not a failing-verdict "kept
958
+ # for inspection" case — don't leak the worktree.
959
+ _remove_acceptance_worktree(repo_dir, wt_path)
960
+ sys.exit(1)
961
+ assignment_id = work_rows[0].assignment_id
962
+
963
+ from coord.state import record_acceptance_verdict # noqa: PLC0415
964
+
965
+ acceptance_state = "passed" if verdict["green"] else "failed"
966
+ reason = failure_summary(verdict) or None
967
+ record_acceptance_verdict(
968
+ assignment_id=assignment_id,
969
+ acceptance_state=acceptance_state,
970
+ acceptance_reason=reason,
971
+ acceptance_sha=sha,
972
+ # #932: per-test counts so the Acceptance box can show partial
973
+ # progress ("3/7 acceptance green") instead of a bare verdict.
974
+ acceptance_total=verdict["total"],
975
+ acceptance_passed=verdict["passed"],
976
+ )
977
+
978
+ click.echo(json.dumps(verdict, indent=2))
979
+ click.echo(
980
+ f"\nAcceptance {acceptance_state.upper()} for {repo} #{issue_number} @ {sha}"
981
+ )
982
+
983
+ if acceptance_state == "passed":
984
+ # #2164 review: clearing expected_red here (before
985
+ # Test/Review/the actual merge to the default branch have
986
+ # happened) was the bug — it could reopen "red default branch"
987
+ # for reasons unrelated to whatever CI run next observed this
988
+ # issue's still-unmerged fix. The clear now happens in
989
+ # `coord.merge_queue.process`, right after this SHA's PR
990
+ # actually merges — see
991
+ # `coord.acceptance.clear_expected_red_via_pr`'s docstring.
992
+ # Nothing to do here beyond pointing the operator at how to
993
+ # check.
994
+ if ms is not None:
995
+ click.echo(
996
+ f" note: any expected_red entries for #{issue_number} clear "
997
+ f"automatically once its fix merges — see `coord acceptance "
998
+ f"expected-red {repo}` to check current state."
999
+ )
1000
+ _remove_acceptance_worktree(repo_dir, wt_path)
1001
+ else:
1002
+ click.echo(f" worktree kept for inspection: {wt_path}")
1003
+ sys.exit(1)
951
1004
 
952
1005
 
953
1006
  def _stall_push_wip_snapshot(cwd: Path) -> str:
@@ -0,0 +1,77 @@
1
+ # A WSL2 box as the Windows worker — for quadraui/vimcode, not for coord
2
+
3
+ > **Status:** proposal, not yet provisioned (2026-08-17). Captures a plan discussed for using an
4
+ > existing Tailscale-connected Windows machine with WSL2 as the fleet's Windows build/test worker
5
+ > for **quadraui's Win-GUI backend** (milestone #3, issues #19–31) and **vimcode's Win-GUI issues**
6
+ > (#160, #162, #164, #165, #176) — not for porting code-coordinator itself to Windows. That's a
7
+ > different, much larger effort scoped in [`CROSS_PLATFORM.md`](CROSS_PLATFORM.md) and explicitly
8
+ > **out of scope here** — there is no interest in running `coord` natively on Windows.
9
+
10
+ ## The core idea
11
+
12
+ `coord agent` runs **inside WSL2** as an ordinary Linux process — WSL2 is a real Linux VM with its
13
+ own kernel, so none of `coord/agent.py`'s POSIX assumptions (tmux, `os.killpg`, `pty.fork`) need to
14
+ change. As far as the coordinator is concerned this machine is just another Linux box, same shape
15
+ as precision/elitebook/dellserver.
16
+
17
+ The only thing that's different: when a worker needs to build/test something gated behind quadraui's
18
+ `win` Cargo feature (real Direct2D/DirectWrite/Win32/COM), it shells out to the **Windows-native**
19
+ toolchain instead of the Linux one. WSL2's interop lets a Linux process exec Windows `.exe`s
20
+ directly (they're on `$PATH`), so this is just:
21
+
22
+ ```bash
23
+ cargo.exe build --target x86_64-pc-windows-msvc --features win
24
+ ```
25
+
26
+ run from a bash tool call inside the same WSL2 session — no separate machine, no RDP, no manual
27
+ hand-off.
28
+
29
+ > `CROSS_PLATFORM.md` rejected WSL2 for a different question — running the whole *coordinator*
30
+ > Windows-native for one operator's own laptop. This is not that: it's one more fleet worker, and
31
+ > its POSIX side is genuinely just Linux.
32
+
33
+ ## Setup checklist
34
+
35
+ 1. **Windows side:** rustup + MSVC Build Tools + Windows SDK (needed for `link.exe`/`rc.exe` —
36
+ Direct2D/DirectWrite/COM need the real toolchain, not a WSL2 cross-compile).
37
+ 2. **Checkout location:** clone `quadraui`/`vimcode` onto the Windows-native drive, e.g.
38
+ `C:\src\quadraui` (visible from WSL2 as `/mnt/c/src/quadraui`). `coord agent`'s git/Python ops
39
+ run fine against that path from the Linux side; `cargo.exe` gets native NTFS speed from the
40
+ Windows side — no `\\wsl$` cross-VM I/O penalty either direction.
41
+ 3. **Networking — Tailscale *inside* WSL2, not host port-forwarding.** Install the Tailscale Linux
42
+ client inside the WSL2 distro and `tailscale up` there. It gets its own tailnet IP on WSL2's own
43
+ network namespace; `coord agent` binds directly to it on `:7433`. This avoids `netsh interface
44
+ portproxy` + Windows Firewall rules entirely — Tailscale's interface isn't intercepted by the
45
+ Windows Firewall, and portproxy rules are fragile anyway (WSL2's internal IP changes across
46
+ restarts unless pinned). Check `ls /dev/net/tun` first; `sudo modprobe tun` if it's missing.
47
+ 4. **Keep it "online":** WSL2 shuts its VM down when idle. Enable systemd (`/etc/wsl.conf` →
48
+ `[boot] systemd=true`) and run `coord agent` as a systemd service, plus a Windows Task Scheduler
49
+ entry that launches the distro at logon/boot — otherwise the fleet will see this machine flicker
50
+ offline.
51
+ 5. **Register in `coordinator.yml`** with a new `win` capability (mirrors the existing `gtk`
52
+ build-capability pattern) once the box is actually reachable, and add a
53
+ `smoke_tests.capability_rules` entry routing `src/win/` → `requires: [win]`.
54
+
55
+ ## Ceiling — what this does and doesn't prove
56
+
57
+ This gets real compile-truth plus headless testing via #24's offscreen `ID2D1Bitmap` surface (no
58
+ visible window needed) — the same tier that let quadraui's macOS backend get built and merged
59
+ without a Mac in the fleet, verified through CI instead. It does **not** get you interactive/visual
60
+ smoke — real window behavior, DPI scaling, mouse feel — which still needs eyes on the actual Windows
61
+ desktop (RDP or physical access). Same distinction the fleet already draws between `gtk` (build) and
62
+ a hypothetical `gtk-display`; add a `win-display` capability later only if that's ever actually
63
+ needed.
64
+
65
+ ## Payoff
66
+
67
+ Unblocks quadraui's Win-GUI milestone (#19 bootstrap → #20 events → #21 text → #23/#24 services +
68
+ headless surface → #25–30 rasterisers → #31 examples) and vimcode's already-filed, currently-stalled
69
+ Win-GUI issues (#160, #162, #164, #165, #176) — the second set has been waiting on exactly this.
70
+
71
+ ## Related
72
+
73
+ - [`CROSS_PLATFORM.md`](CROSS_PLATFORM.md) — the *coord-itself* Windows port (out of scope here);
74
+ its §9 already anticipates `os:windows`/`os:macos` capability routing.
75
+ - [`MAC_MINI.md`](MAC_MINI.md) — the same "add a real-OS worker to the fleet" playbook, run for
76
+ macOS; useful as a structural template (provisioning order, capability staging, PATH gotchas)
77
+ even though the mechanics differ (no interop trick needed there — it's native macOS).
@@ -4,6 +4,8 @@ from __future__ import annotations
4
4
 
5
5
  import json
6
6
  import subprocess
7
+ import threading
8
+ import time
7
9
  from pathlib import Path
8
10
  from unittest.mock import patch
9
11
 
@@ -995,6 +997,115 @@ acceptance:
995
997
  wt_path = tmp_path / "acceptance-worktrees" / "coord-tui-944"
996
998
  assert not wt_path.exists(), "worktree leaked on manifest-missing error path"
997
999
 
1000
+ def test_concurrent_record_calls_for_same_issue_are_serialized(
1001
+ self, tmp_path: Path, coord_db, monkeypatch: pytest.MonkeyPatch,
1002
+ ) -> None:
1003
+ """#2352 direct regression: two concurrent `coord acceptance record`
1004
+ calls for the SAME (repo, issue) — e.g. an orphaned drive process
1005
+ (#1660) racing a fresh queue relaunch, or a by-hand re-run
1006
+ overlapping an in-flight one — must never interleave their
1007
+ worktree-prep + driver run. Before the fix, `_acceptance_record_local`
1008
+ did an unconditional `git worktree remove --force` + `add --force`
1009
+ on the ONE path this (repo, issue) reuses across every SHA/round,
1010
+ with no lock guarding it: a second invocation's remove could rip
1011
+ the worktree out from under the first's in-flight build, producing
1012
+ a corrupted build that looks exactly like a genuine red suite (a
1013
+ false `acceptance_state=failed`) instead of raising anything
1014
+ distinguishable.
1015
+
1016
+ This drives two threads through `_acceptance_record_local` for the
1017
+ same repo/issue/sha concurrently, with `run_driver` slowed down and
1018
+ instrumented, and asserts at most one thread is ever inside the
1019
+ locked region (worktree-prep through verdict write) at a time.
1020
+ """
1021
+ import sqlite3
1022
+
1023
+ from coord import db, state
1024
+ from coord.acceptance_drivers import DriverResult
1025
+ from coord.commands.acceptance import _acceptance_record_local
1026
+ from coord.db import _ensure_schema
1027
+
1028
+ # #2352 test-only wrinkle: the autouse `coord_db` fixture's
1029
+ # in-memory connection is opened with sqlite3's default
1030
+ # `check_same_thread=True`, which raises the instant a background
1031
+ # thread touches it — unrelated to the race this test is actually
1032
+ # driving at. Production's real singleton (`coord.db._open`)
1033
+ # already opens with `check_same_thread=False` (the coordinator
1034
+ # legitimately writes from more than one thread), so swapping in a
1035
+ # thread-safe in-memory connection here just matches production
1036
+ # instead of tripping over a fixture-only restriction. Use `conn`
1037
+ # (not the `coord_db` fixture argument, which still points at the
1038
+ # now-orphaned original connection) for any DB reads below.
1039
+ conn = sqlite3.connect(":memory:", check_same_thread=False)
1040
+ conn.row_factory = sqlite3.Row
1041
+ _ensure_schema(conn)
1042
+ db.override_connection(conn)
1043
+
1044
+ repo_dir = tmp_path / "repo"
1045
+ sha = _init_git_repo(repo_dir, manifest={"ms01::a": 944})
1046
+ config_path = _write_config(
1047
+ tmp_path, repo_path=str(repo_dir), run_cmd="echo unused",
1048
+ )
1049
+
1050
+ state.record_dispatched(
1051
+ assignment_id="aid-race",
1052
+ proposal=Proposal(
1053
+ id=1, machine_name="laptop", repo_name="coord-tui",
1054
+ issue_number=944, issue_title="oracle loop runner", rationale="",
1055
+ ),
1056
+ repo_github="acme/coord-tui",
1057
+ )
1058
+
1059
+ state_lock = threading.Lock()
1060
+ active = 0
1061
+ max_active = 0
1062
+
1063
+ def _slow_driver(kind, run_command, cwd, ms=None, setup_command=None):
1064
+ nonlocal active, max_active
1065
+ with state_lock:
1066
+ active += 1
1067
+ max_active = max(max_active, active)
1068
+ try:
1069
+ # Wide enough that, without the #2352 lock, the second
1070
+ # thread's (fast) git worktree remove/add would complete
1071
+ # and reach this same function while the first thread is
1072
+ # still "mid-build" here — reproducing the race window
1073
+ # that corrupted the real cargo build in the incident.
1074
+ time.sleep(0.3)
1075
+ return DriverResult(
1076
+ exit_code=0, tests=[{"id": "ms01::a", "status": "pass"}],
1077
+ )
1078
+ finally:
1079
+ with state_lock:
1080
+ active -= 1
1081
+
1082
+ monkeypatch.setattr("coord.commands.acceptance.run_driver", _slow_driver)
1083
+
1084
+ errors: list[BaseException] = []
1085
+
1086
+ def _run() -> None:
1087
+ try:
1088
+ _acceptance_record_local("coord-tui", 944, sha, config_path)
1089
+ except BaseException as e: # noqa: BLE001 - captured for assertion
1090
+ errors.append(e)
1091
+
1092
+ threads = [threading.Thread(target=_run) for _ in range(2)]
1093
+ for t in threads:
1094
+ t.start()
1095
+ for t in threads:
1096
+ t.join(timeout=30)
1097
+
1098
+ assert not any(t.is_alive() for t in threads), "record call hung"
1099
+ assert not errors, f"_acceptance_record_local raised: {errors!r}"
1100
+ assert max_active == 1, (
1101
+ "both threads ran the driver concurrently — the #2352 lock did "
1102
+ "not serialize concurrent `coord acceptance record` calls for "
1103
+ "the same (repo, issue)"
1104
+ )
1105
+
1106
+ row = _acceptance_row(conn, "aid-race")
1107
+ assert row["acceptance_state"] == "passed"
1108
+
998
1109
 
999
1110
  def _init_git_repo_with_expected_red(
1000
1111
  path: Path, *, tests: dict[str, int], expected_red: dict[int, list[str]],
@@ -1846,7 +1846,7 @@ checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f"
1846
1846
  [[package]]
1847
1847
  name = "quadraui"
1848
1848
  version = "0.0.1"
1849
- source = "git+https://github.com/JDonaghy/quadraui?rev=d70da7dff7ef9f1eb578ee48aca69297e548348e#d70da7dff7ef9f1eb578ee48aca69297e548348e"
1849
+ source = "git+https://github.com/JDonaghy/quadraui?rev=d6ae247c007721284dc895d4fbf42b5f4a5ba47f#d6ae247c007721284dc895d4fbf42b5f4a5ba47f"
1850
1850
  dependencies = [
1851
1851
  "arboard",
1852
1852
  "gtk4",
@@ -54,7 +54,7 @@ test-support = []
54
54
  # quadraui checkout during co-development (a one-line, opt-in
55
55
  # `.cargo/config.toml` `paths` override — see
56
56
  # `tui/cargo-config-local-quadraui.toml.example`).
57
- quadraui = { git = "https://github.com/JDonaghy/quadraui", rev = "d70da7dff7ef9f1eb578ee48aca69297e548348e", features = ["tui", "terminal"] }
57
+ quadraui = { git = "https://github.com/JDonaghy/quadraui", rev = "d6ae247c007721284dc895d4fbf42b5f4a5ba47f", features = ["tui", "terminal"] }
58
58
  rusqlite = { version = "0.32", features = ["bundled"] }
59
59
  serde_json = "1"
60
60
  serde = { version = "1", features = ["derive"] }