code-coordinator 0.5.117__tar.gz → 0.5.119__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 (856) hide show
  1. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/SOURCES.txt +9 -0
  4. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/scm_file_list.json +9 -0
  5. code_coordinator-0.5.119/code_coordinator.egg-info/scm_version.json +8 -0
  6. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agent.py +56 -0
  7. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agents/opencode/agents/work.md +34 -0
  8. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/cli.py +56 -25
  9. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/drive_queue.py +44 -0
  10. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/config.py +51 -0
  11. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/conflict_fix.py +7 -0
  12. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-drive-queue.service +29 -16
  13. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/drive_queue.py +78 -0
  14. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-drive-queue.service +29 -16
  15. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/DRIVE_QUEUE.md +42 -21
  16. code_coordinator-0.5.119/tests/acceptance/ms-65/contract.md +563 -0
  17. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +40 -0
  18. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +40 -0
  19. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-preview-tab.screen +40 -0
  20. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +40 -0
  21. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +40 -0
  22. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +40 -0
  23. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +40 -0
  24. code_coordinator-0.5.119/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +40 -0
  25. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_drive_queue.py +78 -0
  26. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_mock_author.py +10 -1
  27. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_providers.py +188 -0
  28. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worker_safety.py +149 -0
  29. code_coordinator-0.5.117/code_coordinator.egg-info/scm_version.json +0 -8
  30. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.claude/commands/board.md +0 -0
  31. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.claude/commands/complete-session.md +0 -0
  32. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.claude/commands/coordinator.md +0 -0
  33. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.githooks/_lib.sh +0 -0
  34. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.githooks/post-checkout +0 -0
  35. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.githooks/post-commit +0 -0
  36. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.githooks/post-merge +0 -0
  37. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  38. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/coord-ci-acceptance.yml +0 -0
  39. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/workflows/auto-release.yml +0 -0
  40. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/workflows/cargo-test.yml +0 -0
  41. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/workflows/publish.yml +0 -0
  42. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/workflows/release-tui.yml +0 -0
  43. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.github/workflows/test.yml +0 -0
  44. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/.gitignore +0 -0
  45. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/CLAUDE.md +0 -0
  46. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/GOAL.md +0 -0
  47. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/LICENSE +0 -0
  48. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/MANIFEST.in +0 -0
  49. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/README.md +0 -0
  50. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/dependency_links.txt +0 -0
  51. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/entry_points.txt +0 -0
  52. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/requires.txt +0 -0
  53. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/code_coordinator.egg-info/top_level.txt +0 -0
  54. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/__init__.py +0 -0
  55. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/_board_mapping.py +0 -0
  56. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/acceptance.py +0 -0
  57. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/acceptance_drivers.py +0 -0
  58. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agent_app.py +0 -0
  59. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agent_update.py +0 -0
  60. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agents/opencode/.gitignore +0 -0
  61. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/agents/opencode/routing.jsonc +0 -0
  62. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/audit.py +0 -0
  63. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/auto_loop.py +0 -0
  64. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/block_log.py +0 -0
  65. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/board_bool_guard.py +0 -0
  66. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/board_service.py +0 -0
  67. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/board_wire.py +0 -0
  68. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/brain.py +0 -0
  69. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/branch_model.py +0 -0
  70. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/bug_intake.py +0 -0
  71. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/cargo_cache.py +0 -0
  72. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/ci_github.py +0 -0
  73. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/ci_store.py +0 -0
  74. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/claim.py +0 -0
  75. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/client.py +0 -0
  76. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/__init__.py +0 -0
  77. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/_common.py +0 -0
  78. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/acceptance.py +0 -0
  79. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/agent_ops.py +0 -0
  80. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/audit.py +0 -0
  81. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/chat.py +0 -0
  82. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/dispatch.py +0 -0
  83. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/dispatch_workers.py +0 -0
  84. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/drive.py +0 -0
  85. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/gate_a.py +0 -0
  86. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/gates.py +0 -0
  87. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/issues.py +0 -0
  88. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/lifecycle.py +0 -0
  89. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/merge.py +0 -0
  90. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/milestone.py +0 -0
  91. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/plan_followup.py +0 -0
  92. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/plans.py +0 -0
  93. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/portal.py +0 -0
  94. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/release.py +0 -0
  95. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/repo.py +0 -0
  96. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/report.py +0 -0
  97. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/review.py +0 -0
  98. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/scorecard.py +0 -0
  99. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/sessions.py +0 -0
  100. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/setup.py +0 -0
  101. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/status.py +0 -0
  102. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/.gitignore +0 -0
  114. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/components.json +0 -0
  115. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  116. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  117. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  118. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  119. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  120. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  121. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  122. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  123. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  124. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/index.html +0 -0
  125. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  126. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/sw.js +0 -0
  127. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  128. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  129. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  130. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  131. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  132. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  133. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  134. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  135. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  136. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  137. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/eslint.config.js +0 -0
  138. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/index.html +0 -0
  139. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  140. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/package-lock.json +0 -0
  141. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/package.json +0 -0
  142. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  143. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/playwright.config.ts +0 -0
  144. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/postcss.config.js +0 -0
  145. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  146. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  147. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  148. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/App.tsx +0 -0
  149. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/api/client.ts +0 -0
  150. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  151. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  152. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  153. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  154. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  155. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  156. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  157. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  158. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  159. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  160. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  161. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  162. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  163. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  164. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  165. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  166. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  167. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  168. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  169. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  170. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  171. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  172. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  173. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  174. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  175. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  176. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  177. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  178. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  179. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  180. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  181. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  182. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  183. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  184. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  185. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/index.css +0 -0
  186. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  187. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  188. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/main.tsx +0 -0
  189. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  190. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  191. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  192. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  193. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  194. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  195. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  196. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  197. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  198. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  199. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  200. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  201. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  202. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  203. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  204. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  205. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  206. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  207. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  208. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  209. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  210. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  211. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  212. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/tailwind.config.js +0 -0
  213. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/tsconfig.json +0 -0
  214. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  215. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dashboard/webapp/vite.config.ts +0 -0
  216. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/db.py +0 -0
  217. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dead_end.py +0 -0
  218. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/README.md +0 -0
  219. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-agent.service +0 -0
  220. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-db-backup.service +0 -0
  221. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-db-backup.sh +0 -0
  222. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-db-backup.timer +0 -0
  223. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-drive-queue.timer +0 -0
  224. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-notify.service +0 -0
  225. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-notify.timer +0 -0
  226. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-release-propagate.service +0 -0
  227. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-release-propagate.timer +0 -0
  228. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-release-window.service +0 -0
  229. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-release-window.timer +0 -0
  230. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-serve.service +0 -0
  231. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-web-dist-build.service +0 -0
  232. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-web-dist-build.timer +0 -0
  233. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy/coord-web.service +0 -0
  234. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy_manifest.py +0 -0
  235. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deploy_units.py +0 -0
  236. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/deps.py +0 -0
  237. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/diagnose.py +0 -0
  238. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dispatch.py +0 -0
  239. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/dist_name.py +0 -0
  240. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/drive.py +0 -0
  241. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/drive_state.py +0 -0
  242. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/events.py +0 -0
  243. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/failure_class.py +0 -0
  244. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/filelock.py +0 -0
  245. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/fleet_config_health.py +0 -0
  246. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/freshness.py +0 -0
  247. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/gate_a.py +0 -0
  248. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/gate_b.py +0 -0
  249. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/gate_snapshot.py +0 -0
  250. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/gates.py +0 -0
  251. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/github_ops.py +0 -0
  252. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/goal.py +0 -0
  253. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/graph_health.py +0 -0
  254. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/__init__.py +0 -0
  255. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/aggregate.py +0 -0
  256. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/__init__.py +0 -0
  257. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/agent_install.py +0 -0
  258. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/cargo_targets.py +0 -0
  259. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/claude_binary.py +0 -0
  260. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/deploy_lane_facts.py +0 -0
  261. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/disk.py +0 -0
  262. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/fleet_board.py +0 -0
  263. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  264. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/fleet_phantom.py +0 -0
  265. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/fleet_unit_drift.py +0 -0
  266. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/graph.py +0 -0
  267. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/graphify_cli.py +0 -0
  268. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/index_lock.py +0 -0
  269. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/plan_usage.py +0 -0
  270. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/repo_state.py +0 -0
  271. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/spawned_coord.py +0 -0
  272. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/timer_active.py +0 -0
  273. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/toolchain.py +0 -0
  274. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/unit_drift.py +0 -0
  275. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/unit_enablement.py +0 -0
  276. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/checks/worktrees.py +0 -0
  277. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/cli.py +0 -0
  278. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/context.py +0 -0
  279. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/fleet_snapshot.py +0 -0
  280. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/models.py +0 -0
  281. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/pypi.py +0 -0
  282. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/registry.py +0 -0
  283. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/render.py +0 -0
  284. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/health/units.py +0 -0
  285. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/hooks.py +0 -0
  286. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/housekeeping.py +0 -0
  287. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/interactive.py +0 -0
  288. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/issue_store.py +0 -0
  289. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/liveness_auditor.py +0 -0
  290. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/machine_pause.py +0 -0
  291. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/merge_queue.py +0 -0
  292. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/milestone_chat.py +0 -0
  293. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/milestone_dispatch.py +0 -0
  294. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/milestone_gate.py +0 -0
  295. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/milestone_order.py +0 -0
  296. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/mock_author.py +0 -0
  297. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/models.py +0 -0
  298. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/network.py +0 -0
  299. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/new_issue_chat.py +0 -0
  300. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/__init__.py +0 -0
  301. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/baseline.py +0 -0
  302. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/cli.py +0 -0
  303. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/collect.py +0 -0
  304. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/digest.py +0 -0
  305. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/models.py +0 -0
  306. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/predicate.py +0 -0
  307. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/service.py +0 -0
  308. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/store.py +0 -0
  309. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notifier/transport.py +0 -0
  310. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/notify.py +0 -0
  311. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/openapi.py +0 -0
  312. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/overlap_fence.py +0 -0
  313. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/overlap_predict.py +0 -0
  314. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/parentage.py +0 -0
  315. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/parentage_github.py +0 -0
  316. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/pipeline.py +0 -0
  317. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/plan_parser.py +0 -0
  318. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/plans.py +0 -0
  319. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/platform_paths.py +0 -0
  320. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/portal_bridge.py +0 -0
  321. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/portal_store.py +0 -0
  322. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/portal_sync.py +0 -0
  323. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/pr_body_lint.py +0 -0
  324. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/prereqs.py +0 -0
  325. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/progress.py +0 -0
  326. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/providers/__init__.py +0 -0
  327. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/providers/base.py +0 -0
  328. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/providers/claude.py +0 -0
  329. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/providers/claude_pty.py +0 -0
  330. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/providers/opencode.py +0 -0
  331. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/queue_diagnose.py +0 -0
  332. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/reconcile.py +0 -0
  333. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/refine_chat.py +0 -0
  334. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/release_cordon.py +0 -0
  335. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/release_propagate.py +0 -0
  336. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/release_verify.py +0 -0
  337. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/release_window.py +0 -0
  338. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/repo_edit.py +0 -0
  339. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/repo_onboard.py +0 -0
  340. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/reports.py +0 -0
  341. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/revalidate.py +0 -0
  342. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/review.py +0 -0
  343. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/scorecard.py +0 -0
  344. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/serve_app.py +0 -0
  345. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/skills/update-issue/SKILL.md +0 -0
  346. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/smoke.py +0 -0
  347. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/spend_ceiling.py +0 -0
  348. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/split_work.py +0 -0
  349. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/stage_projection.py +0 -0
  350. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/state.py +0 -0
  351. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/test_author.py +0 -0
  352. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/test_chat.py +0 -0
  353. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/test_orchestrator.py +0 -0
  354. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/test_report.py +0 -0
  355. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/tui_release.py +0 -0
  356. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/usage.py +0 -0
  357. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/usage_limits.py +0 -0
  358. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/usage_rollup.py +0 -0
  359. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coord/worker_events.py +0 -0
  360. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/coordinator.example.yml +0 -0
  361. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-agent.service +0 -0
  362. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-db-backup.service +0 -0
  363. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-db-backup.sh +0 -0
  364. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-db-backup.timer +0 -0
  365. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-drive-queue.timer +0 -0
  366. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-notify.service +0 -0
  367. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-notify.timer +0 -0
  368. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-release-propagate.service +0 -0
  369. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-release-propagate.timer +0 -0
  370. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-release-window.service +0 -0
  371. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-release-window.timer +0 -0
  372. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-serve.service +0 -0
  373. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-web-dist-build.service +0 -0
  374. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-web-dist-build.sh +0 -0
  375. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-web-dist-build.timer +0 -0
  376. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-web-rollback.sh +0 -0
  377. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/coord-web.service +0 -0
  378. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/deploy/node-shim.sh +0 -0
  379. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/AGENT_OPERATIONS.md +0 -0
  380. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/ARCHITECTURE.md +0 -0
  381. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/ARCH_SECURITY_GATES.md +0 -0
  382. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/COCKPIT.md +0 -0
  383. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/CONTROL_CENTER.md +0 -0
  384. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/COST_DISCIPLINE.md +0 -0
  385. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/CROSS_PLATFORM.md +0 -0
  386. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/CUSTOMER_PORTAL.md +0 -0
  387. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/EPHEMERAL_WORKERS.md +0 -0
  388. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/FORGE_MIGRATION.md +0 -0
  389. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/GRAPHIFY_SETUP.md +0 -0
  390. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/ISSUE_GUIDANCE.md +0 -0
  391. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/MAC_MINI.md +0 -0
  392. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  393. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/NOTIFIER.md +0 -0
  394. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/OPENCODE_VERIFICATION.md +0 -0
  395. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/OPERATING_GOTCHAS.md +0 -0
  396. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/ORACLE_LOOP.md +0 -0
  397. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/PHONE_WEBAPP.md +0 -0
  398. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/PIPELINE_V2.md +0 -0
  399. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/PLATFORM_EVOLUTION.md +0 -0
  400. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/SECOND_BACKEND.md +0 -0
  401. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/STORE_SERVICE.md +0 -0
  402. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  403. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/WEB_CONTROL_CENTER.md +0 -0
  404. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/mocks/web/README.md +0 -0
  405. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/mocks/web/_tokens.css +0 -0
  406. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/mocks/web/issue-detail.html +0 -0
  407. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/mocks/web/pipeline-narrow.html +0 -0
  408. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/docs/mocks/web/pipeline-wide.html +0 -0
  409. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/graphify-out/.gitignore +0 -0
  410. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/install-agent.sh +0 -0
  411. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/pyproject.toml +0 -0
  412. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/audit_review_verdict_overrides.py +0 -0
  413. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  414. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/build-worker-image.sh +0 -0
  415. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/coordinator-machine.py +0 -0
  416. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/epic-down.sh +0 -0
  417. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/epic-up.sh +0 -0
  418. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/preflight.sh +0 -0
  419. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/provision-worker.sh +0 -0
  420. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  421. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  422. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/azure-workers/verify-github-token.sh +0 -0
  423. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/codegen.py +0 -0
  424. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/coord-test-runner.sh +0 -0
  425. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/drive-batch.sh +0 -0
  426. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/gen_board_fixture.py +0 -0
  427. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/next_release_tag.py +0 -0
  428. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/run_tests_in_populated_home.sh +0 -0
  429. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/run_tests_without_gh.sh +0 -0
  430. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/smoke_437_interactive.py +0 -0
  431. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/verify_878_review_capture.py +0 -0
  432. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/verify_release_published.py +0 -0
  433. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/scripts/verify_release_wheel.py +0 -0
  434. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/setup.cfg +0 -0
  435. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/SMOKE_SET.md +0 -0
  436. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/__init__.py +0 -0
  437. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  438. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/contract.md +0 -0
  439. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/manifest.yml +0 -0
  440. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  441. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  442. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  443. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  444. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-37/conftest.py +0 -0
  445. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-37/contract.md +0 -0
  446. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-37/manifest.yml +0 -0
  447. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  448. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  449. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/contract.md +0 -0
  450. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/manifest.yml +0 -0
  451. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  452. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  453. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  454. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  455. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  456. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  457. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  458. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  459. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  460. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  461. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/contract.md +0 -0
  462. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  463. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  464. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/manifest.yml +0 -0
  465. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  466. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-51/tsconfig.json +0 -0
  467. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  468. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/conftest.py +0 -0
  469. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/board-pipeline-basic.json +0 -0
  470. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  471. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  472. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  473. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  474. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/all_pass.json +0 -0
  475. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  476. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/mixed_fail.json +0 -0
  477. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  478. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  479. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/skip.json +0 -0
  480. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/playwright/truncated.json +0 -0
  481. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  482. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  483. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  484. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  485. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  486. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  487. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  488. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  489. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_acceptance.py +0 -0
  490. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_acceptance_drivers.py +0 -0
  491. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent.py +0 -0
  492. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_api_error.py +0 -0
  493. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_app.py +0 -0
  494. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_branch_base.py +0 -0
  495. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_branch_capture.py +0 -0
  496. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_config_free_1712.py +0 -0
  497. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_deploy_units_endpoint.py +0 -0
  498. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_dirty_worktree.py +0 -0
  499. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_graph_self_heal.py +0 -0
  500. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_health_h3.py +0 -0
  501. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_idle_restart.py +0 -0
  502. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_push_failure.py +0 -0
  503. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_reap.py +0 -0
  504. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_repos_and_pull.py +0 -0
  505. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_restart_services_endpoint.py +0 -0
  506. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_startup_diagnostics.py +0 -0
  507. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_update.py +0 -0
  508. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_update_bluegreen.py +0 -0
  509. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_usage_limit.py +0 -0
  510. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_agent_zero_commit.py +0 -0
  511. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_ambient_home_isolation.py +0 -0
  512. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_approve_reject_plan.py +0 -0
  513. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_approve_usage_gate.py +0 -0
  514. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_assignment_already_recorded_daemon.py +0 -0
  515. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_audit_log.py +0 -0
  516. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_audit_outcome.py +0 -0
  517. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_audit_query.py +0 -0
  518. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_auto_loop.py +0 -0
  519. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_auto_release_publish_2035.py +0 -0
  520. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_base_checkout_restore.py +0 -0
  521. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_block_log.py +0 -0
  522. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_cap_762.py +0 -0
  523. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_fixture.py +0 -0
  524. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_read_path.py +0 -0
  525. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_service.py +0 -0
  526. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_state.py +0 -0
  527. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_board_wire.py +0 -0
  528. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_brain.py +0 -0
  529. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_branch_model.py +0 -0
  530. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_bug_intake.py +0 -0
  531. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_build_worker_image_env_update.py +0 -0
  532. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cargo_cache.py +0 -0
  533. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_ci_acceptance_gate_1950.py +0 -0
  534. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_ci_parity_2091.py +0 -0
  535. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_ci_store.py +0 -0
  536. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_claim.py +0 -0
  537. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_acceptance.py +0 -0
  538. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_assign.py +0 -0
  539. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  540. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_assign_interactive_remote.py +0 -0
  541. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_assign_provider.py +0 -0
  542. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  543. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_audit.py +0 -0
  544. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_chat_continue.py +0 -0
  545. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_diagnose_config_provenance.py +0 -0
  546. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_diagnose_graph.py +0 -0
  547. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_drive.py +0 -0
  551. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_drive_queue.py +0 -0
  552. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_escalate.py +0 -0
  553. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_fix_headless_review.py +0 -0
  554. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_gate_a.py +0 -0
  555. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_install_drift.py +0 -0
  556. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_install_skills.py +0 -0
  557. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_issue_create_label.py +0 -0
  558. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_issue_reopen.py +0 -0
  559. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_merge.py +0 -0
  560. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_assign.py +0 -0
  561. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_capture.py +0 -0
  562. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_chat_add_child.py +0 -0
  563. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_dispatch.py +0 -0
  564. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_gate_b.py +0 -0
  565. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_gate_c.py +0 -0
  566. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_order.py +0 -0
  567. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  568. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_milestone_ship.py +0 -0
  569. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_network.py +0 -0
  570. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_new_issue_chat.py +0 -0
  571. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_plans.py +0 -0
  572. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_portal.py +0 -0
  573. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_pull_artifact.py +0 -0
  574. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_queue.py +0 -0
  575. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_reattach_sessions.py +0 -0
  576. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_refine_board.py +0 -0
  577. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_release_preflight.py +0 -0
  578. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_release_propagate.py +0 -0
  579. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_release_window.py +0 -0
  580. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_repo_2220.py +0 -0
  581. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_scorecard.py +0 -0
  582. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_set_review_findings.py +0 -0
  583. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_advisory_terminal.py +0 -0
  584. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_review_finalizing.py +0 -0
  587. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_test_failed_tag.py +0 -0
  588. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_status_usage_limit.py +0 -0
  589. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_sync_comments_873.py +0 -0
  590. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_test_plan.py +0 -0
  591. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_track.py +0 -0
  592. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_tui_update.py +0 -0
  593. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cli_wait.py +0 -0
  594. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_client_base_install.py +0 -0
  595. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_comments.py +0 -0
  596. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_completion_summary.py +0 -0
  597. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config.py +0 -0
  598. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config_pricing.py +0 -0
  601. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  602. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_config_usage_gate.py +0 -0
  603. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_conflict_fix.py +0 -0
  604. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_conflict_fix_semantic.py +0 -0
  605. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coord_test.py +0 -0
  606. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coord_test_runner_baseline.py +0 -0
  607. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coord_test_runner_routing.py +0 -0
  608. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coord_test_runner_toolchain.py +0 -0
  609. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coord_web_sse_restart_live.py +0 -0
  610. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_coordinator_machine.py +0 -0
  611. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_cross_platform_imports.py +0 -0
  612. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dashboard.py +0 -0
  613. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dashboard_fixture.py +0 -0
  614. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dashboard_terminal.py +0 -0
  615. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dashboard_terminal_live.py +0 -0
  616. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_db.py +0 -0
  617. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dead_end.py +0 -0
  618. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_coord_db_backup.py +0 -0
  619. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_coord_web_dist.py +0 -0
  620. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_coord_web_rollback.py +0 -0
  621. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_drive_queue_unit.py +0 -0
  622. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_manifest.py +0 -0
  623. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_units_lane.py +0 -0
  624. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deploy_web_unit.py +0 -0
  625. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_deps.py +0 -0
  626. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_diagnose.py +0 -0
  627. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dispatch.py +0 -0
  628. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dispatch_target_validation.py +0 -0
  629. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_dist_name.py +0 -0
  630. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_done_housekeeping.py +0 -0
  631. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_drive.py +0 -0
  632. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_drive_state.py +0 -0
  633. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_drive_tmux.py +0 -0
  634. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_epic_up_capability_detection.py +0 -0
  635. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  636. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_epic_up_image_provenance.py +0 -0
  637. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_errors.py +0 -0
  638. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_events.py +0 -0
  639. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_failure_class.py +0 -0
  640. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_filelock.py +0 -0
  641. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  642. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_fix_of_force_override.py +0 -0
  643. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_fleet_config_health.py +0 -0
  644. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_fleet_health_probes.py +0 -0
  645. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_fleet_health_snapshot.py +0 -0
  646. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_freshness.py +0 -0
  647. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_gate_a.py +0 -0
  648. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_gate_b.py +0 -0
  649. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_gate_snapshot_staleness.py +0 -0
  650. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_gates.py +0 -0
  651. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  652. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_generated_types_fixture.py +0 -0
  653. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_github_ops.py +0 -0
  654. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_goal.py +0 -0
  655. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_graph_health.py +0 -0
  656. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_graph_selfheal_absent_2237.py +0 -0
  657. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_handoff.py +0 -0
  658. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_checks.py +0 -0
  659. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_cli.py +0 -0
  660. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_cli_graph.py +0 -0
  661. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_config.py +0 -0
  662. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_context.py +0 -0
  663. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_deploy_lane_facts.py +0 -0
  664. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_incident_regression.py +0 -0
  665. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_pypi.py +0 -0
  666. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_registry.py +0 -0
  667. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_timer_active.py +0 -0
  668. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_toolchain.py +0 -0
  669. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_unit_drift.py +0 -0
  670. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_health_unit_enablement.py +0 -0
  671. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_hooks.py +0 -0
  672. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_human_attended_437.py +0 -0
  673. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_init.py +0 -0
  674. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_integration.py +0 -0
  675. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_briefing_echo.py +0 -0
  676. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_prefill_state.py +0 -0
  677. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_session_relaunch.py +0 -0
  678. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_test_verdict_backstop.py +0 -0
  679. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_token_attribution.py +0 -0
  680. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_interactive_worktree.py +0 -0
  681. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_issue_store_seam.py +0 -0
  682. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_liveness_auditor.py +0 -0
  683. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_liveness_notify.py +0 -0
  684. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_machine_pause.py +0 -0
  685. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_merge_queue.py +0 -0
  686. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_merge_verify.py +0 -0
  687. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_milestone_chat.py +0 -0
  688. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_milestone_dispatch.py +0 -0
  689. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_milestone_gate.py +0 -0
  690. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_milestone_order.py +0 -0
  691. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_milestone_seam.py +0 -0
  692. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_model_tiering.py +0 -0
  693. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_models.py +0 -0
  694. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_models_config_labels.py +0 -0
  695. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_needs_attention.py +0 -0
  696. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_network.py +0 -0
  697. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_new_issue_chat.py +0 -0
  698. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_next_release_tag.py +0 -0
  699. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_no_direct_gh_calls.py +0 -0
  700. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_node_shim.py +0 -0
  701. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_baseline.py +0 -0
  702. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_cli.py +0 -0
  703. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_collect.py +0 -0
  704. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_config.py +0 -0
  705. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_drive_seam.py +0 -0
  706. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_isolation.py +0 -0
  707. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_predicate.py +0 -0
  708. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_quiet_hours.py +0 -0
  709. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notifier_service.py +0 -0
  710. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notify.py +0 -0
  711. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_notify_drain.py +0 -0
  712. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_openapi.py +0 -0
  713. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_operational_defaults.py +0 -0
  714. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_overlap_fence.py +0 -0
  715. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_overlap_predict.py +0 -0
  716. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_packaged_deploy_units.py +0 -0
  717. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_parentage.py +0 -0
  718. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_paste_landed.py +0 -0
  719. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_pipeline.py +0 -0
  720. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_plan_followup_approve_plan_command.py +0 -0
  721. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_plan_followup_pr_command.py +0 -0
  722. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_plan_followup_review_command.py +0 -0
  723. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_plan_only.py +0 -0
  724. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_plan_parser.py +0 -0
  725. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_platform_paths.py +0 -0
  726. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_portal_bridge.py +0 -0
  727. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_portal_config.py +0 -0
  728. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_portal_sync.py +0 -0
  729. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_pr_body_lint.py +0 -0
  730. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_prereqs.py +0 -0
  731. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_production_db_guard.py +0 -0
  732. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_progress.py +0 -0
  733. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_provider_seam.py +0 -0
  734. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_providers_config_labels.py +0 -0
  735. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_providers_pty.py +0 -0
  736. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_quiet_hours.py +0 -0
  737. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_quiet_hours_store_2146.py +0 -0
  738. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reap_merged_sessions.py +0 -0
  739. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reap_stale_interactive_tick.py +0 -0
  740. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile.py +0 -0
  741. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile_branch.py +0 -0
  742. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile_completions.py +0 -0
  743. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile_merges.py +0 -0
  744. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile_no_agent_record.py +0 -0
  745. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reconcile_usage_limit_done.py +0 -0
  746. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_refine_chat.py +0 -0
  747. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_cordon_2101.py +0 -0
  748. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  749. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_cordon_deadlock_2240.py +0 -0
  750. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_propagate.py +0 -0
  751. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_unified_1242.py +0 -0
  752. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_verify.py +0 -0
  753. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_release_window.py +0 -0
  754. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_remote_auto_prune.py +0 -0
  755. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_remote_interactive_reaper.py +0 -0
  756. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_repo_edit_2220.py +0 -0
  757. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_repo_graph_fleet_2237.py +0 -0
  758. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_repo_onboard_2220.py +0 -0
  759. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_report_result_push.py +0 -0
  760. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_reports.py +0 -0
  761. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_retry.py +0 -0
  762. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_retry_advisory_1606.py +0 -0
  763. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_retry_type_1636.py +0 -0
  764. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_revalidate.py +0 -0
  765. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review.py +0 -0
  766. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_end_review_without_verdict.py +0 -0
  767. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_parse_failure_diagnostic.py +0 -0
  768. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_reaffirm.py +0 -0
  769. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_state.py +0 -0
  770. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_verdict_backstop.py +0 -0
  771. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_verdict_override_audit.py +0 -0
  772. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_verdict_relay.py +0 -0
  773. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_review_zero_commits.py +0 -0
  774. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_scoped_review_wiring.py +0 -0
  775. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_scorecard.py +0 -0
  776. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_serve.py +0 -0
  777. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_serve_app_board_trim.py +0 -0
  778. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_session.py +0 -0
  779. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_slice_issue_attribution.py +0 -0
  780. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_smoke.py +0 -0
  781. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_smoke_live_checkout_restore.py +0 -0
  782. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_smoke_workflow.py +0 -0
  783. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_spend_ceiling.py +0 -0
  784. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_spend_ceiling_coordinator.py +0 -0
  785. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_split.py +0 -0
  786. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_split_work.py +0 -0
  787. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_stage_projection.py +0 -0
  788. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_stalled_pipeline.py +0 -0
  789. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_state.py +0 -0
  790. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_state_review_findings_daemon.py +0 -0
  791. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_status_fleet_footer.py +0 -0
  792. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_stop_1567.py +0 -0
  793. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_stuck.py +0 -0
  794. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_terminal_command.py +0 -0
  795. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_author.py +0 -0
  796. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_chat.py +0 -0
  797. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_orchestrator.py +0 -0
  798. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_report.py +0 -0
  799. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_verdict_parsing.py +0 -0
  800. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_test_verdict_transcript_floor.py +0 -0
  801. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_thin_client_board_audit.py +0 -0
  802. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_thin_client_config_load_1080.py +0 -0
  803. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_thin_client_daemon_routing_906.py +0 -0
  804. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_tmux_host.py +0 -0
  805. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_tmux_session.py +0 -0
  806. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_usage.py +0 -0
  808. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_usage_limits.py +0 -0
  809. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_usage_rollup.py +0 -0
  810. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_venv_live_install_2121.py +0 -0
  811. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_version_single_source.py +0 -0
  812. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_watch.py +0 -0
  813. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  814. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worker_events.py +0 -0
  815. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worker_image_pin_sync.py +0 -0
  816. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worker_test_scoping.py +0 -0
  817. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worktree.py +0 -0
  818. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  819. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/Cargo.lock +0 -0
  820. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/Cargo.toml +0 -0
  821. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/cargo-config-local-quadraui.toml.example +0 -0
  822. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/audit.rs +0 -0
  823. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/chat.rs +0 -0
  824. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/data.rs +0 -0
  825. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/dialogs.rs +0 -0
  826. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/drive.rs +0 -0
  827. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/drive_queue.rs +0 -0
  828. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/escalation.rs +0 -0
  829. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/events.rs +0 -0
  830. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/fixtures.rs +0 -0
  831. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/fleet_health.rs +0 -0
  832. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/fleet_sessions.rs +0 -0
  833. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/fleet_terminals.rs +0 -0
  834. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/format.rs +0 -0
  835. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/milestone_dag.rs +0 -0
  836. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/mod.rs +0 -0
  837. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/msv.rs +0 -0
  838. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/pipeline.rs +0 -0
  839. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/plans.rs +0 -0
  840. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/render.rs +0 -0
  841. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/reports.rs +0 -0
  842. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/sessions.rs +0 -0
  843. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/settings_ui.rs +0 -0
  844. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/sidebar.rs +0 -0
  845. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/terminal.rs +0 -0
  846. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/tests.rs +0 -0
  847. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/types.rs +0 -0
  848. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/app/workspace.rs +0 -0
  849. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/bin/gtk.rs +0 -0
  850. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/commands.rs +0 -0
  851. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/lib.rs +0 -0
  852. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/main.rs +0 -0
  853. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/src/settings.rs +0 -0
  854. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/tests/acceptance.rs +0 -0
  855. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/tests/cli.rs +0 -0
  856. {code_coordinator-0.5.117 → code_coordinator-0.5.119}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.117
3
+ Version: 0.5.119
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.117
3
+ Version: 0.5.119
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
@@ -783,6 +783,15 @@ tests/acceptance/ms-51/home-active.spec.ts
783
783
  tests/acceptance/ms-51/manifest.yml
784
784
  tests/acceptance/ms-51/tsconfig.json
785
785
  tests/acceptance/ms-51/mocks/home-active.html
786
+ tests/acceptance/ms-65/contract.md
787
+ tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
788
+ tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
789
+ tests/acceptance/ms-65/mocks/board-preview-tab.screen
790
+ tests/acceptance/ms-65/mocks/board-split-side-by-side.screen
791
+ tests/acceptance/ms-65/mocks/board-tab-context-menu.screen
792
+ tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen
793
+ tests/acceptance/ms-65/mocks/board-tabs-overflow.screen
794
+ tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen
786
795
  tests/acceptance/ms-example/mocks/home-active.html
787
796
  tests/fixtures/board-pipeline-basic.json
788
797
  tests/fixtures/board-pipeline-terminal-gates.json
@@ -428,6 +428,15 @@
428
428
  "tests/acceptance/ms-51/manifest.yml",
429
429
  "tests/acceptance/ms-51/mocks/home-active.html",
430
430
  "tests/acceptance/ms-51/tsconfig.json",
431
+ "tests/acceptance/ms-65/contract.md",
432
+ "tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen",
433
+ "tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen",
434
+ "tests/acceptance/ms-65/mocks/board-preview-tab.screen",
435
+ "tests/acceptance/ms-65/mocks/board-split-side-by-side.screen",
436
+ "tests/acceptance/ms-65/mocks/board-tab-context-menu.screen",
437
+ "tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen",
438
+ "tests/acceptance/ms-65/mocks/board-tabs-overflow.screen",
439
+ "tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
431
440
  "tests/acceptance/ms-example/mocks/home-active.html",
432
441
  "tests/conftest.py",
433
442
  "tests/fixtures/board-pipeline-basic.json",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.119",
3
+ "distance": 0,
4
+ "node": "gb23236717c72c8a9be1338d9e8084ff44e2ae589",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-17"
8
+ }
@@ -3500,10 +3500,14 @@ MILESTONE_CHAT_DENY_COMMANDS: list[str] = [
3500
3500
  "Bash(git push *)",
3501
3501
  "Bash(git commit *)",
3502
3502
  "Bash(git reset --hard *)",
3503
+ "Bash(git reset * --hard *)",
3503
3504
  "Bash(git branch -D *)",
3505
+ "Bash(git branch * -D *)",
3504
3506
  "Bash(git checkout -- .)",
3505
3507
  "Bash(git clean -f *)",
3508
+ "Bash(git clean * -f *)",
3506
3509
  "Bash(rm -rf *)",
3510
+ "Bash(rm -fr *)",
3507
3511
  "Bash(coord approve *)",
3508
3512
  "Bash(coord merge *)",
3509
3513
  "Bash(coord assign *)",
@@ -3575,11 +3579,19 @@ manually verify in the rendered mock.
3575
3579
  MOCK_AUTHOR_DENY_COMMANDS: list[str] = [
3576
3580
  "Bash(gh *)",
3577
3581
  "Bash(git push --force*)",
3582
+ # #2314: the entry above only matches `--force` IMMEDIATELY after
3583
+ # `push` — a `git push --quiet --force ...` with another flag pushed
3584
+ # in first would evade it.
3585
+ "Bash(git push * --force*)",
3578
3586
  "Bash(git reset --hard *)",
3587
+ "Bash(git reset * --hard *)",
3579
3588
  "Bash(git branch -D *)",
3589
+ "Bash(git branch * -D *)",
3580
3590
  "Bash(git checkout -- .)",
3581
3591
  "Bash(git clean -f *)",
3592
+ "Bash(git clean * -f *)",
3582
3593
  "Bash(rm -rf *)",
3594
+ "Bash(rm -fr *)",
3583
3595
  "Bash(coord approve *)",
3584
3596
  "Bash(coord merge *)",
3585
3597
  "Bash(coord assign *)",
@@ -3599,10 +3611,14 @@ NEW_ISSUE_CHAT_DENY_COMMANDS: list[str] = [
3599
3611
  "Bash(git push *)",
3600
3612
  "Bash(git commit *)",
3601
3613
  "Bash(git reset --hard *)",
3614
+ "Bash(git reset * --hard *)",
3602
3615
  "Bash(git branch -D *)",
3616
+ "Bash(git branch * -D *)",
3603
3617
  "Bash(git checkout -- .)",
3604
3618
  "Bash(git clean -f *)",
3619
+ "Bash(git clean * -f *)",
3605
3620
  "Bash(rm -rf *)",
3621
+ "Bash(rm -fr *)",
3606
3622
  ]
3607
3623
 
3608
3624
 
@@ -3637,6 +3653,46 @@ def build_deny_prompt(deny_commands: list[str]) -> str:
3637
3653
  )
3638
3654
 
3639
3655
 
3656
+ def bash_deny_pattern_matches(pattern: str, command: str) -> bool:
3657
+ """Whether *command* (a raw shell command string) is caught by a single
3658
+ ``Bash(...)`` deny *pattern*, using the same shell-glob semantics those
3659
+ patterns are written in throughout this module (``*`` matches any run of
3660
+ characters, including none, and including across what would look like an
3661
+ argv token boundary — this is a whole-string glob, not an argv-aware
3662
+ parse).
3663
+
3664
+ #2314: a worker evaded ``Bash(pip install -e *)`` simply by inserting
3665
+ another flag first (``pip install --user -e .``) — the pattern only
3666
+ matched ``-e`` IMMEDIATELY after ``install``. This function exists so
3667
+ that claim ("this deny list actually catches that evasion") is a
3668
+ testable fact rather than something read off the pattern text by eye —
3669
+ see the ``Bash(...)`` entries :data:`coord.config.DEFAULT_DENY_COMMANDS`
3670
+ pairs for exactly this reason, and ``tests/test_worker_safety.py`` for
3671
+ the regression tests built on top of this function.
3672
+
3673
+ Returns ``False`` for a *pattern* that isn't a ``Bash(...)`` rule at all
3674
+ (e.g. an ``Edit(...)``/``Write(...)`` path rule) — those constrain a
3675
+ different tool and never match a shell command string.
3676
+ """
3677
+ if not (pattern.startswith("Bash(") and pattern.endswith(")")):
3678
+ return False
3679
+ inner = pattern[5:-1]
3680
+ return fnmatch.fnmatchcase(command.strip(), inner)
3681
+
3682
+
3683
+ def find_denying_bash_pattern(command: str, deny_commands: list[str]) -> str | None:
3684
+ """The first pattern in *deny_commands* that blocks *command*, or ``None``.
3685
+
3686
+ Thin fold over :func:`bash_deny_pattern_matches` — a worker's own deny
3687
+ list is small (single digits to low tens of entries), so a linear scan
3688
+ needs no index.
3689
+ """
3690
+ for pattern in deny_commands:
3691
+ if bash_deny_pattern_matches(pattern, command):
3692
+ return pattern
3693
+ return None
3694
+
3695
+
3640
3696
  # #1315: sealed-oracle path prefix that only an independent authoring type
3641
3697
  # (``"mock-author"``/a future ``"test-author"``) may ever write to
3642
3698
  # (docs/ORACLE_LOOP.md sealing v1). ``coord.dispatch.dispatch`` already
@@ -63,6 +63,40 @@ there are lost, or collide with other workers running at the same time. If \
63
63
  your worktree looks unexpectedly empty or unwritable, STOP and report it — \
64
64
  do not fall back to editing the base checkout and copying files over.
65
65
 
66
+ Write incrementally — this is the single most important rule in this file:
67
+ - Every request you make has a hard output-token budget, and on a \
68
+ reasoning model those tokens are shared with your own thinking. Truncation \
69
+ can happen at any budget size — raising the ceiling makes it rarer, not \
70
+ impossible — so the rule below holds regardless of what the current limit \
71
+ is.
72
+ - Write each file as soon as its content is decided. Do NOT design the \
73
+ whole change, plan every file, and only then start emitting `write`/`edit` \
74
+ calls — a turn that spends its whole budget reasoning can be truncated \
75
+ before it emits a single tool call. Truncation produces a clean-looking \
76
+ exit with zero commits and nothing on disk: the work is not "mostly done", \
77
+ it is entirely lost, because nothing you only thought about was ever sent \
78
+ as a tool call.
79
+ - Prefer many small steps over one large one: read/understand one file, \
80
+ write it, move to the next. Small increments stay nowhere near the cap; \
81
+ a single-shot "figure out the whole diff, then write it all" turn is what \
82
+ exhausts it.
83
+ - Issue one command per `bash` call — do not chain with `&&`, `;` or `|`. \
84
+ Permission rules are prefix-matched against the whole command string, so \
85
+ `git status && git log` matches no `allow` entry and is denied outright, \
86
+ wasting a turn for nothing. Run `git status`, then separately `git log`.
87
+ - These are the only `bash` commands you can run; everything else is \
88
+ denied, including `pwd`, `ls`, `cat` and `grep` (use your own file-read \
89
+ and search tools for those): `git status`, `git diff`, `git log`, \
90
+ `git show`, `git add`, `git commit`, `git checkout`, `git branch`, \
91
+ `git rev-parse`, `git push`, `cargo …`, `make…`, `pytest…`, \
92
+ `python3 -m pytest…`, `python -m pytest…`, `npm …`, `pip install…`, \
93
+ `pip3 install…`. `gh` is denied — the coordinator owns GitHub.
94
+ - If a `bash` or `edit` call does come back denied, don't probe with \
95
+ variations to find what's allowed — every denial replays the entire \
96
+ permission ruleset back to you, burning output budget you need for \
97
+ `write` calls without telling you anything the list above didn't already \
98
+ say. Take the denial as final and move on.
99
+
66
100
  This session is ONE-SHOT and non-interactive:
67
101
  - There is no next turn and no human to reply to you. Background-task \
68
102
  completion notifications will NEVER reach you — nothing wakes you up.
@@ -300,49 +300,80 @@ def _warn_if_source_install_drift() -> None:
300
300
  pass
301
301
 
302
302
 
303
- def _warn_if_editable_checkout_moved() -> None:
304
- """#561/#601 backstop: when running from an EDITABLE checkout, warn loudly if
305
- its branch was moved off the default.
306
-
307
- A Build/`coord test`/smoke that git-checkout'd the base — or an interactive
308
- agent inspecting a branch in the live checkout — silently puts the running
309
- coordinator on that branch's code until restored (#561 incident: disabled
310
- guards; #601 incident: old code + retired local DB). This makes that state
311
- visible on every command instead of waiting for a verdict or manual restore.
303
+ def _editable_checkout_drift() -> tuple[Path, str] | None:
304
+ """Pure query behind both #561/#601's CLI warning and #2314's
305
+ drive-queue tick refusal (:mod:`coord.drive_queue`): is THIS process an
306
+ EDITABLE checkout of coord, and if so, is it on a branch other than the
307
+ default one?
308
+
309
+ A Build/`coord test`/smoke that git-checkout'd the base or an
310
+ interactive agent inspecting a branch in the live checkout silently
311
+ puts the running coordinator on that branch's code until restored (#561
312
+ incident: disabled guards; #601 incident: old code + retired local DB).
313
+
314
+ Returns ``(repo_root, shown)`` when drifted — ``shown`` is the branch
315
+ name formatted the way both callers print it (quoted, or
316
+ ``"(detached HEAD)"``) — or ``None`` when this is a non-editable/
317
+ site-packages install, isn't a git checkout at all, is cleanly on
318
+ ``main``/``master``, or the check itself couldn't be completed (git not
319
+ on PATH, no ``.git``, a timeout). Every failure mode here is read-only
320
+ and best-effort, so it degrades to "no drift detected" rather than
321
+ raising — a flaky read must never itself block a tick or crash a
322
+ command.
312
323
  """
313
324
  import subprocess # noqa: PLC0415
314
- import sys as _sys # noqa: PLC0415
315
325
 
316
- if "pytest" in _sys.modules:
317
- return # don't add startup noise to the test suite
318
326
  try:
319
327
  import coord as _coord # noqa: PLC0415
320
328
 
321
329
  coord_file = _coord.__file__ or ""
322
330
  if "site-packages" in coord_file:
323
- return # PyPI/snapshot install — moving a checkout can't affect it.
331
+ return None # PyPI/snapshot install — moving a checkout can't affect it.
324
332
  repo_root = Path(coord_file).resolve().parents[1]
325
333
  if not (repo_root / ".git").exists():
326
- return
334
+ return None
327
335
  head = subprocess.run(
328
336
  ["git", "rev-parse", "--abbrev-ref", "HEAD"],
329
337
  cwd=str(repo_root), capture_output=True, text=True, timeout=3,
330
338
  )
331
339
  if head.returncode != 0:
332
- return
340
+ return None
333
341
  branch = head.stdout.strip()
334
342
  if branch in ("main", "master"):
335
- return
343
+ return None
336
344
  shown = "(detached HEAD)" if branch == "HEAD" else f"'{branch}'"
337
- click.echo(
338
- f"⚠ coord: editable checkout {repo_root} is on {shown}, not the "
339
- "default branch — the running coordinator is on THAT code. A "
340
- "Build/smoke/test may have checked it out. Restore with: "
341
- f"git -C {repo_root} checkout main",
342
- err=True,
343
- )
344
- except Exception: # noqa: BLE001 best-effort, never break the CLI
345
- pass
345
+ return (repo_root, shown)
346
+ except Exception: # noqa: BLE001 best-effort, never break the caller
347
+ return None
348
+
349
+
350
+ def _warn_if_editable_checkout_moved() -> None:
351
+ """#561/#601 backstop: when running from an EDITABLE checkout, warn loudly if
352
+ its branch was moved off the default.
353
+
354
+ This makes that state visible on every command instead of waiting for a
355
+ verdict or manual restore. #2314 escalated the SAME underlying reading
356
+ (:func:`_editable_checkout_drift`) from advisory-only here to a hard
357
+ refusal inside the drive-queue tick gate — see
358
+ ``coord.drive_queue.plan_tick``'s ``editable_drift`` parameter — because
359
+ a warning nobody is watching an unattended tick's log for is not a gate.
360
+ This function stays as the interactive/human-facing half of that fix.
361
+ """
362
+ import sys as _sys # noqa: PLC0415
363
+
364
+ if "pytest" in _sys.modules:
365
+ return # don't add startup noise to the test suite
366
+ drift = _editable_checkout_drift()
367
+ if drift is None:
368
+ return
369
+ repo_root, shown = drift
370
+ click.echo(
371
+ f"⚠ coord: editable checkout {repo_root} is on {shown}, not the "
372
+ "default branch — the running coordinator is on THAT code. A "
373
+ "Build/smoke/test may have checked it out. Restore with: "
374
+ f"git -C {repo_root} checkout main",
375
+ err=True,
376
+ )
346
377
 
347
378
 
348
379
  @click.group(help="Multi-agent coordinator for Claude Code workers.")
@@ -1634,6 +1634,42 @@ def _fetch_cordons() -> dict[str, str]:
1634
1634
  return {}
1635
1635
 
1636
1636
 
1637
+ def _fetch_editable_drift() -> tuple[str, str] | None:
1638
+ """``(repo_root, shown)`` when THIS host's own `coord` is an editable
1639
+ checkout that has drifted off its default branch, else ``None`` (#2314).
1640
+
1641
+ Thin wrapper around ``coord.cli._editable_checkout_drift`` — the exact
1642
+ same read `coord.cli._warn_if_editable_checkout_moved` uses for its
1643
+ CLI-startup warning — reshaped to a plain ``(str, str)`` tuple so
1644
+ :func:`coord.drive_queue.plan_tick` (a pure function; see its module
1645
+ docstring) never has to import ``coord.cli`` or touch a ``Path``.
1646
+ Already fail-soft/best-effort at the source (see that function's
1647
+ docstring); this wrapper adds nothing on top beyond the reshape and the
1648
+ ``str(repo_root)`` conversion.
1649
+
1650
+ Same ``"pytest" in sys.modules`` guard as
1651
+ ``_warn_if_editable_checkout_moved`` — for the identical reason: this
1652
+ repo's OWN test suite runs from an editable checkout on a feature
1653
+ branch as a matter of course (that is what a worker's worktree is), so
1654
+ without the guard every CLI-level `drive-queue tick` test would trip
1655
+ this exact gate on itself. `coord.drive_queue.plan_tick`'s own tests
1656
+ (tests/test_drive_queue.py) exercise the real gate logic directly via
1657
+ its ``editable_drift`` parameter, unaffected by this guard.
1658
+ """
1659
+ import sys as _sys # noqa: PLC0415
1660
+
1661
+ if "pytest" in _sys.modules:
1662
+ return None
1663
+
1664
+ from coord.cli import _editable_checkout_drift # noqa: PLC0415
1665
+
1666
+ drift = _editable_checkout_drift()
1667
+ if drift is None:
1668
+ return None
1669
+ repo_root, shown = drift
1670
+ return (str(repo_root), shown)
1671
+
1672
+
1637
1673
  def _fetch_board_view() -> BoardView:
1638
1674
  """Board + live drive sessions, typed.
1639
1675
 
@@ -2316,6 +2352,13 @@ def drive_queue_tick(
2316
2352
  # a rollable state.
2317
2353
  cordons = _fetch_cordons()
2318
2354
 
2355
+ # #2314: is THIS host's own `coord` a drifted editable checkout?
2356
+ # Escalates `coord.cli._warn_if_editable_checkout_moved` from an
2357
+ # advisory-only startup warning (nothing unattended ever reads) to
2358
+ # an actual refusal — see `_editable_drift_alert` and `plan_tick`'s
2359
+ # `editable_drift` parameter for the gate itself.
2360
+ editable_drift = _fetch_editable_drift()
2361
+
2319
2362
  # #1794: the clock is the shell's to read, never `coord.drive_queue`'s.
2320
2363
  # It powers the startup grace window on both sides of the tick — a
2321
2364
  # drive launched seconds ago is `starting`, not dead, and cannot be
@@ -2342,6 +2385,7 @@ def drive_queue_tick(
2342
2385
  cordons=cordons,
2343
2386
  live_ci_gate=live_ci_gate,
2344
2387
  live_blocked_gate=live_blocked_gate,
2388
+ editable_drift=editable_drift,
2345
2389
  )
2346
2390
 
2347
2391
  if reconcile_only:
@@ -73,15 +73,66 @@ def is_canonical_config_path(path: Path) -> bool:
73
73
 
74
74
 
75
75
  # Safety-by-default: repos without explicit worker_permissions get this deny-list.
76
+ #
77
+ # #2314: every ``Bash(<verb> <flag> *)`` entry only matches *flag* IMMEDIATELY
78
+ # after *verb* — a worker that inserted one more flag first (or swapped a
79
+ # combined short flag's letter order) sailed straight through undetected. The
80
+ # `git push`/`rm` entries below each pair the original adjacent form with a
81
+ # reordering-safe one (an interior ``*`` before the flag, or — for `rm` — the
82
+ # `-fr` letter-swap of `-rf`); this is the "audit other Bash(...) deny
83
+ # patterns for the same positional weakness" half of #2314, not exhaustive
84
+ # (it does not attempt to catch shell chaining/subshells, which is a
85
+ # different, much larger problem than argv flag position).
76
86
  DEFAULT_DENY_COMMANDS: list[str] = [
77
87
  "Bash(gh *)",
78
88
  "Bash(git push --force *)",
79
89
  "Bash(git push -f *)",
90
+ "Bash(git push * --force *)",
91
+ "Bash(git push * -f *)",
80
92
  "Bash(git reset --hard *)",
93
+ "Bash(git reset * --hard *)",
81
94
  "Bash(git branch -D *)",
95
+ "Bash(git branch * -D *)",
82
96
  "Bash(git checkout -- .)",
83
97
  "Bash(git clean -f *)",
98
+ "Bash(git clean * -f *)",
84
99
  "Bash(rm -rf *)",
100
+ "Bash(rm -fr *)",
101
+ # #2314: a worker ran `pip install --break-system-packages -e .` — an
102
+ # editable install of coord's own source re-links (or, combined with
103
+ # `--user`/`--break-system-packages`, outright shadows) the interpreter
104
+ # `coord` itself is running under, out from under this and every other
105
+ # session on the box (see coord/cli.py's
106
+ # `_warn_if_source_install_drift`/`_editable_checkout_drift`). The old
107
+ # single `Bash(pip install -e *)` entry only matched `-e` IMMEDIATELY
108
+ # after `install`, so putting any other flag first evaded it entirely.
109
+ # Every entry below is duplicated with a leading `*` (covers `python -m
110
+ # pip install ...` / `python3 -m pip install ...`, which reach the exact
111
+ # same installer) and, for `-e`/`--editable` specifically, ALSO with an
112
+ # interior `*` before the flag (covers it appearing anywhere in argv,
113
+ # not just first) — the adjacent form alone still catches
114
+ # `pip install -e --break-system-packages .` (the flag being pushed
115
+ # AFTER `-e` doesn't break the immediate `install -e` adjacency), but
116
+ # not `pip install --break-system-packages -e .` (something pushed
117
+ # BEFORE it).
118
+ "Bash(pip install -e *)",
119
+ "Bash(*pip install -e *)",
120
+ "Bash(pip install * -e *)",
121
+ "Bash(*pip install * -e *)",
122
+ "Bash(pip install --editable *)",
123
+ "Bash(*pip install --editable *)",
124
+ "Bash(pip install * --editable *)",
125
+ "Bash(*pip install * --editable *)",
126
+ # `--break-system-packages` / `--user` are denied INDEPENDENTLY of
127
+ # `-e`/`--editable` — either flag alone, on a perfectly ordinary
128
+ # non-editable `pip install`, still lets a worker write into (or
129
+ # reconfigure) the interpreter coord itself runs under. No adjacency
130
+ # requirement at all: both are boolean flags a real `pip install`
131
+ # invocation can place anywhere after `install`.
132
+ "Bash(pip install *--break-system-packages*)",
133
+ "Bash(*pip install *--break-system-packages*)",
134
+ "Bash(pip install *--user*)",
135
+ "Bash(*pip install *--user*)",
85
136
  ]
86
137
 
87
138
 
@@ -70,6 +70,13 @@ CONFLICT_FIX_DENY_COMMANDS = [
70
70
  "Bash(gh *)",
71
71
  "Bash(git push --force *)",
72
72
  "Bash(git push -f *)",
73
+ # #2314: the two entries above only match `--force`/`-f` IMMEDIATELY
74
+ # after `push` — a `--force-with-lease` push (the sanctioned, allowed
75
+ # form, see this module's own guidance above) must stay clear, but
76
+ # `git push --quiet --force ...` / `git push --quiet -f ...` (the flag
77
+ # pushed after some other one) must not evade the ban either.
78
+ "Bash(git push * --force *)",
79
+ "Bash(git push * -f *)",
73
80
  ]
74
81
 
75
82
 
@@ -20,14 +20,21 @@
20
20
  #
21
21
  # COORD_BIN — the runner's own CLI must be a PINNED, NON-EDITABLE install
22
22
  # (#1523): worker branch churn must never be able to rewrite the tool that is
23
- # driving it, mid-run. On dellserver, ~/.local/bin/coord is a symlink into
24
- # ~/.coord-venv the SAME venv deploy/coord-agent.service runs `coord agent`
25
- # from (see install-agent.sh) — so that already satisfies #1523, and it rides
26
- # the ordinary agent-venv upgrade lane rather than needing its own. Before
27
- # relying on a fix landing on this host:
23
+ # driving it, mid-run. #2314: ExecStart below points at ~/.coord-venv/bin/coord
24
+ # DIRECTLY, the same way deploy/coord-agent.service, coord-serve.service,
25
+ # coord-notify.service and coord-web.service already do NOT at
26
+ # ~/.local/bin/coord. On dellserver ~/.local/bin/coord is normally a symlink
27
+ # into that same venv, but it is still just an ordinary path on disk: a
28
+ # worker running `pip install --user` (or an editable `pip install -e .`
29
+ # that lands its own console-script shim there) can silently overwrite it
30
+ # with something that no longer points at the pinned venv at all, and the
31
+ # first this tick would know about that is the next `coord drive-queue tick`
32
+ # running whatever the worker just wrote. Pointing ExecStart at the venv path
33
+ # directly makes that overwrite structurally irrelevant to this unit —
34
+ # nothing a worker does to ~/.local/bin/coord can change what systemd execs.
28
35
  #
29
36
  # coord agent update --machine dellserver # or --all; the standard lane
30
- # ~/.local/bin/coord --version # VERIFY it took — an upgrade
37
+ # ~/.coord-venv/bin/coord --version # VERIFY it took — an upgrade
31
38
  # # silently no-ops more often
32
39
  # # than you would think
33
40
  #
@@ -37,15 +44,21 @@
37
44
  # stale on 2026-07-29. This unit intentionally does not use that pattern.
38
45
  #
39
46
  # If you ever install this timer on a DIFFERENT machine, first confirm THAT
40
- # machine's `coord` is a non-editable install before trusting it unattended:
41
- #
42
- # readlink -f ~/.local/bin/coord
43
- # pip show code-coordinator | grep -i editable # must print NOTHING
44
- #
45
- # An editable checkout (e.g. elitebook's dev box, where ~/.local/bin/coord
46
- # points at ~/src/code-coordinator) lets a worker's branch churn rewrite the
47
- # runner's own code out from under a live tick. Do not install this unit
48
- # there. See docs/DRIVE_QUEUE.md.
47
+ # machine actually has a `~/.coord-venv` the same pinned, non-editable
48
+ # install every other daemon lane already depends on — before trusting it
49
+ # unattended:
50
+ #
51
+ # readlink -f ~/.coord-venv/bin/coord # must resolve INTO
52
+ # # the venv, not out
53
+ # # to a checkout
54
+ # ~/.coord-venv/bin/pip show code-coordinator | grep -i editable
55
+ # # must print NOTHING
56
+ #
57
+ # An editable ~/.coord-venv (rare, but possible on a dev box someone
58
+ # repointed by hand) lets a worker's branch churn rewrite the runner's own
59
+ # code out from under a live tick just as badly as the ~/.local/bin/coord
60
+ # symlink-overwrite case this fix closes — do not install this unit on a
61
+ # machine whose ~/.coord-venv is editable. See docs/DRIVE_QUEUE.md.
49
62
  #
50
63
  # Install:
51
64
  # mkdir -p ~/.config/systemd/user
@@ -109,7 +122,7 @@ KillMode=process
109
122
  # ceiling (>= the release carrying #1972). A higher global ceiling on an
110
123
  # older coord launches two same-repo drives, which stale each other's
111
124
  # Test verdicts (#1479) — the exact collision #1972 exists to prevent.
112
- ExecStart=%h/.local/bin/coord drive-queue tick --max-parallel 4 --config %h/.coord/coordinator.yml
125
+ ExecStart=%h/.coord-venv/bin/coord drive-queue tick --max-parallel 4 --config %h/.coord/coordinator.yml
113
126
  # Generous relative to the tick's own ~120s launch-subprocess timeout
114
127
  # (_LAUNCH_TIMEOUT_SECONDS in coord/commands/drive_queue.py), but well below
115
128
  # the timer's 15-minute cadence (coord-drive-queue.timer) so a genuinely
@@ -1240,6 +1240,14 @@ class TickPlan:
1240
1240
  # a bool, because a queue that stops with no stated reason is the failure
1241
1241
  # the cordon mechanism exists to stop repeating.
1242
1242
  cordon_reason: str = ""
1243
+ # #2314: non-empty when THIS host's own `coord` is an editable checkout
1244
+ # that has drifted off its default branch (see `editable_drift` on
1245
+ # `plan_tick` and `coord.cli._editable_checkout_drift`), in which case
1246
+ # nothing launched this tick and `launch` is guaranteed None — same
1247
+ # shape as `cordon_reason` and for the same reason: a queue that stops
1248
+ # must say why in a field the shell can render, not just a log line
1249
+ # nobody is watching an unattended tick for.
1250
+ drift_reason: str = ""
1243
1251
 
1244
1252
  @property
1245
1253
  def free_slots(self) -> int:
@@ -2412,6 +2420,37 @@ def _normalized_cordons(cordons: Mapping[str, str] | None) -> dict[str, str]:
2412
2420
  }
2413
2421
 
2414
2422
 
2423
+ def _editable_drift_alert(repo_root: str, shown: str) -> QueueAlert:
2424
+ """The queue-level record for "this host's own coord has drifted" (#2314).
2425
+
2426
+ Mirrors :func:`_cordon_alert`: a queue that stops must say why, in the
2427
+ same channel and with the same one-key remedy field. Unlike a cordon
2428
+ (an operator-declared, self-expiring pause) this is an *accident* —
2429
+ something (a Build, a `coord test`/smoke run, an interactive agent
2430
+ poking at the live checkout) git-checked-out this host's editable
2431
+ ``coord`` install onto a non-default branch, and every tick since has
2432
+ been reconciling and launching under whatever code that branch happens
2433
+ to carry. #2314: this used to be advisory-only (a warning at CLI
2434
+ startup nobody unattended is watching for); now it is a hard refusal —
2435
+ a worker branch that silently swaps out the tool driving it is exactly
2436
+ the #561/#601 failure class this whole module exists to avoid adding
2437
+ to.
2438
+ """
2439
+ return QueueAlert(
2440
+ reason=(
2441
+ f"no launch — this host's coord ({repo_root}) is an editable "
2442
+ f"checkout on {shown}, not its default branch — the tick would "
2443
+ "be reconciling and launching under whatever code that branch "
2444
+ "carries. Restore it before anything launches here again."
2445
+ ),
2446
+ details=(
2447
+ "reconciliation (steps 1/1b) still runs — this only refuses to "
2448
+ "launch NEW work, the same posture a release cordon takes",
2449
+ ),
2450
+ command=f"git -C {repo_root} checkout main",
2451
+ )
2452
+
2453
+
2415
2454
  def _cordon_alert(host: str, reason: str) -> QueueAlert:
2416
2455
  """The queue-level record for "this host is cordoned" (#2101 trap E).
2417
2456
 
@@ -2490,6 +2529,7 @@ def plan_tick(
2490
2529
  cordons: Mapping[str, str] | None = None,
2491
2530
  live_ci_gate: Mapping[str, bool] | None = None,
2492
2531
  live_blocked_gate: Mapping[str, bool] | None = None,
2532
+ editable_drift: tuple[str, str] | None = None,
2493
2533
  ) -> TickPlan:
2494
2534
  """Decide one tick. Pure; the caller executes the returned plan.
2495
2535
 
@@ -2566,6 +2606,20 @@ def plan_tick(
2566
2606
  #2110 deadlock, re-created by the very mechanism meant to end it. A
2567
2607
  cordoned tick is exactly `--reconcile-only`.
2568
2608
 
2609
+ *editable_drift* is ``(repo_root, shown)`` (a rendered branch label —
2610
+ see :func:`coord.cli._editable_checkout_drift`) when THIS host's own
2611
+ ``coord`` is an editable checkout that has drifted off its default
2612
+ branch, or ``None`` when it hasn't (the overwhelming common case — a
2613
+ release install, or an editable one still cleanly on `main`). #2314:
2614
+ this used to be advisory-only — a warning printed at CLI startup
2615
+ (`coord.cli._warn_if_editable_checkout_moved`) that nothing unattended
2616
+ ever reads. Non-``None`` here launches NOTHING this tick, same posture
2617
+ and same position as a local cordon (checked immediately after it,
2618
+ before capacity) — reconciliation still runs, for the identical #2110
2619
+ reason a cordon doesn't freeze it either. Deliberately host-scoped, not
2620
+ fleet-scoped: a drifted checkout only makes THIS host's tick
2621
+ untrustworthy, not every host's.
2622
+
2569
2623
  *live_ci_gate* maps a `parked` entry's key to whether a FRESH,
2570
2624
  single-entry re-derivation of its gate — computed by the shell THIS
2571
2625
  tick, via :func:`coord.merge_queue.entry_gate_status` with a live
@@ -3018,6 +3072,25 @@ def plan_tick(
3018
3072
  cordon_reason=local_cordon,
3019
3073
  )
3020
3074
 
3075
+ # #2314 step 2c: is THIS host's own `coord` a drifted editable checkout?
3076
+ # Checked right after the cordon (same reasoning: reconciliation must
3077
+ # still run — see the docstring) and, like the cordon, before capacity —
3078
+ # a drifted checkout launches nothing however many slots are free. This
3079
+ # is the escalation of `coord.cli._warn_if_editable_checkout_moved` from
3080
+ # advisory-only to an actual refusal.
3081
+ if editable_drift is not None:
3082
+ drift_repo_root, drift_shown = editable_drift
3083
+ drift_text = f"drifted onto {drift_shown} ({drift_repo_root})"
3084
+ return TickPlan(
3085
+ **plan_base,
3086
+ reconciles=tuple(reconciles),
3087
+ blocked=tuple(blocked),
3088
+ deferrals=(),
3089
+ alert=_editable_drift_alert(drift_repo_root, drift_shown),
3090
+ launch=None,
3091
+ drift_reason=drift_text,
3092
+ )
3093
+
3021
3094
  if capacity - occupied <= 0:
3022
3095
  return TickPlan(
3023
3096
  **plan_base,
@@ -3440,6 +3513,11 @@ def render_plan(plan: TickPlan, *, dry_run: bool = False) -> list[str]:
3440
3513
  f" no launch — this host is {plan.cordon_reason}; in-flight "
3441
3514
  "drives are draining and the queue resumes once it is rolled"
3442
3515
  )
3516
+ elif plan.drift_reason:
3517
+ # #2314: same "name it or it reads as a mystery" reasoning as the
3518
+ # cordon branch above — this host's own `coord` is untrustworthy
3519
+ # right now, not the queue.
3520
+ lines.append(f" no launch — this host's coord is {plan.drift_reason}")
3443
3521
  elif plan.capacity and plan.free_slots == 0:
3444
3522
  # Naming the reason matters more here than anywhere else in this
3445
3523
  # render: #1794 was diagnosed entirely from a journal, and "no launch"