code-coordinator 0.5.107__tar.gz → 0.5.109__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 (843) hide show
  1. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent.py +56 -0
  5. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/claude.py +12 -1
  6. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/claude_pty.py +14 -1
  7. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/smoke.py +18 -7
  8. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent.py +163 -0
  9. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers.py +46 -0
  10. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers_pty.py +46 -1
  11. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke.py +39 -0
  12. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_test_scoping.py +18 -3
  13. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/cargo-test.yml +0 -0
  24. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/release-tui.yml +0 -0
  26. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.gitignore +0 -0
  28. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/GOAL.md +0 -0
  30. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/LICENSE +0 -0
  31. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/README.md +0 -0
  33. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/SOURCES.txt +0 -0
  34. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/scm_file_list.json +0 -0
  38. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/acceptance_drivers.py +0 -0
  43. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_bool_guard.py +0 -0
  52. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/client.py +0 -0
  63. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/drive_queue.py +0 -0
  73. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/config.py +0 -0
  95. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  106. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  108. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  109. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/db.py +0 -0
  207. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive.py +0 -0
  232. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive_queue.py +0 -0
  233. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive_state.py +0 -0
  234. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/events.py +0 -0
  235. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/failure_class.py +0 -0
  236. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/filelock.py +0 -0
  237. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/fleet_config_health.py +0 -0
  238. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/freshness.py +0 -0
  239. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_a.py +0 -0
  240. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_b.py +0 -0
  241. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_snapshot.py +0 -0
  242. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gates.py +0 -0
  243. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/github_ops.py +0 -0
  244. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/goal.py +0 -0
  245. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/graph_health.py +0 -0
  246. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/__init__.py +0 -0
  247. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/aggregate.py +0 -0
  248. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/__init__.py +0 -0
  249. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/agent_install.py +0 -0
  250. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/cargo_targets.py +0 -0
  251. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/claude_binary.py +0 -0
  252. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/deploy_lane_facts.py +0 -0
  253. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/disk.py +0 -0
  254. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_board.py +0 -0
  255. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  256. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_phantom.py +0 -0
  257. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_unit_drift.py +0 -0
  258. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/graph.py +0 -0
  259. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/graphify_cli.py +0 -0
  260. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/index_lock.py +0 -0
  261. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/plan_usage.py +0 -0
  262. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/repo_state.py +0 -0
  263. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/spawned_coord.py +0 -0
  264. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/timer_active.py +0 -0
  265. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/toolchain.py +0 -0
  266. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/unit_drift.py +0 -0
  267. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/unit_enablement.py +0 -0
  268. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/worktrees.py +0 -0
  269. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/cli.py +0 -0
  270. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/context.py +0 -0
  271. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/fleet_snapshot.py +0 -0
  272. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/models.py +0 -0
  273. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/pypi.py +0 -0
  274. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/registry.py +0 -0
  275. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/render.py +0 -0
  276. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/units.py +0 -0
  277. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/hooks.py +0 -0
  278. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/housekeeping.py +0 -0
  279. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/interactive.py +0 -0
  280. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/issue_store.py +0 -0
  281. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/liveness_auditor.py +0 -0
  282. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/machine_pause.py +0 -0
  283. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/merge_queue.py +0 -0
  284. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_chat.py +0 -0
  285. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_dispatch.py +0 -0
  286. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_gate.py +0 -0
  287. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_order.py +0 -0
  288. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/mock_author.py +0 -0
  289. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/models.py +0 -0
  290. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/network.py +0 -0
  291. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/new_issue_chat.py +0 -0
  292. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/__init__.py +0 -0
  293. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/baseline.py +0 -0
  294. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/cli.py +0 -0
  295. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/collect.py +0 -0
  296. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/digest.py +0 -0
  297. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/models.py +0 -0
  298. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/predicate.py +0 -0
  299. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/service.py +0 -0
  300. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/store.py +0 -0
  301. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/transport.py +0 -0
  302. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notify.py +0 -0
  303. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/openapi.py +0 -0
  304. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/overlap_fence.py +0 -0
  305. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/overlap_predict.py +0 -0
  306. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/parentage.py +0 -0
  307. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/parentage_github.py +0 -0
  308. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/pipeline.py +0 -0
  309. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/plan_parser.py +0 -0
  310. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/plans.py +0 -0
  311. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/platform_paths.py +0 -0
  312. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_bridge.py +0 -0
  313. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_store.py +0 -0
  314. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_sync.py +0 -0
  315. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/pr_body_lint.py +0 -0
  316. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/prereqs.py +0 -0
  317. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/progress.py +0 -0
  318. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/__init__.py +0 -0
  319. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/base.py +0 -0
  320. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/opencode.py +0 -0
  321. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/queue_diagnose.py +0 -0
  322. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/reconcile.py +0 -0
  323. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/refine_chat.py +0 -0
  324. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_cordon.py +0 -0
  325. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_propagate.py +0 -0
  326. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_verify.py +0 -0
  327. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_window.py +0 -0
  328. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/repo_edit.py +0 -0
  329. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/repo_onboard.py +0 -0
  330. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/reports.py +0 -0
  331. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/revalidate.py +0 -0
  332. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/review.py +0 -0
  333. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/scorecard.py +0 -0
  334. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/serve_app.py +0 -0
  335. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/skills/update-issue/SKILL.md +0 -0
  336. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/state.py +0 -0
  340. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_author.py +0 -0
  341. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ARCHITECTURE.md +0 -0
  371. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ARCH_SECURITY_GATES.md +0 -0
  372. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/COCKPIT.md +0 -0
  373. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/COST_DISCIPLINE.md +0 -0
  375. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CROSS_PLATFORM.md +0 -0
  376. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CUSTOMER_PORTAL.md +0 -0
  377. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/DRIVE_QUEUE.md +0 -0
  378. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/EPHEMERAL_WORKERS.md +0 -0
  379. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/FORGE_MIGRATION.md +0 -0
  380. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/GRAPHIFY_SETUP.md +0 -0
  381. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ISSUE_GUIDANCE.md +0 -0
  382. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/MAC_MINI.md +0 -0
  383. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  384. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/NOTIFIER.md +0 -0
  385. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/OPENCODE_VERIFICATION.md +0 -0
  386. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/OPERATING_GOTCHAS.md +0 -0
  387. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ORACLE_LOOP.md +0 -0
  388. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PHONE_WEBAPP.md +0 -0
  389. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PIPELINE_V2.md +0 -0
  390. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PLATFORM_EVOLUTION.md +0 -0
  391. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/SECOND_BACKEND.md +0 -0
  392. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/STORE_SERVICE.md +0 -0
  393. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  394. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/WEB_CONTROL_CENTER.md +0 -0
  395. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/README.md +0 -0
  396. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/_tokens.css +0 -0
  397. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/issue-detail.html +0 -0
  398. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/pipeline-narrow.html +0 -0
  399. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/pipeline-wide.html +0 -0
  400. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/graphify-out/.gitignore +0 -0
  401. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/install-agent.sh +0 -0
  402. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/pyproject.toml +0 -0
  403. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/audit_review_verdict_overrides.py +0 -0
  404. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  405. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/build-worker-image.sh +0 -0
  406. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/coordinator-machine.py +0 -0
  407. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/epic-down.sh +0 -0
  408. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/epic-up.sh +0 -0
  409. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/preflight.sh +0 -0
  410. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/provision-worker.sh +0 -0
  411. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  412. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  413. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/verify-github-token.sh +0 -0
  414. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/codegen.py +0 -0
  415. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/coord-test-runner.sh +0 -0
  416. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/run_tests_in_populated_home.sh +0 -0
  420. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/run_tests_without_gh.sh +0 -0
  421. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/smoke_437_interactive.py +0 -0
  422. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/setup.cfg +0 -0
  426. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  429. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/contract.md +0 -0
  430. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/manifest.yml +0 -0
  431. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  432. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  433. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  434. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  435. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/conftest.py +0 -0
  436. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/contract.md +0 -0
  437. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/manifest.yml +0 -0
  438. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  439. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  440. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/contract.md +0 -0
  441. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/manifest.yml +0 -0
  442. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  443. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  444. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  445. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  446. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  447. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  448. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  449. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  450. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  451. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  452. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/contract.md +0 -0
  453. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  454. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  455. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/manifest.yml +0 -0
  456. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  457. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/tsconfig.json +0 -0
  458. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  459. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/conftest.py +0 -0
  460. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/board-pipeline-basic.json +0 -0
  461. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  462. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  463. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  464. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/all_pass.json +0 -0
  465. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  466. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/mixed_fail.json +0 -0
  467. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  468. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  469. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/skip.json +0 -0
  470. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/truncated.json +0 -0
  471. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  472. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  473. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  474. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  475. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  476. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  477. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  478. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  479. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_acceptance.py +0 -0
  480. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_acceptance_drivers.py +0 -0
  481. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_api_error.py +0 -0
  482. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_app.py +0 -0
  483. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_branch_base.py +0 -0
  484. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_branch_capture.py +0 -0
  485. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_config_free_1712.py +0 -0
  486. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_deploy_units_endpoint.py +0 -0
  487. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_dirty_worktree.py +0 -0
  488. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_graph_self_heal.py +0 -0
  489. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_health_h3.py +0 -0
  490. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_idle_restart.py +0 -0
  491. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_push_failure.py +0 -0
  492. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_reap.py +0 -0
  493. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_repos_and_pull.py +0 -0
  494. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_restart_services_endpoint.py +0 -0
  495. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_startup_diagnostics.py +0 -0
  496. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_update.py +0 -0
  497. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_update_bluegreen.py +0 -0
  498. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_usage_limit.py +0 -0
  499. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_zero_commit.py +0 -0
  500. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ambient_home_isolation.py +0 -0
  501. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_approve_reject_plan.py +0 -0
  502. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_approve_usage_gate.py +0 -0
  503. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_assignment_already_recorded_daemon.py +0 -0
  504. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_log.py +0 -0
  505. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_outcome.py +0 -0
  506. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_query.py +0 -0
  507. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_auto_loop.py +0 -0
  508. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_auto_release_publish_2035.py +0 -0
  509. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_base_checkout_restore.py +0 -0
  510. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_block_log.py +0 -0
  511. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_cap_762.py +0 -0
  512. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_fixture.py +0 -0
  513. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_read_path.py +0 -0
  514. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_service.py +0 -0
  515. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_state.py +0 -0
  516. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_wire.py +0 -0
  517. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_brain.py +0 -0
  518. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_branch_model.py +0 -0
  519. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_bug_intake.py +0 -0
  520. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_build_worker_image_env_update.py +0 -0
  521. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cargo_cache.py +0 -0
  522. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_acceptance_gate_1950.py +0 -0
  523. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_parity_2091.py +0 -0
  524. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_store.py +0 -0
  525. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_claim.py +0 -0
  526. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_acceptance.py +0 -0
  527. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign.py +0 -0
  528. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  529. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_interactive_remote.py +0 -0
  530. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_provider.py +0 -0
  531. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  532. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_audit.py +0 -0
  533. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_chat_continue.py +0 -0
  534. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_diagnose_config_provenance.py +0 -0
  535. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_drive.py +0 -0
  540. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_drive_queue.py +0 -0
  541. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_escalate.py +0 -0
  542. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_fix_headless_review.py +0 -0
  543. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_gate_a.py +0 -0
  544. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_install_drift.py +0 -0
  545. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_install_skills.py +0 -0
  546. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_issue_create_label.py +0 -0
  547. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_issue_reopen.py +0 -0
  548. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_pull_artifact.py +0 -0
  563. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_queue.py +0 -0
  564. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_reattach_sessions.py +0 -0
  565. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_refine_board.py +0 -0
  566. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_preflight.py +0 -0
  567. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_propagate.py +0 -0
  568. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_window.py +0 -0
  569. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_repo_2220.py +0 -0
  570. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_scorecard.py +0 -0
  571. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_merge_queue.py +0 -0
  574. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_provider.py +0 -0
  575. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_review_finalizing.py +0 -0
  576. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_test_failed_tag.py +0 -0
  577. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_usage_limit.py +0 -0
  578. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_sync_comments_873.py +0 -0
  579. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_test_plan.py +0 -0
  580. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_track.py +0 -0
  581. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_tui_update.py +0 -0
  582. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_wait.py +0 -0
  583. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_client_base_install.py +0 -0
  584. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_comments.py +0 -0
  585. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_completion_summary.py +0 -0
  586. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config.py +0 -0
  587. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_acceptance.py +0 -0
  588. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_audit.py +0 -0
  589. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_pricing.py +0 -0
  590. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  591. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_usage_gate.py +0 -0
  592. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_conflict_fix.py +0 -0
  593. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_conflict_fix_semantic.py +0 -0
  594. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test.py +0 -0
  595. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_baseline.py +0 -0
  596. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_routing.py +0 -0
  597. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_toolchain.py +0 -0
  598. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_web_sse_restart_live.py +0 -0
  599. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coordinator_machine.py +0 -0
  600. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cross_platform_imports.py +0 -0
  601. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard.py +0 -0
  602. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_fixture.py +0 -0
  603. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_terminal.py +0 -0
  604. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_terminal_live.py +0 -0
  605. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_db.py +0 -0
  606. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dead_end.py +0 -0
  607. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_db_backup.py +0 -0
  608. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_web_dist.py +0 -0
  609. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_web_rollback.py +0 -0
  610. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_drive_queue_unit.py +0 -0
  611. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_manifest.py +0 -0
  612. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_units_lane.py +0 -0
  613. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_web_unit.py +0 -0
  614. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deps.py +0 -0
  615. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_diagnose.py +0 -0
  616. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dispatch.py +0 -0
  617. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dispatch_target_validation.py +0 -0
  618. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dist_name.py +0 -0
  619. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_done_housekeeping.py +0 -0
  620. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive.py +0 -0
  621. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_queue.py +0 -0
  622. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_state.py +0 -0
  623. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_tmux.py +0 -0
  624. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_capability_detection.py +0 -0
  625. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  626. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_image_provenance.py +0 -0
  627. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_errors.py +0 -0
  628. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_events.py +0 -0
  629. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_failure_class.py +0 -0
  630. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_filelock.py +0 -0
  631. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  632. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fix_of_force_override.py +0 -0
  633. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_config_health.py +0 -0
  634. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_health_probes.py +0 -0
  635. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_health_snapshot.py +0 -0
  636. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_freshness.py +0 -0
  637. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_a.py +0 -0
  638. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_b.py +0 -0
  639. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_snapshot_staleness.py +0 -0
  640. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gates.py +0 -0
  641. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  642. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_generated_types_fixture.py +0 -0
  643. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_github_ops.py +0 -0
  644. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_goal.py +0 -0
  645. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_graph_health.py +0 -0
  646. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_graph_selfheal_absent_2237.py +0 -0
  647. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_handoff.py +0 -0
  648. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_checks.py +0 -0
  649. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_cli.py +0 -0
  650. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_cli_graph.py +0 -0
  651. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_config.py +0 -0
  652. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_context.py +0 -0
  653. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_deploy_lane_facts.py +0 -0
  654. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_incident_regression.py +0 -0
  655. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_pypi.py +0 -0
  656. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_registry.py +0 -0
  657. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_timer_active.py +0 -0
  658. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_toolchain.py +0 -0
  659. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_unit_drift.py +0 -0
  660. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_unit_enablement.py +0 -0
  661. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_hooks.py +0 -0
  662. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_human_attended_437.py +0 -0
  663. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_init.py +0 -0
  664. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_integration.py +0 -0
  665. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_briefing_echo.py +0 -0
  666. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_prefill_state.py +0 -0
  667. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_session_relaunch.py +0 -0
  668. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_test_verdict_backstop.py +0 -0
  669. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_token_attribution.py +0 -0
  670. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_worktree.py +0 -0
  671. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_issue_store_seam.py +0 -0
  672. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_liveness_auditor.py +0 -0
  673. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_liveness_notify.py +0 -0
  674. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_machine_pause.py +0 -0
  675. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_merge_queue.py +0 -0
  676. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_merge_verify.py +0 -0
  677. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_chat.py +0 -0
  678. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_dispatch.py +0 -0
  679. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_gate.py +0 -0
  680. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_order.py +0 -0
  681. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_seam.py +0 -0
  682. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_mock_author.py +0 -0
  683. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_model_tiering.py +0 -0
  684. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_models.py +0 -0
  685. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_models_config_labels.py +0 -0
  686. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_needs_attention.py +0 -0
  687. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_network.py +0 -0
  688. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_new_issue_chat.py +0 -0
  689. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_next_release_tag.py +0 -0
  690. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_no_direct_gh_calls.py +0 -0
  691. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_node_shim.py +0 -0
  692. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_baseline.py +0 -0
  693. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_cli.py +0 -0
  694. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_collect.py +0 -0
  695. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_config.py +0 -0
  696. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_drive_seam.py +0 -0
  697. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_isolation.py +0 -0
  698. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_predicate.py +0 -0
  699. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_quiet_hours.py +0 -0
  700. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_service.py +0 -0
  701. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notify.py +0 -0
  702. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notify_drain.py +0 -0
  703. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_openapi.py +0 -0
  704. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_operational_defaults.py +0 -0
  705. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_overlap_fence.py +0 -0
  706. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_overlap_predict.py +0 -0
  707. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_packaged_deploy_units.py +0 -0
  708. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_parentage.py +0 -0
  709. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_paste_landed.py +0 -0
  710. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_pipeline.py +0 -0
  711. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_approve_plan_command.py +0 -0
  712. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_pr_command.py +0 -0
  713. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_review_command.py +0 -0
  714. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_only.py +0 -0
  715. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_parser.py +0 -0
  716. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_platform_paths.py +0 -0
  717. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_bridge.py +0 -0
  718. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_config.py +0 -0
  719. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_sync.py +0 -0
  720. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_pr_body_lint.py +0 -0
  721. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_prereqs.py +0 -0
  722. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_production_db_guard.py +0 -0
  723. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_progress.py +0 -0
  724. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_provider_seam.py +0 -0
  725. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers_config_labels.py +0 -0
  726. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_quiet_hours.py +0 -0
  727. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_quiet_hours_store_2146.py +0 -0
  728. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reap_merged_sessions.py +0 -0
  729. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reap_stale_interactive_tick.py +0 -0
  730. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_branch.py +0 -0
  731. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_completions.py +0 -0
  732. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_merges.py +0 -0
  733. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_no_agent_record.py +0 -0
  734. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_usage_limit_done.py +0 -0
  735. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_refine_chat.py +0 -0
  736. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_2101.py +0 -0
  737. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  738. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_deadlock_2240.py +0 -0
  739. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_propagate.py +0 -0
  740. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_edit_2220.py +0 -0
  746. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_graph_fleet_2237.py +0 -0
  747. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_onboard_2220.py +0 -0
  748. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_report_result_push.py +0 -0
  749. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reports.py +0 -0
  750. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry.py +0 -0
  751. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry_advisory_1606.py +0 -0
  752. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry_type_1636.py +0 -0
  753. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_revalidate.py +0 -0
  754. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review.py +0 -0
  755. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_end_review_without_verdict.py +0 -0
  756. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_parse_failure_diagnostic.py +0 -0
  757. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_reaffirm.py +0 -0
  758. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_state.py +0 -0
  759. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_backstop.py +0 -0
  760. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_override_audit.py +0 -0
  761. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_relay.py +0 -0
  762. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_zero_commits.py +0 -0
  763. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_scoped_review_wiring.py +0 -0
  764. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_scorecard.py +0 -0
  765. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_serve.py +0 -0
  766. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_serve_app_board_trim.py +0 -0
  767. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_session.py +0 -0
  768. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_slice_issue_attribution.py +0 -0
  769. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke_live_checkout_restore.py +0 -0
  770. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke_workflow.py +0 -0
  771. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_spend_ceiling.py +0 -0
  772. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_spend_ceiling_coordinator.py +0 -0
  773. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_split.py +0 -0
  774. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_split_work.py +0 -0
  775. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stage_projection.py +0 -0
  776. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stalled_pipeline.py +0 -0
  777. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_state.py +0 -0
  778. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_state_review_findings_daemon.py +0 -0
  779. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_status_fleet_footer.py +0 -0
  780. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stop_1567.py +0 -0
  781. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stuck.py +0 -0
  782. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_terminal_command.py +0 -0
  783. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_author.py +0 -0
  784. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_chat.py +0 -0
  785. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_orchestrator.py +0 -0
  786. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_report.py +0 -0
  787. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_verdict_parsing.py +0 -0
  788. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_verdict_transcript_floor.py +0 -0
  789. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_board_audit.py +0 -0
  790. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_config_load_1080.py +0 -0
  791. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_daemon_routing_906.py +0 -0
  792. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_tmux_host.py +0 -0
  793. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_tmux_session.py +0 -0
  794. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_transcript_floor.py +0 -0
  795. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage.py +0 -0
  796. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage_limits.py +0 -0
  797. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage_rollup.py +0 -0
  798. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_venv_live_install_2121.py +0 -0
  799. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_version_single_source.py +0 -0
  800. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_watch.py +0 -0
  801. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_events.py +0 -0
  802. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_image_pin_sync.py +0 -0
  803. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_safety.py +0 -0
  804. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worktree.py +0 -0
  805. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  806. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/Cargo.lock +0 -0
  807. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/Cargo.toml +0 -0
  808. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/cargo-config-local-quadraui.toml.example +0 -0
  809. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/audit.rs +0 -0
  810. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/chat.rs +0 -0
  811. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/data.rs +0 -0
  812. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/dialogs.rs +0 -0
  813. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/drive.rs +0 -0
  814. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/drive_queue.rs +0 -0
  815. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/escalation.rs +0 -0
  816. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/events.rs +0 -0
  817. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fixtures.rs +0 -0
  818. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_health.rs +0 -0
  819. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_sessions.rs +0 -0
  820. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_terminals.rs +0 -0
  821. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/format.rs +0 -0
  822. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/milestone_dag.rs +0 -0
  823. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/mod.rs +0 -0
  824. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/msv.rs +0 -0
  825. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/pipeline.rs +0 -0
  826. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/plans.rs +0 -0
  827. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/render.rs +0 -0
  828. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/reports.rs +0 -0
  829. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/sessions.rs +0 -0
  830. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/settings_ui.rs +0 -0
  831. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/sidebar.rs +0 -0
  832. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/terminal.rs +0 -0
  833. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/tests.rs +0 -0
  834. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/types.rs +0 -0
  835. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/workspace.rs +0 -0
  836. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/bin/gtk.rs +0 -0
  837. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/commands.rs +0 -0
  838. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/lib.rs +0 -0
  839. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/main.rs +0 -0
  840. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/settings.rs +0 -0
  841. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/tests/acceptance.rs +0 -0
  842. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/tests/cli.rs +0 -0
  843. {code_coordinator-0.5.107 → code_coordinator-0.5.109}/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.107
3
+ Version: 0.5.109
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.107
3
+ Version: 0.5.109
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.107",
2
+ "tag": "0.5.109",
3
3
  "distance": 0,
4
- "node": "gd8477c280ee82a9279e982ed0b3aea53dc089761",
4
+ "node": "g3cadef6459414c424ff96582a2bebcc8dd3ae08a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-16"
@@ -3850,6 +3850,12 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
3850
3850
  For ``type="plan"`` specs the worker gets :data:`WORKER_PLAN_PROMPT` as
3851
3851
  its system prompt and only ``Read,Bash`` in ``--allowedTools`` — no
3852
3852
  Edit/Write tools so it cannot modify the repository.
3853
+
3854
+ For ``type="smoke"`` specs the worker gets ``Read,Bash`` only — no
3855
+ Edit/Write, and deliberately no ``Monitor`` (#2301): a smoke leg is a
3856
+ one-shot ``claude -p`` session, and ``Monitor`` ends the turn to await a
3857
+ notification that can never arrive in time to resume it, which silently
3858
+ kills a backgrounded smoke suite mid-run and leaves no verdict printed.
3853
3859
  """
3854
3860
  if spec.type == "plan":
3855
3861
  system_prompt = spec.system_prompt if spec.system_prompt else WORKER_PLAN_PROMPT
@@ -3907,6 +3913,33 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
3907
3913
  system_prompt = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
3908
3914
  system_prompt += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
3909
3915
  allowed_tools = "Read,Edit,Write,Bash"
3916
+ elif spec.type == "smoke":
3917
+ # #2301: smoke gets its own branch instead of falling through to the
3918
+ # generic `else` below (which is where it used to land, and where
3919
+ # it inherited the #2169 `Monitor` grant meant for *work* legs).
3920
+ # A smoke runner's whole job is "pull the branch, run the smoke
3921
+ # command, report pass/fail" (see SMOKE_SYSTEM_PROMPT) — it edits
3922
+ # nothing and pushes nothing, so it has no business holding
3923
+ # Edit/Write either.
3924
+ #
3925
+ # `Monitor` is deliberately withheld: it is an await-a-notification
3926
+ # tool — calling it ends the current turn so the harness can wake
3927
+ # the model back up once the condition it's watching fires. That
3928
+ # only resumes anything in an INTERACTIVE session. A smoke leg is a
3929
+ # one-shot `claude -p` session like every coord leg (#1394): ending
3930
+ # the turn ends the session itself, permanently, before any
3931
+ # notification can arrive. The agent was observed reaching for
3932
+ # `Monitor` via ToolSearch to poll a backgrounded smoke suite, then
3933
+ # ending its turn to "wait" — the session (and the backgrounded
3934
+ # suite, reaped ~30s later) died silently with no verdict printed,
3935
+ # burning a Test dispatch for zero signal every single retry.
3936
+ # `BashOutput`/`TaskOutput` (already reachable without an explicit
3937
+ # grant — see the #2169 comment above) return synchronously and are
3938
+ # the correct way to poll a backgrounded task from here.
3939
+ from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
3940
+ system_prompt = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
3941
+ system_prompt += build_deny_prompt(spec.deny_commands)
3942
+ allowed_tools = "Read,Bash"
3910
3943
  else:
3911
3944
  system_prompt = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
3912
3945
  system_prompt += build_deny_prompt(spec.deny_commands)
@@ -3916,6 +3949,15 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
3916
3949
  # past the 600s Bash ceiling. `TaskOutput`/`TaskStop` were already
3917
3950
  # reachable without being in this list; `Monitor` was the one
3918
3951
  # observed denied.
3952
+ #
3953
+ # #2301: this grant is for *work*-shaped legs (work/review/fix/
3954
+ # conflict-fix) whose system prompt (WORKER_SYSTEM_PROMPT, the
3955
+ # ONE-SHOT section) explicitly teaches the bounded-poll pattern and
3956
+ # explains why an await-a-notification tool is safe to reach for
3957
+ # ONLY with that guidance attached. `smoke` used to fall through to
3958
+ # this branch and inherit `Monitor` with none of that context — see
3959
+ # the dedicated `elif spec.type == "smoke"` branch above, which
3960
+ # deliberately withholds it instead.
3919
3961
  allowed_tools = "Read,Edit,Write,Bash,Monitor"
3920
3962
 
3921
3963
  # NOTE: briefing is NOT passed as a positional arg — it is written to
@@ -7079,6 +7121,20 @@ class AgentServer:
7079
7121
  assert proc.stdin is not None
7080
7122
  proc.stdin.write(initial_input)
7081
7123
  proc.stdin.flush()
7124
+ # #2306: a provider that does not support stdin message injection
7125
+ # (``capabilities().inject == False``, e.g. OpenCodeProvider,
7126
+ # which takes its briefing on argv) never writes to or closes
7127
+ # this pipe again. Leaving it open blocks the worker forever —
7128
+ # it never sees an EOF on stdin — until the 600s TTFT watchdog
7129
+ # kills it having emitted zero bytes. Close it here so such a
7130
+ # worker gets its EOF immediately after the (empty) initial
7131
+ # write. ``provider_obj`` is ``None`` on the legacy path
7132
+ # (``spec.provider is None``, pre-#324 behaviour) — treat that
7133
+ # as claude/inject-capable and leave stdin open, matching
7134
+ # ``inject_message``'s existing "no provider info => allow"
7135
+ # fallback.
7136
+ if provider_obj is not None and not provider_obj.capabilities().inject: # type: ignore[attr-defined]
7137
+ proc.stdin.close()
7082
7138
  except (BrokenPipeError, OSError) as e:
7083
7139
  log_fh.write(f"\n# failed to send initial briefing: {e}\n")
7084
7140
 
@@ -120,6 +120,7 @@ class ClaudeProvider(Provider):
120
120
  _sealed_write_guard_tools,
121
121
  build_deny_prompt,
122
122
  )
123
+ from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
123
124
 
124
125
  binary = self._binary if self._binary is not None else DEFAULT_WORKER_BINARY
125
126
 
@@ -170,12 +171,22 @@ class ClaudeProvider(Provider):
170
171
  _sp = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
171
172
  _sp += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
172
173
  _at = "Read,Edit,Write,Bash"
174
+ elif spec.type == "smoke":
175
+ # #2301: keep in sync with default_worker_command's identical
176
+ # branch — smoke gets Read,Bash only, deliberately WITHOUT
177
+ # Monitor (an await-a-notification tool that ends a smoke
178
+ # leg's one-shot session before any wake-up can arrive) or
179
+ # Edit/Write (a smoke leg validates; it never mutates).
180
+ _sp = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
181
+ _sp += build_deny_prompt(spec.deny_commands)
182
+ _at = "Read,Bash"
173
183
  else:
174
184
  _sp = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
175
185
  _sp += build_deny_prompt(spec.deny_commands)
176
186
  # #2169: keep in sync with default_worker_command's identical
177
187
  # branch — Monitor is the sanctioned bounded-poll tool for a
178
- # backgrounded long-running command.
188
+ # backgrounded long-running command. #2301: this grant is for
189
+ # work-shaped legs only — smoke has its own branch above.
179
190
  _at = "Read,Edit,Write,Bash,Monitor"
180
191
 
181
192
  if system_prompt is None:
@@ -485,13 +485,26 @@ class ClaudePtyProvider(Provider):
485
485
  _sp = spec.system_prompt if spec.system_prompt else MILESTONE_CHAT_SYSTEM_PROMPT
486
486
  _sp += build_deny_prompt(MILESTONE_CHAT_DENY_COMMANDS)
487
487
  _at = "Read,Bash"
488
+ elif spec.type == "smoke":
489
+ # #2301: keep in sync with default_worker_command's and
490
+ # ClaudeProvider.build_command's identical branch — smoke
491
+ # gets SMOKE_SYSTEM_PROMPT and Read,Bash only, deliberately
492
+ # WITHOUT `Monitor` (an await-a-notification tool: calling it
493
+ # ends the turn, which ends a one-shot leg's session before
494
+ # any wake-up can arrive) and without Edit/Write (a smoke leg
495
+ # validates; it never mutates).
496
+ from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
497
+ _sp = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
498
+ _sp += build_deny_prompt(spec.deny_commands)
499
+ _at = "Read,Bash"
488
500
  else:
489
501
  _sp = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
490
502
  _sp += build_deny_prompt(spec.deny_commands)
491
503
  # #2169: keep in sync with default_worker_command's and
492
504
  # ClaudeProvider.build_command's identical branch — Monitor
493
505
  # is the sanctioned bounded-poll tool for a backgrounded
494
- # long-running command.
506
+ # long-running command. #2301: that grant is for *work*-shaped
507
+ # legs only — smoke has its own branch above.
495
508
  _at = "Read,Edit,Write,Bash,Monitor"
496
509
 
497
510
  if system_prompt is None:
@@ -111,13 +111,24 @@ suite off and stopping there prints no marker, so the Test stage records NO \
111
111
  verdict and re-dispatches; because the ceiling is deterministic, every \
112
112
  re-dispatch does exactly the same thing, which is why this loop bills \
113
113
  indefinitely. Instead: POLL the backgrounded task to completion from THIS \
114
- same session, in bounded steps (`BashOutput`/`TaskOutput` with the id, or \
115
- `Monitor`), and read its REAL exit status before you report anything. Do NOT \
116
- use a foreground `until ! pgrep ...; do sleep ...; done` wait — it hits the \
117
- identical 600s wall. If you genuinely cannot obtain an exit status before you \
118
- run out of room, print `SMOKE: fail <the smoke command never returned an exit \
119
- status within this session>` rather than ending mute: a stated verdict is \
120
- recoverable, silence is not.
114
+ same session, in bounded steps, with `BashOutput`/`TaskOutput` and the task \
115
+ id, and read its REAL exit status before you report anything. Do NOT use a \
116
+ foreground `until ! pgrep ...; do sleep ...; done` wait — it hits the \
117
+ identical 600s wall.
118
+ - NEVER USE `Monitor` OR ANY OTHER AWAIT-A-NOTIFICATION TOOL TO WAIT FOR A \
119
+ RESULT (#2301). Those tools work by ending your turn so the harness can wake \
120
+ the model back up once the condition they're watching fires — that only \
121
+ resumes anything in an INTERACTIVE session. This is a one-shot `claude -p` \
122
+ session: ending your turn ends the session itself, permanently, and no \
123
+ notification will ever arrive to resume it. The backgrounded suite you were \
124
+ polling is then reaped mid-run by the coordinator, and you have printed no \
125
+ verdict marker — exactly the silent failure the previous bullet exists to \
126
+ prevent, just reached by a different tool. Only `BashOutput`/`TaskOutput` \
127
+ return synchronously without ending your turn; those are the only \
128
+ correct way to poll a backgrounded task from here. If you genuinely cannot \
129
+ obtain an exit status before you run out of room, print `SMOKE: fail <the \
130
+ smoke command never returned an exit status within this session>` rather \
131
+ than ending mute: a stated verdict is recoverable, silence is not.
121
132
 
122
133
  Where you are:
123
134
  - You are in a dedicated git worktree created for this run. Every git command \
@@ -1134,6 +1134,64 @@ def test_default_worker_command_resume_flag_present() -> None:
1134
1134
  assert argv[idx + 1] == "ses-abc123"
1135
1135
 
1136
1136
 
1137
+ # ── #2301: smoke legs must not hold Monitor (or Edit/Write) ────────────────
1138
+ #
1139
+ # Root cause: smoke fell through to the generic `else` branch and inherited
1140
+ # the #2169 `Monitor` grant meant for *work*-shaped legs. `Monitor` is an
1141
+ # await-a-notification tool — calling it ends the current turn to wait for a
1142
+ # wake-up condition, which only resumes anything in an INTERACTIVE session.
1143
+ # Every coord leg, smoke included, is a one-shot `claude -p` session (#1394):
1144
+ # ending the turn ends the session itself, permanently, before any
1145
+ # notification can arrive. Two real smoke legs did exactly this — reached
1146
+ # `Monitor` via ToolSearch to poll a backgrounded `cargo test`, ended their
1147
+ # turn to "wait" for it, and died 16-24s later with no verdict printed, while
1148
+ # the backgrounded suite was reaped out from under them ~30s after that.
1149
+
1150
+
1151
+ def _smoke_spec(**overrides) -> AssignmentSpec:
1152
+ base = dict(
1153
+ repo_name="api",
1154
+ repo_path="/tmp/repo",
1155
+ issue_number=2301,
1156
+ issue_title="[smoke] t",
1157
+ briefing="b",
1158
+ branch="main",
1159
+ type="smoke",
1160
+ )
1161
+ base.update(overrides)
1162
+ return AssignmentSpec(**base)
1163
+
1164
+
1165
+ def test_default_worker_command_smoke_type_does_not_grant_monitor() -> None:
1166
+ argv = default_worker_command(_smoke_spec())
1167
+ allowed = argv[argv.index("--allowedTools") + 1].split(",")
1168
+ assert "Monitor" not in allowed
1169
+
1170
+
1171
+ def test_default_worker_command_smoke_type_gets_read_bash_only() -> None:
1172
+ """A smoke leg validates; it never mutates — no Edit/Write either."""
1173
+ argv = default_worker_command(_smoke_spec())
1174
+ allowed = argv[argv.index("--allowedTools") + 1]
1175
+ assert allowed == "Read,Bash"
1176
+
1177
+
1178
+ def test_default_worker_command_smoke_type_uses_smoke_system_prompt() -> None:
1179
+ """Confirms the smoke branch's default system prompt is
1180
+ coord.smoke.SMOKE_SYSTEM_PROMPT, not the generic WORKER_SYSTEM_PROMPT
1181
+ the old fall-through `else` branch would have used."""
1182
+ from coord.smoke import SMOKE_SYSTEM_PROMPT
1183
+
1184
+ argv = default_worker_command(_smoke_spec())
1185
+ system_prompt = argv[argv.index("--system-prompt") + 1]
1186
+ assert system_prompt.startswith(SMOKE_SYSTEM_PROMPT)
1187
+
1188
+
1189
+ def test_default_worker_command_smoke_type_honours_explicit_system_prompt() -> None:
1190
+ argv = default_worker_command(_smoke_spec(system_prompt="custom smoke prompt"))
1191
+ system_prompt = argv[argv.index("--system-prompt") + 1]
1192
+ assert system_prompt.startswith("custom smoke prompt")
1193
+
1194
+
1137
1195
  # ── #1315: structural sealing enforcement (write-guard) ─────────────────────
1138
1196
 
1139
1197
 
@@ -4350,6 +4408,111 @@ class TestCapabilityGates:
4350
4408
  assert final.status == ADVISORY
4351
4409
  server.shutdown()
4352
4410
 
4411
+ def test_stdin_closed_after_spawn_when_provider_inject_is_false(
4412
+ self, tmp_path: Path
4413
+ ) -> None:
4414
+ """#2306: a provider with capabilities().inject=False (e.g. opencode,
4415
+ which takes its briefing on argv, not stdin) must have its stdin
4416
+ pipe closed right after the initial (possibly empty) write.
4417
+
4418
+ Before the fix, stdin was held open for the process's entire
4419
+ lifetime regardless of provider. A worker that never writes to or
4420
+ reads more from stdin itself (opencode) then blocked forever on its
4421
+ own read of an unclosed pipe that would never see EOF, and was
4422
+ killed by the 600s TTFT watchdog having emitted zero bytes. ``cat``
4423
+ reproduces that shape exactly: it blocks reading stdin until EOF.
4424
+ With stdin closed after the initial write, ``cat`` sees EOF
4425
+ immediately and the assignment finishes well within the test
4426
+ timeout instead of hanging.
4427
+ """
4428
+ repo = _init_repo(tmp_path / "repo")
4429
+ no_inject_provider = _make_provider(
4430
+ inject=False,
4431
+ # argv-only briefing (like opencode) — nothing more is ever
4432
+ # written to stdin by the harness for this provider.
4433
+ build_argv=["/bin/sh", "-c", "cat >/dev/null; echo done"],
4434
+ initial_input_bytes=b"",
4435
+ )
4436
+ server = AgentServer(
4437
+ machine_name="test",
4438
+ repos=["api"],
4439
+ state_dir=tmp_path / "state",
4440
+ repo_paths={"api": str(repo)},
4441
+ providers={"no-inject": no_inject_provider},
4442
+ )
4443
+ a = server.assign(_spec(repo, provider="no-inject"))
4444
+ # The Popen object is available synchronously once assign() returns
4445
+ # for the non-PTY, no-pull path used here.
4446
+ proc = server._processes.get(a.id)
4447
+ assert proc is not None, "process not recorded"
4448
+ assert proc.stdin is not None and proc.stdin.closed, (
4449
+ "stdin must be closed immediately after spawn for a provider "
4450
+ "with capabilities().inject=False"
4451
+ )
4452
+ # And the worker actually completes — proof the closed pipe gave it
4453
+ # an EOF rather than leaving it to hang until the watchdog kills it.
4454
+ final = server.wait_for(a.id, timeout=5)
4455
+ assert final.status == ADVISORY # no commits made
4456
+ server.shutdown()
4457
+
4458
+ def test_stdin_left_open_after_spawn_when_provider_inject_is_true(
4459
+ self, tmp_path: Path
4460
+ ) -> None:
4461
+ """#2306 regression guard: a provider with capabilities().inject=True
4462
+ (e.g. ClaudeProvider) must still have its stdin left open after
4463
+ spawn — this is the behaviour ``inject_message`` depends on, and it
4464
+ must be bit-for-bit unchanged by the #2306 fix."""
4465
+ repo = _init_repo(tmp_path / "repo")
4466
+ inject_provider = _make_provider(
4467
+ inject=True,
4468
+ build_argv=["/bin/sh", "-c", "read a; read b; echo $b"],
4469
+ )
4470
+ server = AgentServer(
4471
+ machine_name="test",
4472
+ repos=["api"],
4473
+ state_dir=tmp_path / "state",
4474
+ repo_paths={"api": str(repo)},
4475
+ providers={"yes-inject": inject_provider},
4476
+ )
4477
+ a = server.assign(_spec(repo, provider="yes-inject"))
4478
+ proc = server._processes.get(a.id)
4479
+ assert proc is not None, "process not recorded"
4480
+ assert proc.stdin is not None and not proc.stdin.closed, (
4481
+ "stdin must stay open after spawn for a provider with "
4482
+ "capabilities().inject=True"
4483
+ )
4484
+ # inject_message must still work over that open pipe.
4485
+ server.inject_message(a.id, "injected")
4486
+ final = server.wait_for(a.id, timeout=5)
4487
+ assert final.status == ADVISORY
4488
+ server.shutdown()
4489
+
4490
+ def test_stdin_left_open_after_spawn_on_legacy_no_provider_path(
4491
+ self, tmp_path: Path
4492
+ ) -> None:
4493
+ """#2306: when spec.provider is None, ``_spawn`` takes the legacy
4494
+ path where ``provider_obj`` is ``None``. That must be treated as
4495
+ claude/inject-capable (stdin left open), matching
4496
+ ``inject_message``'s existing "no provider info => allow" fallback
4497
+ — not closed, which would regress every no-config deployment."""
4498
+ repo = _init_repo(tmp_path / "repo")
4499
+ server = _server(
4500
+ tmp_path,
4501
+ argv=["/bin/sh", "-c", "read a; read b; echo $b"],
4502
+ repo_path=repo,
4503
+ )
4504
+ a = server.assign(_spec(repo)) # no provider → legacy path
4505
+ proc = server._processes.get(a.id)
4506
+ assert proc is not None, "process not recorded"
4507
+ assert proc.stdin is not None and not proc.stdin.closed, (
4508
+ "stdin must stay open after spawn on the legacy (provider_obj "
4509
+ "is None) path"
4510
+ )
4511
+ server.inject_message(a.id, "injected")
4512
+ final = server.wait_for(a.id, timeout=5)
4513
+ assert final.status == ADVISORY
4514
+ server.shutdown()
4515
+
4353
4516
 
4354
4517
  # ── #452: Completed-assignment history cap ─────────────────────────────────────
4355
4518
 
@@ -242,6 +242,52 @@ def test_custom_binary() -> None:
242
242
  assert result[0] == "my-claude"
243
243
 
244
244
 
245
+ # ── #2301: the smoke branch, across every call site of the same logic ────────
246
+
247
+
248
+ def test_claude_build_command_smoke_matches_legacy_and_withholds_monitor() -> None:
249
+ """#2301: ``spec.type == "smoke"`` gets ``SMOKE_SYSTEM_PROMPT`` and
250
+ ``Read,Bash`` only.
251
+
252
+ ``Monitor`` is deliberately withheld: it is an await-a-notification tool,
253
+ so calling it ends the turn — and a smoke leg is a one-shot ``claude -p``
254
+ session (#1394), where ending the turn ends the session permanently,
255
+ before any wake-up can arrive. Edit/Write are withheld too (a smoke leg
256
+ validates; it never mutates). This must stay in parity with
257
+ ``default_worker_command`` — the same logic lives at three call sites and
258
+ #2169 already shipped a drift where only some were updated.
259
+ """
260
+ from coord.smoke import SMOKE_SYSTEM_PROMPT
261
+
262
+ spec = _make_spec(type="smoke")
263
+ argv = ClaudeProvider().build_command(spec)
264
+ legacy = default_worker_command(spec)
265
+ sp = argv[argv.index("--system-prompt") + 1]
266
+ at = argv[argv.index("--allowedTools") + 1]
267
+ assert sp == legacy[legacy.index("--system-prompt") + 1]
268
+ assert at == legacy[legacy.index("--allowedTools") + 1]
269
+ # Pin the values too, so a *matched* regression on both sides still fails.
270
+ assert sp.startswith(SMOKE_SYSTEM_PROMPT)
271
+ assert at == "Read,Bash"
272
+ assert "Monitor" not in at.split(",")
273
+
274
+
275
+ def test_claude_build_command_smoke_honours_explicit_system_prompt() -> None:
276
+ """#2301: the smoke branch still respects ``spec.system_prompt`` (the
277
+ dispatcher's per-run prompt) instead of always forcing the default."""
278
+ argv = ClaudeProvider().build_command(
279
+ _make_spec(type="smoke", system_prompt="custom smoke prompt")
280
+ )
281
+ assert argv[argv.index("--system-prompt") + 1].startswith("custom smoke prompt")
282
+
283
+
284
+ def test_claude_build_command_work_still_grants_monitor() -> None:
285
+ """Scope check for #2301: withholding Monitor from smoke must not have
286
+ taken it away from the generic worker branch (#2169's grant)."""
287
+ argv = ClaudeProvider().build_command(_make_spec(type="work"))
288
+ assert "Monitor" in argv[argv.index("--allowedTools") + 1].split(",")
289
+
290
+
245
291
  # ── #1706: definition model / env / extra_args threading ──────────────────────
246
292
 
247
293
 
@@ -199,7 +199,7 @@ def test_pty_build_command_branches_match_claude_for_plan_type() -> None:
199
199
  assert argv[argv.index("--allowedTools") + 1] == legacy_at
200
200
 
201
201
 
202
- @pytest.mark.parametrize("spec_type", ["work", "review", "smoke", "conflict-fix", "fix"])
202
+ @pytest.mark.parametrize("spec_type", ["work", "review", "conflict-fix", "fix"])
203
203
  def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -> None:
204
204
  """#2169: the generic-worker (``else``) branch must stay in parity too.
205
205
 
@@ -210,6 +210,12 @@ def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -
210
210
  system-prompt/allowed-tools logic and must not drift from it — this
211
211
  regression-guards the drift where only two of the three call sites
212
212
  were updated to add ``Monitor``.
213
+
214
+ ``smoke`` used to be parametrized here because it fell through the same
215
+ ``else`` branch; #2301 gave it a branch of its own, so its parity is
216
+ guarded by
217
+ :func:`test_pty_build_command_smoke_branch_matches_claude_and_withholds_monitor`
218
+ below instead.
213
219
  """
214
220
  spec = _make_spec(type=spec_type)
215
221
  argv = ClaudePtyProvider().build_command(spec)
@@ -221,6 +227,45 @@ def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -
221
227
  assert "Monitor" in argv[argv.index("--allowedTools") + 1]
222
228
 
223
229
 
230
+ def test_pty_build_command_smoke_branch_matches_claude_and_withholds_monitor() -> None:
231
+ """#2301: the smoke branch is the *third* call site of the same logic.
232
+
233
+ ``default_worker_command`` and ``ClaudeProvider.build_command`` both give
234
+ ``spec.type == "smoke"`` its own branch — ``SMOKE_SYSTEM_PROMPT`` plus
235
+ ``Read,Bash`` only, deliberately withholding ``Monitor`` (an await-a-
236
+ notification tool that ends a one-shot ``claude -p`` leg's session before
237
+ any wake-up can arrive) and Edit/Write (a smoke leg validates; it never
238
+ mutates). ``ClaudePtyProvider.build_command`` must not drift from them —
239
+ this regression-guards exactly the drift #2169 hit, where only two of the
240
+ three call sites were updated.
241
+ """
242
+ from coord.smoke import SMOKE_SYSTEM_PROMPT
243
+
244
+ spec = _make_spec(type="smoke")
245
+ argv = ClaudePtyProvider().build_command(spec)
246
+ legacy = default_worker_command(spec)
247
+ legacy_sp = legacy[legacy.index("--system-prompt") + 1]
248
+ legacy_at = legacy[legacy.index("--allowedTools") + 1]
249
+ pty_sp = argv[argv.index("--system-prompt") + 1]
250
+ pty_at = argv[argv.index("--allowedTools") + 1]
251
+ assert pty_sp == legacy_sp
252
+ assert pty_at == legacy_at
253
+ # Pin the values too, so a *matched* regression on both sides still fails.
254
+ assert pty_sp.startswith(SMOKE_SYSTEM_PROMPT)
255
+ assert pty_at == "Read,Bash"
256
+ assert "Monitor" not in pty_at.split(",")
257
+
258
+
259
+ def test_pty_build_command_smoke_honours_explicit_system_prompt() -> None:
260
+ """#2301: the new smoke branch must still respect ``spec.system_prompt``
261
+ (the dispatcher's per-run briefing prompt) rather than always forcing
262
+ ``SMOKE_SYSTEM_PROMPT`` — same precedence as every other branch."""
263
+ argv = ClaudePtyProvider().build_command(
264
+ _make_spec(type="smoke", system_prompt="custom smoke prompt")
265
+ )
266
+ assert argv[argv.index("--system-prompt") + 1].startswith("custom smoke prompt")
267
+
268
+
224
269
  # ── ClaudePtyProvider: capabilities ──────────────────────────────────────────
225
270
 
226
271
 
@@ -474,6 +474,45 @@ def test_smoke_system_prompt_tells_the_worker_to_poll_a_backgrounded_run() -> No
474
474
  assert not any(line.startswith("SMOKE:") for line in prompt.splitlines())
475
475
 
476
476
 
477
+ # ── #2301: Monitor is an await-a-notification tool — it ends a headless leg ─
478
+
479
+
480
+ def test_smoke_system_prompt_does_not_recommend_monitor_for_polling() -> None:
481
+ """#2272's own fix text used to name `Monitor` as a sanctioned polling
482
+ option alongside `BashOutput`/`TaskOutput`. Two real smoke legs took that
483
+ literally on 2026-08-15: reached `Monitor` via ToolSearch, called it to
484
+ "wait" for a backgrounded `cargo test`, and ended their turn — which IS
485
+ the end of a one-shot `claude -p` session (#1394). Both legs died in
486
+ 16-24s, before the suite even finished compiling, with no verdict ever
487
+ printed; the backgrounded suite was reaped ~30s later by the coordinator.
488
+ `Monitor` must not appear as a recommended polling tool in this prompt
489
+ any more — `BashOutput`/`TaskOutput` still do the job without ending the
490
+ turn."""
491
+ prompt = SMOKE_SYSTEM_PROMPT
492
+ assert "BashOutput" in prompt
493
+ assert "TaskOutput" in prompt
494
+ # The old phrasing offered Monitor as an alternative poll mechanism
495
+ # ("...with the id, or `Monitor`)") right next to BashOutput/TaskOutput
496
+ # — that specific recommendation must be gone.
497
+ assert "or `Monitor`" not in prompt
498
+
499
+
500
+ def test_smoke_system_prompt_states_monitor_ends_a_headless_session() -> None:
501
+ """Positive statement, not just an absence: the prompt must explain WHY
502
+ Monitor (and tools like it) are wrong here, or the next worker reaches
503
+ for it again under a different name — mirrors the #2158 lesson that
504
+ WORKER_SYSTEM_PROMPT's ONE-SHOT section bakes in for work legs."""
505
+ prompt = SMOKE_SYSTEM_PROMPT
506
+ assert "#2301" in prompt
507
+ assert "Monitor" in prompt
508
+ lowered = prompt.lower()
509
+ assert "await-a-notification" in lowered
510
+ assert "one-shot" in lowered
511
+ # The actual mechanism, not just "don't do this": ending the turn to
512
+ # await a notification ends the whole headless session, permanently.
513
+ assert "ending your turn ends the session itself" in lowered
514
+
515
+
477
516
  def test_briefing_tells_the_worker_to_poll_a_backgrounded_run() -> None:
478
517
  """The briefing carries the same instruction as the system prompt — it is
479
518
  what the worker re-reads while deciding what to do next."""
@@ -124,15 +124,30 @@ def test_default_worker_command_grants_monitor_for_work_type() -> None:
124
124
  assert tool in allowed.split(",")
125
125
 
126
126
 
127
- @pytest.mark.parametrize("spec_type", ["review", "fix", "smoke", "conflict-fix"])
127
+ @pytest.mark.parametrize("spec_type", ["review", "fix", "conflict-fix"])
128
128
  def test_default_worker_command_other_write_types_also_get_monitor(spec_type: str) -> None:
129
- """`review`/`fix`/`smoke`/`conflict-fix` all fall through the same `else`
130
- branch as `work` — confirm the grant isn't accidentally work-only."""
129
+ """`review`/`fix`/`conflict-fix` all fall through the same `else` branch
130
+ as `work` — confirm the grant isn't accidentally work-only.
131
+
132
+ `smoke` used to be in this list too, but #2301 gave it its own branch
133
+ (see test_default_worker_command_smoke_type_withholds_monitor below) —
134
+ smoke legs are one-shot sessions where an await-a-notification tool
135
+ like `Monitor` ends the session before any wake-up can arrive."""
131
136
  argv = default_worker_command(_work_spec(type=spec_type))
132
137
  allowed = argv[argv.index("--allowedTools") + 1]
133
138
  assert "Monitor" in allowed.split(",")
134
139
 
135
140
 
141
+ def test_default_worker_command_smoke_type_withholds_monitor() -> None:
142
+ """#2301: a smoke leg is a one-shot `claude -p` session (#1394) — calling
143
+ `Monitor` there ends the session permanently before any notification can
144
+ arrive, silently killing a backgrounded smoke suite mid-run. Smoke must
145
+ not hold Monitor, or Edit/Write (it validates; it never mutates)."""
146
+ argv = default_worker_command(_work_spec(type="smoke"))
147
+ allowed = argv[argv.index("--allowedTools") + 1]
148
+ assert allowed == "Read,Bash"
149
+
150
+
136
151
  def test_mock_author_type_does_not_gain_monitor() -> None:
137
152
  """Scope check: the Monitor grant is deliberately added to the generic
138
153
  worker branch only, not copy-pasted onto every Edit-capable type."""