code-coordinator 0.5.116__tar.gz → 0.5.118__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 (846) hide show
  1. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent.py +161 -3
  5. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/agents/work.md +34 -0
  6. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/agent_ops.py +6 -3
  7. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent.py +274 -7
  8. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers.py +188 -0
  9. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.gitignore +0 -0
  24. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/GOAL.md +0 -0
  26. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/LICENSE +0 -0
  27. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/README.md +0 -0
  29. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/block_log.py +0 -0
  46. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_bool_guard.py +0 -0
  47. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_service.py +0 -0
  48. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_wire.py +0 -0
  49. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/brain.py +0 -0
  50. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/branch_model.py +0 -0
  51. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/bug_intake.py +0 -0
  52. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/cargo_cache.py +0 -0
  53. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/ci_github.py +0 -0
  54. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/ci_store.py +0 -0
  55. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/claim.py +0 -0
  56. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/cli.py +0 -0
  57. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/client.py +0 -0
  58. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/__init__.py +0 -0
  59. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/_common.py +0 -0
  60. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/acceptance.py +0 -0
  61. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/audit.py +0 -0
  62. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/chat.py +0 -0
  63. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/dispatch.py +0 -0
  64. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/dispatch_workers.py +0 -0
  65. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/drive.py +0 -0
  66. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/drive_queue.py +0 -0
  67. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/gate_a.py +0 -0
  68. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/gates.py +0 -0
  69. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/issues.py +0 -0
  70. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/lifecycle.py +0 -0
  71. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/merge.py +0 -0
  72. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/milestone.py +0 -0
  73. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/plan_followup.py +0 -0
  74. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/plans.py +0 -0
  75. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/portal.py +0 -0
  76. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/release.py +0 -0
  77. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/repo.py +0 -0
  78. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/report.py +0 -0
  79. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/review.py +0 -0
  80. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/scorecard.py +0 -0
  81. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/sessions.py +0 -0
  82. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/setup.py +0 -0
  83. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/status.py +0 -0
  84. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/terminal.py +0 -0
  85. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/test_gate.py +0 -0
  86. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/tui.py +0 -0
  87. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/comments.py +0 -0
  88. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/config.py +0 -0
  89. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/config_reload.py +0 -0
  90. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/conflict_fix.py +0 -0
  91. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dao.py +0 -0
  92. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/__init__.py +0 -0
  93. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/fixture.py +0 -0
  94. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/index.html +0 -0
  95. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/server.py +0 -0
  96. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/terminal.py +0 -0
  97. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/.gitignore +0 -0
  98. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/components.json +0 -0
  99. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  100. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  101. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  102. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  103. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  104. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  105. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  106. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  107. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  108. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/index.html +0 -0
  109. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  110. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/sw.js +0 -0
  111. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  112. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  113. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  114. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  115. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  116. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  117. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  118. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  119. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  120. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  121. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/eslint.config.js +0 -0
  122. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/index.html +0 -0
  123. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  124. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/package-lock.json +0 -0
  125. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/package.json +0 -0
  126. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  127. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/playwright.config.ts +0 -0
  128. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/postcss.config.js +0 -0
  129. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  130. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  131. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  132. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/App.tsx +0 -0
  133. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/api/client.ts +0 -0
  134. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  135. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  136. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  137. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  138. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  139. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  140. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  141. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  142. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  143. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  144. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  145. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  146. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  147. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  148. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  149. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  150. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  151. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  152. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  153. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  154. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  155. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  156. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  157. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  158. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  159. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  160. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  161. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  162. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  163. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  164. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  165. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  166. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  167. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  168. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  169. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/index.css +0 -0
  170. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  171. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  172. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/main.tsx +0 -0
  173. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  174. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  175. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  176. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  177. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  178. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  179. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  180. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  181. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  182. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  183. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  184. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  185. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  186. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  187. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  188. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  189. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  190. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  191. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  192. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  193. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  194. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  195. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  196. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tailwind.config.js +0 -0
  197. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tsconfig.json +0 -0
  198. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  199. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/vite.config.ts +0 -0
  200. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/db.py +0 -0
  201. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dead_end.py +0 -0
  202. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/README.md +0 -0
  203. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-agent.service +0 -0
  204. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.service +0 -0
  205. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.sh +0 -0
  206. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.timer +0 -0
  207. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-drive-queue.service +0 -0
  208. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-drive-queue.timer +0 -0
  209. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-notify.service +0 -0
  210. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-notify.timer +0 -0
  211. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-propagate.service +0 -0
  212. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-propagate.timer +0 -0
  213. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-window.service +0 -0
  214. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-window.timer +0 -0
  215. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-serve.service +0 -0
  216. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web-dist-build.service +0 -0
  217. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web-dist-build.timer +0 -0
  218. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web.service +0 -0
  219. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy_manifest.py +0 -0
  220. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy_units.py +0 -0
  221. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deps.py +0 -0
  222. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/diagnose.py +0 -0
  223. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dispatch.py +0 -0
  224. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dist_name.py +0 -0
  225. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive.py +0 -0
  226. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive_queue.py +0 -0
  227. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive_state.py +0 -0
  228. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/events.py +0 -0
  229. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/failure_class.py +0 -0
  230. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/filelock.py +0 -0
  231. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/fleet_config_health.py +0 -0
  232. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/freshness.py +0 -0
  233. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_a.py +0 -0
  234. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_b.py +0 -0
  235. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_snapshot.py +0 -0
  236. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gates.py +0 -0
  237. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/github_ops.py +0 -0
  238. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/goal.py +0 -0
  239. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/graph_health.py +0 -0
  240. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/__init__.py +0 -0
  241. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/aggregate.py +0 -0
  242. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/__init__.py +0 -0
  243. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/agent_install.py +0 -0
  244. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/cargo_targets.py +0 -0
  245. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/claude_binary.py +0 -0
  246. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/deploy_lane_facts.py +0 -0
  247. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/disk.py +0 -0
  248. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_board.py +0 -0
  249. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  250. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_phantom.py +0 -0
  251. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_unit_drift.py +0 -0
  252. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/graph.py +0 -0
  253. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/graphify_cli.py +0 -0
  254. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/index_lock.py +0 -0
  255. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/plan_usage.py +0 -0
  256. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/repo_state.py +0 -0
  257. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/spawned_coord.py +0 -0
  258. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/timer_active.py +0 -0
  259. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/toolchain.py +0 -0
  260. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/unit_drift.py +0 -0
  261. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/unit_enablement.py +0 -0
  262. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/worktrees.py +0 -0
  263. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/cli.py +0 -0
  264. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/context.py +0 -0
  265. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/fleet_snapshot.py +0 -0
  266. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/models.py +0 -0
  267. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/pypi.py +0 -0
  268. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/registry.py +0 -0
  269. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/render.py +0 -0
  270. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/units.py +0 -0
  271. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/hooks.py +0 -0
  272. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/housekeeping.py +0 -0
  273. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/interactive.py +0 -0
  274. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/issue_store.py +0 -0
  275. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/liveness_auditor.py +0 -0
  276. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/machine_pause.py +0 -0
  277. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/merge_queue.py +0 -0
  278. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_chat.py +0 -0
  279. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_dispatch.py +0 -0
  280. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_gate.py +0 -0
  281. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_order.py +0 -0
  282. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/mock_author.py +0 -0
  283. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/models.py +0 -0
  284. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/network.py +0 -0
  285. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/new_issue_chat.py +0 -0
  286. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/__init__.py +0 -0
  287. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/baseline.py +0 -0
  288. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/cli.py +0 -0
  289. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/collect.py +0 -0
  290. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/digest.py +0 -0
  291. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/models.py +0 -0
  292. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/predicate.py +0 -0
  293. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/service.py +0 -0
  294. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/store.py +0 -0
  295. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/transport.py +0 -0
  296. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notify.py +0 -0
  297. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/openapi.py +0 -0
  298. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/overlap_fence.py +0 -0
  299. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/overlap_predict.py +0 -0
  300. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/parentage.py +0 -0
  301. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/parentage_github.py +0 -0
  302. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/pipeline.py +0 -0
  303. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/plan_parser.py +0 -0
  304. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/plans.py +0 -0
  305. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/platform_paths.py +0 -0
  306. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_bridge.py +0 -0
  307. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_store.py +0 -0
  308. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_sync.py +0 -0
  309. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/pr_body_lint.py +0 -0
  310. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/prereqs.py +0 -0
  311. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/progress.py +0 -0
  312. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/__init__.py +0 -0
  313. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/base.py +0 -0
  314. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/claude.py +0 -0
  315. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/claude_pty.py +0 -0
  316. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/opencode.py +0 -0
  317. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/queue_diagnose.py +0 -0
  318. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/reconcile.py +0 -0
  319. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/refine_chat.py +0 -0
  320. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_cordon.py +0 -0
  321. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_propagate.py +0 -0
  322. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_verify.py +0 -0
  323. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_window.py +0 -0
  324. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/repo_edit.py +0 -0
  325. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/repo_onboard.py +0 -0
  326. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/reports.py +0 -0
  327. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/revalidate.py +0 -0
  328. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/review.py +0 -0
  329. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/scorecard.py +0 -0
  330. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/serve_app.py +0 -0
  331. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/skills/update-issue/SKILL.md +0 -0
  332. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/smoke.py +0 -0
  333. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/spend_ceiling.py +0 -0
  334. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/split_work.py +0 -0
  335. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/stage_projection.py +0 -0
  336. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/state.py +0 -0
  337. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_author.py +0 -0
  338. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_chat.py +0 -0
  339. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_orchestrator.py +0 -0
  340. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_report.py +0 -0
  341. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/tui_release.py +0 -0
  342. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage.py +0 -0
  343. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage_limits.py +0 -0
  344. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage_rollup.py +0 -0
  345. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/worker_events.py +0 -0
  346. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coordinator.example.yml +0 -0
  347. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-agent.service +0 -0
  348. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.service +0 -0
  349. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.sh +0 -0
  350. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.timer +0 -0
  351. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-drive-queue.service +0 -0
  352. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-drive-queue.timer +0 -0
  353. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-notify.service +0 -0
  354. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-notify.timer +0 -0
  355. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-propagate.service +0 -0
  356. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-propagate.timer +0 -0
  357. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-window.service +0 -0
  358. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-window.timer +0 -0
  359. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-serve.service +0 -0
  360. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.service +0 -0
  361. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.sh +0 -0
  362. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.timer +0 -0
  363. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-rollback.sh +0 -0
  364. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web.service +0 -0
  365. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/node-shim.sh +0 -0
  366. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/AGENT_OPERATIONS.md +0 -0
  367. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ARCHITECTURE.md +0 -0
  368. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ARCH_SECURITY_GATES.md +0 -0
  369. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/COCKPIT.md +0 -0
  370. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CONTROL_CENTER.md +0 -0
  371. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/COST_DISCIPLINE.md +0 -0
  372. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CROSS_PLATFORM.md +0 -0
  373. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CUSTOMER_PORTAL.md +0 -0
  374. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/DRIVE_QUEUE.md +0 -0
  375. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/EPHEMERAL_WORKERS.md +0 -0
  376. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/FORGE_MIGRATION.md +0 -0
  377. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/GRAPHIFY_SETUP.md +0 -0
  378. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ISSUE_GUIDANCE.md +0 -0
  379. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/MAC_MINI.md +0 -0
  380. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  381. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/NOTIFIER.md +0 -0
  382. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/OPENCODE_VERIFICATION.md +0 -0
  383. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/OPERATING_GOTCHAS.md +0 -0
  384. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ORACLE_LOOP.md +0 -0
  385. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PHONE_WEBAPP.md +0 -0
  386. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PIPELINE_V2.md +0 -0
  387. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PLATFORM_EVOLUTION.md +0 -0
  388. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/SECOND_BACKEND.md +0 -0
  389. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/STORE_SERVICE.md +0 -0
  390. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  391. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/WEB_CONTROL_CENTER.md +0 -0
  392. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/README.md +0 -0
  393. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/_tokens.css +0 -0
  394. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/issue-detail.html +0 -0
  395. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/pipeline-narrow.html +0 -0
  396. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/pipeline-wide.html +0 -0
  397. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/graphify-out/.gitignore +0 -0
  398. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/install-agent.sh +0 -0
  399. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/pyproject.toml +0 -0
  400. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/audit_review_verdict_overrides.py +0 -0
  401. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  402. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/build-worker-image.sh +0 -0
  403. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/coordinator-machine.py +0 -0
  404. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/epic-down.sh +0 -0
  405. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/epic-up.sh +0 -0
  406. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/preflight.sh +0 -0
  407. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/provision-worker.sh +0 -0
  408. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  409. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  410. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/verify-github-token.sh +0 -0
  411. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/codegen.py +0 -0
  412. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/coord-test-runner.sh +0 -0
  413. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/drive-batch.sh +0 -0
  414. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/gen_board_fixture.py +0 -0
  415. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/next_release_tag.py +0 -0
  416. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/run_tests_in_populated_home.sh +0 -0
  417. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/run_tests_without_gh.sh +0 -0
  418. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/smoke_437_interactive.py +0 -0
  419. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_878_review_capture.py +0 -0
  420. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_release_published.py +0 -0
  421. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_release_wheel.py +0 -0
  422. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/setup.cfg +0 -0
  423. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/SMOKE_SET.md +0 -0
  424. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/__init__.py +0 -0
  425. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  426. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/contract.md +0 -0
  427. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/manifest.yml +0 -0
  428. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  429. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  430. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  431. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  432. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/conftest.py +0 -0
  433. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/contract.md +0 -0
  434. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/manifest.yml +0 -0
  435. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  436. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  437. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/contract.md +0 -0
  438. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/manifest.yml +0 -0
  439. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  440. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  441. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  442. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  443. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  444. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  445. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  446. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  447. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  448. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  449. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/contract.md +0 -0
  450. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  451. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  452. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/manifest.yml +0 -0
  453. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  454. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/tsconfig.json +0 -0
  455. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  456. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/conftest.py +0 -0
  457. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/board-pipeline-basic.json +0 -0
  458. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  459. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  460. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  461. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  462. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/all_pass.json +0 -0
  463. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  464. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/mixed_fail.json +0 -0
  465. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  466. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  467. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/skip.json +0 -0
  468. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/truncated.json +0 -0
  469. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  470. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  471. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  472. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  473. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  474. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  475. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  476. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  477. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_acceptance.py +0 -0
  478. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_acceptance_drivers.py +0 -0
  479. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_api_error.py +0 -0
  480. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_app.py +0 -0
  481. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_branch_base.py +0 -0
  482. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_branch_capture.py +0 -0
  483. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_config_free_1712.py +0 -0
  484. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_deploy_units_endpoint.py +0 -0
  485. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_dirty_worktree.py +0 -0
  486. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_graph_self_heal.py +0 -0
  487. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_health_h3.py +0 -0
  488. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_idle_restart.py +0 -0
  489. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_push_failure.py +0 -0
  490. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_reap.py +0 -0
  491. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_repos_and_pull.py +0 -0
  492. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_restart_services_endpoint.py +0 -0
  493. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_startup_diagnostics.py +0 -0
  494. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_update.py +0 -0
  495. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_update_bluegreen.py +0 -0
  496. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_usage_limit.py +0 -0
  497. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_zero_commit.py +0 -0
  498. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ambient_home_isolation.py +0 -0
  499. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_approve_reject_plan.py +0 -0
  500. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_approve_usage_gate.py +0 -0
  501. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_assignment_already_recorded_daemon.py +0 -0
  502. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_log.py +0 -0
  503. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_outcome.py +0 -0
  504. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_query.py +0 -0
  505. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_auto_loop.py +0 -0
  506. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_auto_release_publish_2035.py +0 -0
  507. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_block_log.py +0 -0
  509. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_cap_762.py +0 -0
  510. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_fixture.py +0 -0
  511. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_read_path.py +0 -0
  512. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_service.py +0 -0
  513. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_state.py +0 -0
  514. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_wire.py +0 -0
  515. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_brain.py +0 -0
  516. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_branch_model.py +0 -0
  517. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_bug_intake.py +0 -0
  518. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_parity_2091.py +0 -0
  522. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_store.py +0 -0
  523. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_claim.py +0 -0
  524. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_acceptance.py +0 -0
  525. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign.py +0 -0
  526. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  527. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_interactive_remote.py +0 -0
  528. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_provider.py +0 -0
  529. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  530. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_audit.py +0 -0
  531. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_chat_continue.py +0 -0
  532. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor.py +0 -0
  535. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor_config_free_1801.py +0 -0
  536. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  537. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_fix_headless_review.py +0 -0
  541. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_gate_a.py +0 -0
  542. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_install_drift.py +0 -0
  543. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_install_skills.py +0 -0
  544. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_issue_create_label.py +0 -0
  545. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_issue_reopen.py +0 -0
  546. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_merge.py +0 -0
  547. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_assign.py +0 -0
  548. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_capture.py +0 -0
  549. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_chat_add_child.py +0 -0
  550. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_dispatch.py +0 -0
  551. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_gate_b.py +0 -0
  552. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_gate_c.py +0 -0
  553. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_order.py +0 -0
  554. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  555. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_ship.py +0 -0
  556. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_network.py +0 -0
  557. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_new_issue_chat.py +0 -0
  558. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_plans.py +0 -0
  559. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_portal.py +0 -0
  560. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_pull_artifact.py +0 -0
  561. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_queue.py +0 -0
  562. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_reattach_sessions.py +0 -0
  563. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_refine_board.py +0 -0
  564. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_preflight.py +0 -0
  565. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_propagate.py +0 -0
  566. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_window.py +0 -0
  567. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_repo_2220.py +0 -0
  568. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_scorecard.py +0 -0
  569. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_set_review_findings.py +0 -0
  570. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_advisory_terminal.py +0 -0
  571. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_merge_queue.py +0 -0
  572. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_provider.py +0 -0
  573. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_review_finalizing.py +0 -0
  574. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_test_failed_tag.py +0 -0
  575. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_usage_limit.py +0 -0
  576. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_sync_comments_873.py +0 -0
  577. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_test_plan.py +0 -0
  578. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_track.py +0 -0
  579. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_tui_update.py +0 -0
  580. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_wait.py +0 -0
  581. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_client_base_install.py +0 -0
  582. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_comments.py +0 -0
  583. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_completion_summary.py +0 -0
  584. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config.py +0 -0
  585. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_acceptance.py +0 -0
  586. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_audit.py +0 -0
  587. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_pricing.py +0 -0
  588. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  589. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_usage_gate.py +0 -0
  590. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_conflict_fix.py +0 -0
  591. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_conflict_fix_semantic.py +0 -0
  592. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test.py +0 -0
  593. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_baseline.py +0 -0
  594. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_routing.py +0 -0
  595. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_toolchain.py +0 -0
  596. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_web_sse_restart_live.py +0 -0
  597. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coordinator_machine.py +0 -0
  598. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cross_platform_imports.py +0 -0
  599. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard.py +0 -0
  600. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_fixture.py +0 -0
  601. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_terminal.py +0 -0
  602. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_terminal_live.py +0 -0
  603. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_db.py +0 -0
  604. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dead_end.py +0 -0
  605. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_db_backup.py +0 -0
  606. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_web_dist.py +0 -0
  607. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_web_rollback.py +0 -0
  608. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_drive_queue_unit.py +0 -0
  609. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_manifest.py +0 -0
  610. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_units_lane.py +0 -0
  611. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_web_unit.py +0 -0
  612. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deps.py +0 -0
  613. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_diagnose.py +0 -0
  614. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dispatch.py +0 -0
  615. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dispatch_target_validation.py +0 -0
  616. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dist_name.py +0 -0
  617. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_done_housekeeping.py +0 -0
  618. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive.py +0 -0
  619. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_queue.py +0 -0
  620. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_state.py +0 -0
  621. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_tmux.py +0 -0
  622. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_capability_detection.py +0 -0
  623. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  624. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_image_provenance.py +0 -0
  625. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_errors.py +0 -0
  626. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_events.py +0 -0
  627. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_failure_class.py +0 -0
  628. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_filelock.py +0 -0
  629. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  630. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fix_of_force_override.py +0 -0
  631. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_config_health.py +0 -0
  632. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_health_probes.py +0 -0
  633. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_health_snapshot.py +0 -0
  634. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_freshness.py +0 -0
  635. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_a.py +0 -0
  636. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_b.py +0 -0
  637. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_snapshot_staleness.py +0 -0
  638. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gates.py +0 -0
  639. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  640. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_generated_types_fixture.py +0 -0
  641. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_github_ops.py +0 -0
  642. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_goal.py +0 -0
  643. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_graph_health.py +0 -0
  644. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_graph_selfheal_absent_2237.py +0 -0
  645. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_handoff.py +0 -0
  646. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_checks.py +0 -0
  647. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_cli.py +0 -0
  648. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_cli_graph.py +0 -0
  649. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_config.py +0 -0
  650. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_context.py +0 -0
  651. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_deploy_lane_facts.py +0 -0
  652. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_incident_regression.py +0 -0
  653. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_pypi.py +0 -0
  654. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_registry.py +0 -0
  655. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_timer_active.py +0 -0
  656. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_toolchain.py +0 -0
  657. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_unit_drift.py +0 -0
  658. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_unit_enablement.py +0 -0
  659. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_hooks.py +0 -0
  660. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_human_attended_437.py +0 -0
  661. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_init.py +0 -0
  662. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_integration.py +0 -0
  663. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_briefing_echo.py +0 -0
  664. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_prefill_state.py +0 -0
  665. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_session_relaunch.py +0 -0
  666. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_test_verdict_backstop.py +0 -0
  667. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_token_attribution.py +0 -0
  668. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_worktree.py +0 -0
  669. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_issue_store_seam.py +0 -0
  670. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_liveness_auditor.py +0 -0
  671. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_liveness_notify.py +0 -0
  672. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_machine_pause.py +0 -0
  673. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_merge_queue.py +0 -0
  674. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_merge_verify.py +0 -0
  675. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_chat.py +0 -0
  676. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_dispatch.py +0 -0
  677. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_gate.py +0 -0
  678. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_order.py +0 -0
  679. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_seam.py +0 -0
  680. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_mock_author.py +0 -0
  681. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_model_tiering.py +0 -0
  682. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_models.py +0 -0
  683. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_models_config_labels.py +0 -0
  684. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_needs_attention.py +0 -0
  685. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_network.py +0 -0
  686. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_new_issue_chat.py +0 -0
  687. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_next_release_tag.py +0 -0
  688. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_no_direct_gh_calls.py +0 -0
  689. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_node_shim.py +0 -0
  690. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_baseline.py +0 -0
  691. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_cli.py +0 -0
  692. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_collect.py +0 -0
  693. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_config.py +0 -0
  694. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_drive_seam.py +0 -0
  695. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_isolation.py +0 -0
  696. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_predicate.py +0 -0
  697. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_quiet_hours.py +0 -0
  698. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_service.py +0 -0
  699. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notify.py +0 -0
  700. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notify_drain.py +0 -0
  701. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_openapi.py +0 -0
  702. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_operational_defaults.py +0 -0
  703. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_overlap_fence.py +0 -0
  704. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_overlap_predict.py +0 -0
  705. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_packaged_deploy_units.py +0 -0
  706. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_parentage.py +0 -0
  707. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_paste_landed.py +0 -0
  708. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_pipeline.py +0 -0
  709. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_approve_plan_command.py +0 -0
  710. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_pr_command.py +0 -0
  711. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_review_command.py +0 -0
  712. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_only.py +0 -0
  713. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_parser.py +0 -0
  714. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_platform_paths.py +0 -0
  715. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_bridge.py +0 -0
  716. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_config.py +0 -0
  717. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_sync.py +0 -0
  718. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_pr_body_lint.py +0 -0
  719. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_prereqs.py +0 -0
  720. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_production_db_guard.py +0 -0
  721. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_progress.py +0 -0
  722. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_provider_seam.py +0 -0
  723. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers_config_labels.py +0 -0
  724. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers_pty.py +0 -0
  725. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_quiet_hours.py +0 -0
  726. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_quiet_hours_store_2146.py +0 -0
  727. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reap_merged_sessions.py +0 -0
  728. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reap_stale_interactive_tick.py +0 -0
  729. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile.py +0 -0
  730. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_branch.py +0 -0
  731. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_completions.py +0 -0
  732. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_merges.py +0 -0
  733. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_no_agent_record.py +0 -0
  734. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_usage_limit_done.py +0 -0
  735. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_refine_chat.py +0 -0
  736. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_2101.py +0 -0
  737. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  738. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_deadlock_2240.py +0 -0
  739. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_propagate.py +0 -0
  740. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_edit_2220.py +0 -0
  746. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_graph_fleet_2237.py +0 -0
  747. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_onboard_2220.py +0 -0
  748. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_report_result_push.py +0 -0
  749. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reports.py +0 -0
  750. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry.py +0 -0
  751. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry_advisory_1606.py +0 -0
  752. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry_type_1636.py +0 -0
  753. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_revalidate.py +0 -0
  754. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review.py +0 -0
  755. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_end_review_without_verdict.py +0 -0
  756. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_parse_failure_diagnostic.py +0 -0
  757. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_reaffirm.py +0 -0
  758. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_state.py +0 -0
  759. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_backstop.py +0 -0
  760. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_override_audit.py +0 -0
  761. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_relay.py +0 -0
  762. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_zero_commits.py +0 -0
  763. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_scoped_review_wiring.py +0 -0
  764. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_scorecard.py +0 -0
  765. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_serve.py +0 -0
  766. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_serve_app_board_trim.py +0 -0
  767. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_session.py +0 -0
  768. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_slice_issue_attribution.py +0 -0
  769. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke.py +0 -0
  770. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke_live_checkout_restore.py +0 -0
  771. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke_workflow.py +0 -0
  772. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_spend_ceiling.py +0 -0
  773. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_spend_ceiling_coordinator.py +0 -0
  774. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_split.py +0 -0
  775. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_split_work.py +0 -0
  776. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stage_projection.py +0 -0
  777. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stalled_pipeline.py +0 -0
  778. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_state.py +0 -0
  779. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_state_review_findings_daemon.py +0 -0
  780. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_status_fleet_footer.py +0 -0
  781. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stop_1567.py +0 -0
  782. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stuck.py +0 -0
  783. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_terminal_command.py +0 -0
  784. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_author.py +0 -0
  785. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_chat.py +0 -0
  786. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_orchestrator.py +0 -0
  787. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_report.py +0 -0
  788. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_verdict_parsing.py +0 -0
  789. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_verdict_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_board_audit.py +0 -0
  791. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_config_load_1080.py +0 -0
  792. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_daemon_routing_906.py +0 -0
  793. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_tmux_host.py +0 -0
  794. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_tmux_session.py +0 -0
  795. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage.py +0 -0
  797. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage_limits.py +0 -0
  798. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage_rollup.py +0 -0
  799. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_venv_live_install_2121.py +0 -0
  800. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_version_single_source.py +0 -0
  801. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_watch.py +0 -0
  802. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  803. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_events.py +0 -0
  804. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_image_pin_sync.py +0 -0
  805. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_safety.py +0 -0
  806. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_test_scoping.py +0 -0
  807. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worktree.py +0 -0
  808. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  809. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/Cargo.lock +0 -0
  810. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/Cargo.toml +0 -0
  811. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/cargo-config-local-quadraui.toml.example +0 -0
  812. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/audit.rs +0 -0
  813. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/chat.rs +0 -0
  814. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/data.rs +0 -0
  815. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/dialogs.rs +0 -0
  816. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/drive.rs +0 -0
  817. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/drive_queue.rs +0 -0
  818. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/escalation.rs +0 -0
  819. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/events.rs +0 -0
  820. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fixtures.rs +0 -0
  821. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_health.rs +0 -0
  822. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_sessions.rs +0 -0
  823. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_terminals.rs +0 -0
  824. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/format.rs +0 -0
  825. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/milestone_dag.rs +0 -0
  826. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/mod.rs +0 -0
  827. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/msv.rs +0 -0
  828. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/pipeline.rs +0 -0
  829. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/plans.rs +0 -0
  830. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/render.rs +0 -0
  831. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/reports.rs +0 -0
  832. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/sessions.rs +0 -0
  833. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/settings_ui.rs +0 -0
  834. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/sidebar.rs +0 -0
  835. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/terminal.rs +0 -0
  836. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/tests.rs +0 -0
  837. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/tests/acceptance.rs +0 -0
  845. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/tests/cli.rs +0 -0
  846. {code_coordinator-0.5.116 → code_coordinator-0.5.118}/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.116
3
+ Version: 0.5.118
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.116
3
+ Version: 0.5.118
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.116",
2
+ "tag": "0.5.118",
3
3
  "distance": 0,
4
- "node": "gf24de3d23e8fe5dd6998c12ce6e8fee637f65f25",
4
+ "node": "ga164f2b76c36b1f04ec37e5e170dee3d87ea7c43",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-16"
@@ -4416,9 +4416,26 @@ class AgentServer:
4416
4416
  #: capability that disappears simply stops
4417
4417
  #: attracting new work (degrade) instead of
4418
4418
  #: stranding anything in flight.
4419
+ #: * ``providers`` — #2326: rebuilt from ``providers.definitions``
4420
+ #: at DISPATCH time (``assign()``, before
4421
+ #: ``_resolve_provider``), not on a timer — that
4422
+ #: is the only moment the answer matters. Before
4423
+ #: #2326 this dict was parsed once at startup and
4424
+ #: never invalidated, so an agent with its own
4425
+ #: local ``coordinator.yml`` silently ran on a
4426
+ #: days-stale provider definition (wrong model,
4427
+ #: missing env) even though every coordinator-
4428
+ #: side surface (``coord config``, the daemon's
4429
+ #: own ``build_provider(...)``) showed the edit
4430
+ #: as live. Any provider name in use by a
4431
+ #: PENDING/RUNNING assignment is pinned to its
4432
+ #: pre-reload entry (present or absent) —
4433
+ #: swapping a live worker's provider identity
4434
+ #: mid-flight (model, env, log-parser shape)
4435
+ #: remains forbidden; only the NEXT dispatch
4436
+ #: sees the new definition.
4419
4437
  #:
4420
4438
  #: RESTART-ONLY (documented at their assignment sites in ``__init__``):
4421
- #: * ``providers`` — a live worker holds a resolved provider.
4422
4439
  #: * ``bash_wrap_spawn`` / ``first_output_timeout`` — process tuning.
4423
4440
  #: * bind host/port — uvicorn has already bound the socket.
4424
4441
  _RELOADABLE_FIELDS = (
@@ -4427,6 +4444,7 @@ class AgentServer:
4427
4444
  "artifact_paths",
4428
4445
  "build_commands",
4429
4446
  "capabilities",
4447
+ "providers",
4430
4448
  )
4431
4449
 
4432
4450
  def _maybe_reload_config(self) -> bool:
@@ -4491,6 +4509,40 @@ class AgentServer:
4491
4509
  self._apply_reloaded_config(reloaded, machine)
4492
4510
  return True
4493
4511
 
4512
+ def _rebuild_providers(self, cfg: "Any") -> "dict[str, object] | None":
4513
+ """Build a fresh provider registry from *cfg*'s ``providers.definitions``.
4514
+
4515
+ Mirrors the startup-time loop in
4516
+ ``coord.commands.agent_ops._resolve_agent_startup`` (``build_provider``
4517
+ for every entry), but — unlike startup — must never raise. A typo'd
4518
+ ``providers.definitions`` entry reaching this agent via a hot reload
4519
+ must not take a running daemon down; ``reload_config_if_stale``
4520
+ already applies that same fail-soft contract to a malformed YAML
4521
+ edit, and a config that parses fine but names an unknown provider
4522
+ ``type`` deserves the identical treatment. Returns ``None`` (rather
4523
+ than a partial dict) on any failure, so the caller keeps the
4524
+ entire previous registry until the edit is fixed — matching the
4525
+ "keep last-good config" behaviour for a bad ``coordinator.yml``.
4526
+ """
4527
+ from coord.providers import build_provider # noqa: PLC0415
4528
+
4529
+ fresh: dict[str, object] = {}
4530
+ try:
4531
+ for name, defn in cfg.providers.definitions.items():
4532
+ fresh[name] = build_provider(name, defn, cfg.models)
4533
+ except Exception as exc: # noqa: BLE001 — never let a bad edit kill the agent
4534
+ _log.warning(
4535
+ "coord agent: %s's providers.definitions failed to rebuild "
4536
+ "(%s: %s); keeping the previous provider registry (%s) "
4537
+ "until the edit is fixed",
4538
+ cfg.path,
4539
+ type(exc).__name__,
4540
+ exc,
4541
+ sorted(self._providers) if self._providers else "none configured",
4542
+ )
4543
+ return None
4544
+ return fresh
4545
+
4494
4546
  def _apply_reloaded_config(self, cfg: "Any", machine: "Any") -> None:
4495
4547
  """Swap the reloadable fields in place, pinning anything in flight.
4496
4548
 
@@ -4510,6 +4562,17 @@ class AgentServer:
4510
4562
  advertise *new* work only, so removing a repo correctly means "take no
4511
4563
  more dispatches for it", not "abandon the worker already running".
4512
4564
 
4565
+ #2326: ``providers`` gets the exact same pin treatment, keyed by
4566
+ provider *name* instead of repo name. A provider name in use by a
4567
+ PENDING/RUNNING assignment keeps its pre-reload instance (including
4568
+ absence) — ``_reap`` re-resolves the same ``spec`` after the worker
4569
+ exits (to pick a log parser), and it must get back the SAME provider
4570
+ identity ``assign()``/``_spawn()`` resolved, not one a reload swapped
4571
+ underneath it (different model/env/log-parser shape). Any provider
4572
+ name with no in-flight assignment is free to pick up the new
4573
+ definition immediately — that is the entire point of #2326: the next
4574
+ *dispatch*, not the next restart, sees a config edit.
4575
+
4513
4576
  Every field is *rebound* to a freshly-built list/dict rather than
4514
4577
  mutated in place, so the many unsynchronized readers elsewhere in this
4515
4578
  class (``_servable_repos``, ``_stash_artifacts``, ``assign``, ...) see
@@ -4525,6 +4588,11 @@ class AgentServer:
4525
4588
  new_build_commands: dict[str, str] = {
4526
4589
  r.name: r.build_command for r in cfg.repos if r.build_command
4527
4590
  }
4591
+ # #2326: built outside the lock — `build_provider` is pure
4592
+ # construction (no I/O), but there is no reason to hold `self._lock`
4593
+ # across it. `None` means "rebuild failed, keep the old registry
4594
+ # verbatim" (see `_rebuild_providers`'s docstring).
4595
+ new_providers = self._rebuild_providers(cfg)
4528
4596
 
4529
4597
  def _pin(old: dict, new: dict, keys: "Iterable[str]") -> None:
4530
4598
  """Restore *old*'s entry for each pinned key — including absence."""
@@ -4553,6 +4621,33 @@ class AgentServer:
4553
4621
  self.repo_paths = new_repo_paths
4554
4622
  self.artifact_paths = new_artifact_paths
4555
4623
  self.build_commands = new_build_commands
4624
+
4625
+ providers_added: list[str] = []
4626
+ providers_removed: list[str] = []
4627
+ providers_pinned: list[str] = []
4628
+ if new_providers is not None:
4629
+ in_flight_providers = {
4630
+ a.spec.provider
4631
+ for a in self._assignments.values()
4632
+ if a.status in (PENDING, RUNNING) and a.spec.provider is not None
4633
+ }
4634
+ old_providers = self._providers
4635
+ _pin(old_providers, new_providers, in_flight_providers)
4636
+ # Deliberately NOT trying to report "changed vs unchanged" per
4637
+ # provider: `build_provider` mints a fresh instance every call
4638
+ # and the provider classes carry no value equality, so any such
4639
+ # comparison is really just "was it rebuilt", which is always
4640
+ # true for every non-pinned entry. Report what IS knowable —
4641
+ # the resulting registry, which names appeared/disappeared, and
4642
+ # which kept their pre-reload instance because a PENDING/
4643
+ # RUNNING assignment pinned them.
4644
+ providers_added = [p for p in new_providers if p not in old_providers]
4645
+ providers_removed = [p for p in old_providers if p not in new_providers]
4646
+ providers_pinned = sorted(
4647
+ p for p in in_flight_providers if p in old_providers
4648
+ )
4649
+ self._providers = new_providers
4650
+
4556
4651
  self._health_config = cfg
4557
4652
  self._config_reloads += 1
4558
4653
  self._config_reloaded_at = time.time()
@@ -4565,7 +4660,7 @@ class AgentServer:
4565
4660
 
4566
4661
  _log.info(
4567
4662
  "coord agent: applied config reload from %s — repos=%s "
4568
- "(added=%s removed=%s) capabilities=%s%s",
4663
+ "(added=%s removed=%s) capabilities=%s%s%s",
4569
4664
  getattr(cfg, "path", None),
4570
4665
  new_repos,
4571
4666
  added or "[]",
@@ -4576,6 +4671,17 @@ class AgentServer:
4576
4671
  if in_flight
4577
4672
  else ""
4578
4673
  ),
4674
+ (
4675
+ # #2326: separate clause so a provider-only edit (the #2321
4676
+ # incident this issue describes) shows up even when no repo
4677
+ # changed at all.
4678
+ f" providers={sorted(self._providers)}"
4679
+ f"{f' (added={providers_added})' if providers_added else ''}"
4680
+ f"{f' (removed={providers_removed})' if providers_removed else ''}"
4681
+ f"{f' (pinned in-flight={providers_pinned})' if providers_pinned else ''}"
4682
+ if new_providers is not None
4683
+ else " providers=rebuild failed, kept previous registry"
4684
+ ),
4579
4685
  )
4580
4686
 
4581
4687
  # ── Public API ──────────────────────────────────────────────────────────
@@ -4681,6 +4787,29 @@ class AgentServer:
4681
4787
  "watching": str(watched_config) if watched_config else None,
4682
4788
  "reloads": self._config_reloads,
4683
4789
  "last_reload_at": self._config_reloaded_at,
4790
+ # #2326: this agent's own last-observed mtime of `watching`
4791
+ # (seeded from the file at startup, advanced on every
4792
+ # reload attempt — including a swallowed bad edit, see
4793
+ # `reload_config_if_stale`). `coord status` can diff this
4794
+ # against the coordinator's own mtime for the SAME path to
4795
+ # flag an agent whose config — and therefore whose
4796
+ # `provider_names` below — predates the edit, without
4797
+ # needing to probe `/proc/<pid>/environ` on the worker to
4798
+ # notice (the failure mode that made #2326 a live-process
4799
+ # investigation instead of a one-line `coord status` read).
4800
+ # `None` for a config-free/thin-client agent, same as
4801
+ # `watching`.
4802
+ "config_mtime": self._config_mtime,
4803
+ # #2326: the provider names THIS process would actually
4804
+ # resolve `spec.provider` against right now — i.e. the keys
4805
+ # of `self._providers`, refreshed at dispatch time (see
4806
+ # `_apply_reloaded_config`). Lets `coord status` compare this
4807
+ # list (or `config_mtime` above) against the coordinator's
4808
+ # `providers.definitions` and flag drift directly, instead of
4809
+ # every surface short of the worker's own process agreeing
4810
+ # while the running registry is actually stale — exactly the
4811
+ # split-brain #2326 describes.
4812
+ "provider_names": sorted(self._providers) if self._providers else [],
4684
4813
  },
4685
4814
  }
4686
4815
 
@@ -5940,7 +6069,36 @@ class AgentServer:
5940
6069
  if spec.provider is None:
5941
6070
  return None
5942
6071
  if spec.provider in self._providers:
5943
- return self._providers[spec.provider]
6072
+ local = self._providers[spec.provider]
6073
+ if spec.provider_def is not None:
6074
+ # #2326: step 2 (local override) is winning over a wire
6075
+ # provider_def the coordinator DID send — the precedence is
6076
+ # deliberate (see docstring), but before this the decision
6077
+ # left no trace, which is why a days-stale local registry
6078
+ # silently shadowing a fresh coordinator edit took a live
6079
+ # `/proc/<pid>/environ` probe to catch instead of a log
6080
+ # line. Env keys only (not values) — provider env commonly
6081
+ # carries API keys/tokens, and the point here is "does this
6082
+ # instance carry the key the coordinator's does", not the
6083
+ # secret itself.
6084
+ try:
6085
+ local_env_keys = sorted(local.env()) # type: ignore[attr-defined]
6086
+ except Exception: # noqa: BLE001 — logging must never break dispatch
6087
+ local_env_keys = None
6088
+ wire_env_keys = sorted((spec.provider_def or {}).get("env") or {})
6089
+ _log.info(
6090
+ "coord agent: provider %r resolved from this agent's "
6091
+ "local providers.definitions (env keys=%s), overriding "
6092
+ "the coordinator's wire-carried provider_def (env "
6093
+ "keys=%s) — local-wins-over-wire is deliberate "
6094
+ "precedence (#1796); if that's not what you expected, "
6095
+ "check this agent's own coordinator.yml for a stale "
6096
+ "definition (#2326)",
6097
+ spec.provider,
6098
+ local_env_keys,
6099
+ wire_env_keys,
6100
+ )
6101
+ return local
5944
6102
  if spec.provider_def is not None:
5945
6103
  from coord.providers import build_provider_from_wire # noqa: PLC0415
5946
6104
 
@@ -63,6 +63,40 @@ there are lost, or collide with other workers running at the same time. If \
63
63
  your worktree looks unexpectedly empty or unwritable, STOP and report it — \
64
64
  do not fall back to editing the base checkout and copying files over.
65
65
 
66
+ Write incrementally — this is the single most important rule in this file:
67
+ - Every request you make has a hard output-token budget, and on a \
68
+ reasoning model those tokens are shared with your own thinking. Truncation \
69
+ can happen at any budget size — raising the ceiling makes it rarer, not \
70
+ impossible — so the rule below holds regardless of what the current limit \
71
+ is.
72
+ - Write each file as soon as its content is decided. Do NOT design the \
73
+ whole change, plan every file, and only then start emitting `write`/`edit` \
74
+ calls — a turn that spends its whole budget reasoning can be truncated \
75
+ before it emits a single tool call. Truncation produces a clean-looking \
76
+ exit with zero commits and nothing on disk: the work is not "mostly done", \
77
+ it is entirely lost, because nothing you only thought about was ever sent \
78
+ as a tool call.
79
+ - Prefer many small steps over one large one: read/understand one file, \
80
+ write it, move to the next. Small increments stay nowhere near the cap; \
81
+ a single-shot "figure out the whole diff, then write it all" turn is what \
82
+ exhausts it.
83
+ - Issue one command per `bash` call — do not chain with `&&`, `;` or `|`. \
84
+ Permission rules are prefix-matched against the whole command string, so \
85
+ `git status && git log` matches no `allow` entry and is denied outright, \
86
+ wasting a turn for nothing. Run `git status`, then separately `git log`.
87
+ - These are the only `bash` commands you can run; everything else is \
88
+ denied, including `pwd`, `ls`, `cat` and `grep` (use your own file-read \
89
+ and search tools for those): `git status`, `git diff`, `git log`, \
90
+ `git show`, `git add`, `git commit`, `git checkout`, `git branch`, \
91
+ `git rev-parse`, `git push`, `cargo …`, `make…`, `pytest…`, \
92
+ `python3 -m pytest…`, `python -m pytest…`, `npm …`, `pip install…`, \
93
+ `pip3 install…`. `gh` is denied — the coordinator owns GitHub.
94
+ - If a `bash` or `edit` call does come back denied, don't probe with \
95
+ variations to find what's allowed — every denial replays the entire \
96
+ permission ruleset back to you, burning output budget you need for \
97
+ `write` calls without telling you anything the list above didn't already \
98
+ say. Take the denial as final and move on.
99
+
66
100
  This session is ONE-SHOT and non-interactive:
67
101
  - There is no next turn and no human to reply to you. Background-task \
68
102
  completion notifications will NEVER reach you — nothing wakes you up.
@@ -333,9 +333,12 @@ def _resolve_agent_startup(
333
333
  if cfg.path is not None:
334
334
  notices.append(
335
335
  f"coord agent: watching {cfg.path} for edits — repos, repo_paths, "
336
- "capabilities, artifact_paths and build_command are re-read on the "
337
- "next /health poll, no restart needed (#2299). RESTART-ONLY: "
338
- "providers, concurrency (bash_wrap_spawn/first_output_timeout), "
336
+ "capabilities, artifact_paths, build_command and (#2326) "
337
+ "providers.definitions are re-read on the next /health poll or "
338
+ "dispatch, no restart needed (#2299). providers.definitions "
339
+ "changes apply to the NEXT dispatch of that provider name — an "
340
+ "in-flight assignment keeps the definition it started with. "
341
+ "RESTART-ONLY: concurrency (bash_wrap_spawn/first_output_timeout) "
339
342
  "and the bind host/port."
340
343
  )
341
344
  else:
@@ -4210,6 +4210,56 @@ class TestProviderLayerDispatch:
4210
4210
  assert "legacy-SHOULD-NOT-RUN" not in log
4211
4211
  server.shutdown()
4212
4212
 
4213
+ def test_local_wins_over_wire_provider_def_is_logged(
4214
+ self, tmp_path: Path, caplog: pytest.LogCaptureFixture
4215
+ ) -> None:
4216
+ """#2326 item 3: when `_resolve_provider` takes the local-registry
4217
+ branch over an available `spec.provider_def`, it must say so in the
4218
+ agent log, naming both — this decision used to leave no trace,
4219
+ which is why a stale local override took a live-process probe to
4220
+ catch instead of a `journalctl` grep."""
4221
+ from coord.config import ProviderDef
4222
+ from coord.providers import build_provider
4223
+
4224
+ repo = _init_repo(tmp_path / "repo")
4225
+ defn = ProviderDef(type="claude", env={"LOCAL_ONLY": "1"})
4226
+ provider = build_provider("myprovider", defn, None)
4227
+
4228
+ server = AgentServer(
4229
+ machine_name="test",
4230
+ repos=["api"],
4231
+ state_dir=tmp_path / "state",
4232
+ worker_command=lambda spec: ["/bin/sh", "-c", "echo legacy-SHOULD-NOT-RUN"],
4233
+ repo_paths={"api": str(repo)},
4234
+ providers={"myprovider": provider},
4235
+ bash_wrap_spawn=False,
4236
+ )
4237
+ spec = _spec(
4238
+ repo,
4239
+ provider="myprovider",
4240
+ provider_def={
4241
+ "type": "claude",
4242
+ "binary": None,
4243
+ "model": None,
4244
+ "attach_url": None,
4245
+ "env": {"FROM_WIRE": "1"},
4246
+ "extra_args": [],
4247
+ },
4248
+ )
4249
+ try:
4250
+ with caplog.at_level("INFO", logger="coord.agent"):
4251
+ resolved = server._resolve_provider(spec)
4252
+ finally:
4253
+ server.shutdown()
4254
+
4255
+ assert resolved is provider
4256
+ assert "myprovider" in caplog.text
4257
+ assert "local providers.definitions" in caplog.text
4258
+ assert "wire-carried provider_def" in caplog.text
4259
+ # Env KEYS only — never the values (secrets commonly live here).
4260
+ assert "LOCAL_ONLY" in caplog.text
4261
+ assert "FROM_WIRE" in caplog.text
4262
+
4213
4263
 
4214
4264
  class TestCapabilityGates:
4215
4265
  """#324/#425: assign() enforces capability gates before spawning."""
@@ -5563,6 +5613,45 @@ def _bump_mtime(path: Path, seconds_ahead: float = 5.0) -> None:
5563
5613
  os.utime(path, (new_time, new_time))
5564
5614
 
5565
5615
 
5616
+ def _write_config_with_provider(
5617
+ path: Path,
5618
+ *,
5619
+ repos: list[str],
5620
+ repo_paths: dict[str, str],
5621
+ provider_binary: str,
5622
+ provider_env: dict[str, str] | None = None,
5623
+ machine_name: str = "test",
5624
+ ) -> Path:
5625
+ """Write a minimal coordinator.yml with one `providers.definitions`
5626
+ entry named "myprovider" (#2326 hot-reload coverage)."""
5627
+ provider_env = provider_env or {}
5628
+ lines = ["repos:"]
5629
+ for name in repos:
5630
+ lines.append(f" - name: {name}")
5631
+ lines.append(f" github: acme/{name}")
5632
+ lines.append("")
5633
+ lines.append("providers:")
5634
+ lines.append(" definitions:")
5635
+ lines.append(" myprovider:")
5636
+ lines.append(" type: claude")
5637
+ lines.append(f" binary: {provider_binary!r}")
5638
+ if provider_env:
5639
+ lines.append(" env:")
5640
+ for k, v in provider_env.items():
5641
+ lines.append(f" {k}: {v!r}")
5642
+ lines.append("")
5643
+ lines.append("machines:")
5644
+ lines.append(f" - name: {machine_name}")
5645
+ lines.append(f" host: {machine_name}.tailnet")
5646
+ lines.append(" capabilities: [python]")
5647
+ lines.append(f" repos: [{', '.join(repos)}]")
5648
+ lines.append(" repo_paths:")
5649
+ for name, p in repo_paths.items():
5650
+ lines.append(f" {name}: {p!r}")
5651
+ path.write_text("\n".join(lines) + "\n")
5652
+ return path
5653
+
5654
+
5566
5655
  class TestConfigHotReload:
5567
5656
  """#2299: `coordinator.yml` edits land within one health tick, no restart.
5568
5657
 
@@ -5887,14 +5976,17 @@ class TestConfigHotReload:
5887
5976
  server.shutdown()
5888
5977
 
5889
5978
  def test_restart_only_fields_are_not_reloaded(self, tmp_path: Path) -> None:
5890
- """`providers`, `bash_wrap_spawn` and `first_output_timeout` are
5891
- documented restart-only — a live worker holds a resolved provider, and
5892
- the other two are process tuning uvicorn/`_spawn` already committed
5893
- to. A reload must leave all three exactly as they were."""
5894
- sentinel = object()
5979
+ """`bash_wrap_spawn` and `first_output_timeout` are documented
5980
+ restart-only process tuning that uvicorn/`_spawn` already committed
5981
+ to at startup. A reload must leave both exactly as they were.
5982
+
5983
+ #2326: `providers` used to be on this list too — a sibling test,
5984
+ `test_provider_registry_is_hot_reloaded_when_not_in_flight` below,
5985
+ now covers that it IS reloaded (a live worker's OWN resolved
5986
+ provider is still protected, just via in-flight pinning rather than
5987
+ blanket restart-only-ness — see `_apply_reloaded_config`)."""
5895
5988
  server, cfg_path, api, web = self._build(
5896
5989
  tmp_path,
5897
- providers={"stub": sentinel},
5898
5990
  bash_wrap_spawn=False,
5899
5991
  first_output_timeout=12.5,
5900
5992
  )
@@ -5907,12 +5999,187 @@ class TestConfigHotReload:
5907
5999
  _bump_mtime(cfg_path)
5908
6000
  assert server._maybe_reload_config() is True
5909
6001
 
5910
- assert server._providers == {"stub": sentinel}
5911
6002
  assert server.bash_wrap_spawn is False
5912
6003
  assert server.first_output_timeout == 12.5
5913
6004
  finally:
5914
6005
  server.shutdown()
5915
6006
 
6007
+ # ── #2326: providers.definitions is hot too ─────────────────────────────
6008
+
6009
+ def test_provider_registry_is_hot_reloaded_when_not_in_flight(
6010
+ self, tmp_path: Path
6011
+ ) -> None:
6012
+ """An agent with its own local `coordinator.yml` must not pin
6013
+ `providers.definitions` at startup (#2326) — a provider config
6014
+ change (new env, new binary, ...) must apply on the NEXT dispatch,
6015
+ no restart, exactly like `repos`/`capabilities`/etc already do.
6016
+
6017
+ Verifies the resolution itself: the env dict a fresh dispatch's
6018
+ provider carries, not a re-read of the config file."""
6019
+ from coord.config import load as load_config
6020
+ from coord.providers import build_provider
6021
+
6022
+ api = _init_repo(tmp_path / "api")
6023
+ stub = tmp_path / "fake-claude.sh"
6024
+ stub.write_text('#!/bin/sh\necho "SPAWN_ENV_FOO=$SPAWN_ENV_FOO"\n')
6025
+ stub.chmod(0o755)
6026
+
6027
+ cfg_path = _write_config_with_provider(
6028
+ tmp_path / "coordinator.yml",
6029
+ repos=["api"],
6030
+ repo_paths={"api": str(api)},
6031
+ provider_binary=str(stub),
6032
+ )
6033
+ cfg = load_config(cfg_path)
6034
+
6035
+ server = AgentServer(
6036
+ machine_name="test",
6037
+ capabilities=["python"],
6038
+ repos=["api"],
6039
+ state_dir=tmp_path / "state",
6040
+ worker_command=lambda spec: [
6041
+ "/bin/sh", "-c", "echo legacy-SHOULD-NOT-RUN"
6042
+ ],
6043
+ repo_paths={"api": str(api)},
6044
+ providers={
6045
+ "myprovider": build_provider(
6046
+ "myprovider",
6047
+ cfg.providers.definitions["myprovider"],
6048
+ cfg.models,
6049
+ )
6050
+ },
6051
+ health_config=cfg,
6052
+ worktree_writable_settings_files=[],
6053
+ bash_wrap_spawn=False,
6054
+ )
6055
+ try:
6056
+ a1 = server.assign(_spec(api, provider="myprovider"))
6057
+ final1 = server.wait_for(a1.id, timeout=5)
6058
+ log1 = Path(final1.log_path).read_text()
6059
+ assert "SPAWN_ENV_FOO=bar" not in log1
6060
+ assert "legacy-SHOULD-NOT-RUN" not in log1
6061
+
6062
+ _write_config_with_provider(
6063
+ cfg_path,
6064
+ repos=["api"],
6065
+ repo_paths={"api": str(api)},
6066
+ provider_binary=str(stub),
6067
+ provider_env={"SPAWN_ENV_FOO": "bar"},
6068
+ )
6069
+ _bump_mtime(cfg_path)
6070
+
6071
+ a2 = server.assign(_spec(api, provider="myprovider"))
6072
+ final2 = server.wait_for(a2.id, timeout=5)
6073
+ log2 = Path(final2.log_path).read_text()
6074
+ assert "SPAWN_ENV_FOO=bar" in log2, (
6075
+ f"providers.definitions edit did not reach the next "
6076
+ f"dispatch: {log2!r}"
6077
+ )
6078
+ # An implicit "claude" entry is always materialised alongside
6079
+ # whatever's explicitly configured (see `ProvidersConfig`).
6080
+ assert server.health()["config_reload"]["provider_names"] == [
6081
+ "claude",
6082
+ "myprovider",
6083
+ ]
6084
+ finally:
6085
+ server.shutdown()
6086
+
6087
+ def test_in_flight_provider_is_pinned_across_a_reload(
6088
+ self, tmp_path: Path
6089
+ ) -> None:
6090
+ """The #2299 in-flight invariant applies to providers too (#2326): a
6091
+ RUNNING assignment must keep resolving to the provider instance it
6092
+ started with, even though a reload landed while it was running —
6093
+ `_reap` re-resolves the SAME spec afterwards to pick a log parser,
6094
+ and must get back the SAME identity `_spawn` used, not one a reload
6095
+ swapped underneath it."""
6096
+ from coord.config import load as load_config
6097
+ from coord.providers import build_provider
6098
+
6099
+ api = _init_repo(tmp_path / "api")
6100
+ go = tmp_path / "go"
6101
+ stub = tmp_path / "fake-claude.sh"
6102
+ stub.write_text(
6103
+ "#!/bin/sh\n"
6104
+ f"while [ ! -f {go} ]; do sleep 0.05; done\n"
6105
+ 'echo "SPAWN_ENV_FOO=$SPAWN_ENV_FOO"\n'
6106
+ )
6107
+ stub.chmod(0o755)
6108
+
6109
+ cfg_path = _write_config_with_provider(
6110
+ tmp_path / "coordinator.yml",
6111
+ repos=["api"],
6112
+ repo_paths={"api": str(api)},
6113
+ provider_binary=str(stub),
6114
+ )
6115
+ cfg = load_config(cfg_path)
6116
+ server = AgentServer(
6117
+ machine_name="test",
6118
+ capabilities=["python"],
6119
+ repos=["api"],
6120
+ state_dir=tmp_path / "state",
6121
+ worker_command=lambda spec: ["/bin/sh", "-c", "echo legacy"],
6122
+ repo_paths={"api": str(api)},
6123
+ providers={
6124
+ "myprovider": build_provider(
6125
+ "myprovider",
6126
+ cfg.providers.definitions["myprovider"],
6127
+ cfg.models,
6128
+ )
6129
+ },
6130
+ health_config=cfg,
6131
+ worktree_writable_settings_files=[],
6132
+ bash_wrap_spawn=False,
6133
+ )
6134
+ try:
6135
+ a = server.assign(_spec(api, provider="myprovider"))
6136
+ deadline = time.time() + 10
6137
+ while server.get(a.id).status != RUNNING and time.time() < deadline:
6138
+ time.sleep(0.05)
6139
+ assert server.get(a.id).status == RUNNING
6140
+ pre_reload_provider = server._providers["myprovider"]
6141
+
6142
+ # Edit lands WHILE the worker above is running.
6143
+ _write_config_with_provider(
6144
+ cfg_path,
6145
+ repos=["api"],
6146
+ repo_paths={"api": str(api)},
6147
+ provider_binary=str(stub),
6148
+ provider_env={"SPAWN_ENV_FOO": "bar"},
6149
+ )
6150
+ _bump_mtime(cfg_path)
6151
+ assert server._maybe_reload_config() is True
6152
+
6153
+ # The RUNNING assignment's own provider identity must survive
6154
+ # the reload untouched — asserted directly (object identity),
6155
+ # not just inferred from behaviour.
6156
+ in_flight_provider = server._resolve_provider(server.get(a.id).spec)
6157
+ assert in_flight_provider is pre_reload_provider
6158
+ assert in_flight_provider.env().get("SPAWN_ENV_FOO") is None
6159
+
6160
+ go.write_text("done")
6161
+ final = server.wait_for(a.id, timeout=10)
6162
+ log = Path(final.log_path).read_text()
6163
+ assert "SPAWN_ENV_FOO=bar" not in log, (
6164
+ "a reload must not retarget an in-flight worker's provider "
6165
+ f"mid-run: {log!r}"
6166
+ )
6167
+
6168
+ # The pin lifts once the assignment is terminal AND the next
6169
+ # reload runs (a pin is only re-evaluated when a reload actually
6170
+ # happens — an unchanged file triggers no reload at all, so it
6171
+ # takes one more on-disk change, exactly like a genuine second
6172
+ # `coordinator.yml` edit would).
6173
+ _bump_mtime(cfg_path)
6174
+ assert server._maybe_reload_config() is True
6175
+ a2 = server.assign(_spec(api, provider="myprovider"))
6176
+ final2 = server.wait_for(a2.id, timeout=10)
6177
+ log2 = Path(final2.log_path).read_text()
6178
+ assert "SPAWN_ENV_FOO=bar" in log2
6179
+ finally:
6180
+ server._assignments.clear()
6181
+ server.shutdown()
6182
+
5916
6183
  def test_reload_busts_the_local_health_cache(self, tmp_path: Path) -> None:
5917
6184
  """The H-1 block in /health is built from the loaded Config's
5918
6185
  checkouts — a cache left in place would keep republishing the