code-coordinator 0.5.113__tar.gz → 0.5.115__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 (845) hide show
  1. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/dispatch.py +27 -10
  5. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/config.py +59 -0
  6. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/diagnose.py +6 -0
  7. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/github_ops.py +69 -1
  8. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/opencode.py +96 -23
  9. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config.py +87 -0
  10. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_diagnose.py +37 -0
  11. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_github_ops.py +187 -0
  12. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers.py +34 -0
  13. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry_advisory_1606.py +9 -0
  14. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.gitignore +0 -0
  29. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/GOAL.md +0 -0
  31. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/LICENSE +0 -0
  32. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/README.md +0 -0
  34. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/client.py +0 -0
  65. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  106. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  108. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  109. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/db.py +0 -0
  207. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dispatch.py +0 -0
  229. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dist_name.py +0 -0
  230. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive.py +0 -0
  231. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive_queue.py +0 -0
  232. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive_state.py +0 -0
  233. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/events.py +0 -0
  234. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/failure_class.py +0 -0
  235. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/filelock.py +0 -0
  236. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/fleet_config_health.py +0 -0
  237. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/freshness.py +0 -0
  238. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_a.py +0 -0
  239. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_b.py +0 -0
  240. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_snapshot.py +0 -0
  241. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gates.py +0 -0
  242. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/goal.py +0 -0
  243. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/graph_health.py +0 -0
  244. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/__init__.py +0 -0
  245. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/aggregate.py +0 -0
  246. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/__init__.py +0 -0
  247. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/agent_install.py +0 -0
  248. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/cargo_targets.py +0 -0
  249. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/claude_binary.py +0 -0
  250. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/deploy_lane_facts.py +0 -0
  251. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/disk.py +0 -0
  252. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_board.py +0 -0
  253. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  254. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_phantom.py +0 -0
  255. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_unit_drift.py +0 -0
  256. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/graph.py +0 -0
  257. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/graphify_cli.py +0 -0
  258. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/index_lock.py +0 -0
  259. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/plan_usage.py +0 -0
  260. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/repo_state.py +0 -0
  261. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/spawned_coord.py +0 -0
  262. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/timer_active.py +0 -0
  263. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/toolchain.py +0 -0
  264. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/unit_drift.py +0 -0
  265. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/unit_enablement.py +0 -0
  266. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/worktrees.py +0 -0
  267. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/cli.py +0 -0
  268. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/context.py +0 -0
  269. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/fleet_snapshot.py +0 -0
  270. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/models.py +0 -0
  271. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/pypi.py +0 -0
  272. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/registry.py +0 -0
  273. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/render.py +0 -0
  274. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/units.py +0 -0
  275. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/hooks.py +0 -0
  276. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/housekeeping.py +0 -0
  277. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/interactive.py +0 -0
  278. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/issue_store.py +0 -0
  279. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/liveness_auditor.py +0 -0
  280. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/machine_pause.py +0 -0
  281. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/merge_queue.py +0 -0
  282. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_chat.py +0 -0
  283. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_dispatch.py +0 -0
  284. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_gate.py +0 -0
  285. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_order.py +0 -0
  286. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/mock_author.py +0 -0
  287. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/models.py +0 -0
  288. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/network.py +0 -0
  289. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/new_issue_chat.py +0 -0
  290. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/__init__.py +0 -0
  291. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/baseline.py +0 -0
  292. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/cli.py +0 -0
  293. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/collect.py +0 -0
  294. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/digest.py +0 -0
  295. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/models.py +0 -0
  296. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/predicate.py +0 -0
  297. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/service.py +0 -0
  298. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/store.py +0 -0
  299. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/transport.py +0 -0
  300. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notify.py +0 -0
  301. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/openapi.py +0 -0
  302. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/overlap_fence.py +0 -0
  303. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/overlap_predict.py +0 -0
  304. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/parentage.py +0 -0
  305. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/parentage_github.py +0 -0
  306. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/pipeline.py +0 -0
  307. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/plan_parser.py +0 -0
  308. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/plans.py +0 -0
  309. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/platform_paths.py +0 -0
  310. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_bridge.py +0 -0
  311. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_store.py +0 -0
  312. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_sync.py +0 -0
  313. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/pr_body_lint.py +0 -0
  314. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/prereqs.py +0 -0
  315. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/progress.py +0 -0
  316. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/__init__.py +0 -0
  317. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/base.py +0 -0
  318. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/claude.py +0 -0
  319. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/claude_pty.py +0 -0
  320. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/queue_diagnose.py +0 -0
  321. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/reconcile.py +0 -0
  322. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/refine_chat.py +0 -0
  323. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_cordon.py +0 -0
  324. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_propagate.py +0 -0
  325. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_verify.py +0 -0
  326. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_window.py +0 -0
  327. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/repo_edit.py +0 -0
  328. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/repo_onboard.py +0 -0
  329. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/reports.py +0 -0
  330. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/revalidate.py +0 -0
  331. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/review.py +0 -0
  332. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/scorecard.py +0 -0
  333. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/serve_app.py +0 -0
  334. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/skills/update-issue/SKILL.md +0 -0
  335. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/smoke.py +0 -0
  336. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/state.py +0 -0
  340. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_author.py +0 -0
  341. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ARCHITECTURE.md +0 -0
  371. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ARCH_SECURITY_GATES.md +0 -0
  372. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/COCKPIT.md +0 -0
  373. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/COST_DISCIPLINE.md +0 -0
  375. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CROSS_PLATFORM.md +0 -0
  376. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CUSTOMER_PORTAL.md +0 -0
  377. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/DRIVE_QUEUE.md +0 -0
  378. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/EPHEMERAL_WORKERS.md +0 -0
  379. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/FORGE_MIGRATION.md +0 -0
  380. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/GRAPHIFY_SETUP.md +0 -0
  381. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ISSUE_GUIDANCE.md +0 -0
  382. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/MAC_MINI.md +0 -0
  383. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  384. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/NOTIFIER.md +0 -0
  385. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/OPENCODE_VERIFICATION.md +0 -0
  386. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/OPERATING_GOTCHAS.md +0 -0
  387. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ORACLE_LOOP.md +0 -0
  388. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PHONE_WEBAPP.md +0 -0
  389. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PIPELINE_V2.md +0 -0
  390. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PLATFORM_EVOLUTION.md +0 -0
  391. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/SECOND_BACKEND.md +0 -0
  392. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/STORE_SERVICE.md +0 -0
  393. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  394. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/WEB_CONTROL_CENTER.md +0 -0
  395. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/README.md +0 -0
  396. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/_tokens.css +0 -0
  397. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/issue-detail.html +0 -0
  398. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/pipeline-narrow.html +0 -0
  399. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/pipeline-wide.html +0 -0
  400. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/graphify-out/.gitignore +0 -0
  401. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/install-agent.sh +0 -0
  402. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/pyproject.toml +0 -0
  403. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/audit_review_verdict_overrides.py +0 -0
  404. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  405. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/build-worker-image.sh +0 -0
  406. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/coordinator-machine.py +0 -0
  407. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/epic-down.sh +0 -0
  408. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/epic-up.sh +0 -0
  409. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/preflight.sh +0 -0
  410. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/provision-worker.sh +0 -0
  411. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  412. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  413. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/verify-github-token.sh +0 -0
  414. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/codegen.py +0 -0
  415. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/coord-test-runner.sh +0 -0
  416. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/run_tests_in_populated_home.sh +0 -0
  420. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/run_tests_without_gh.sh +0 -0
  421. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/smoke_437_interactive.py +0 -0
  422. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/setup.cfg +0 -0
  426. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  429. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/contract.md +0 -0
  430. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/manifest.yml +0 -0
  431. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  432. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  433. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  434. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  435. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/conftest.py +0 -0
  436. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/contract.md +0 -0
  437. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/manifest.yml +0 -0
  438. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  439. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  440. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/contract.md +0 -0
  441. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/manifest.yml +0 -0
  442. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  443. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  444. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  445. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  446. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  447. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  448. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  449. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  450. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  451. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  452. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/contract.md +0 -0
  453. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  454. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  455. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/manifest.yml +0 -0
  456. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  457. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/tsconfig.json +0 -0
  458. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  459. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/conftest.py +0 -0
  460. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/board-pipeline-basic.json +0 -0
  461. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  462. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  463. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  464. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  465. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/all_pass.json +0 -0
  466. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  467. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/mixed_fail.json +0 -0
  468. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  469. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  470. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/skip.json +0 -0
  471. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/truncated.json +0 -0
  472. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  473. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  474. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  475. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  476. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  477. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  478. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  479. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  480. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_acceptance.py +0 -0
  481. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_acceptance_drivers.py +0 -0
  482. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent.py +0 -0
  483. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_api_error.py +0 -0
  484. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_app.py +0 -0
  485. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_branch_base.py +0 -0
  486. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_branch_capture.py +0 -0
  487. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_config_free_1712.py +0 -0
  488. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_deploy_units_endpoint.py +0 -0
  489. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_dirty_worktree.py +0 -0
  490. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_graph_self_heal.py +0 -0
  491. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_health_h3.py +0 -0
  492. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_idle_restart.py +0 -0
  493. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_push_failure.py +0 -0
  494. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_reap.py +0 -0
  495. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_repos_and_pull.py +0 -0
  496. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_restart_services_endpoint.py +0 -0
  497. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_startup_diagnostics.py +0 -0
  498. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_update.py +0 -0
  499. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_update_bluegreen.py +0 -0
  500. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_usage_limit.py +0 -0
  501. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_zero_commit.py +0 -0
  502. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ambient_home_isolation.py +0 -0
  503. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_approve_reject_plan.py +0 -0
  504. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_approve_usage_gate.py +0 -0
  505. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_assignment_already_recorded_daemon.py +0 -0
  506. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_log.py +0 -0
  507. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_outcome.py +0 -0
  508. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_query.py +0 -0
  509. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_auto_loop.py +0 -0
  510. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_auto_release_publish_2035.py +0 -0
  511. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_base_checkout_restore.py +0 -0
  512. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_block_log.py +0 -0
  513. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_cap_762.py +0 -0
  514. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_fixture.py +0 -0
  515. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_read_path.py +0 -0
  516. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_service.py +0 -0
  517. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_state.py +0 -0
  518. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_wire.py +0 -0
  519. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_brain.py +0 -0
  520. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_branch_model.py +0 -0
  521. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_bug_intake.py +0 -0
  522. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_build_worker_image_env_update.py +0 -0
  523. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cargo_cache.py +0 -0
  524. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_acceptance_gate_1950.py +0 -0
  525. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_acceptance.py +0 -0
  529. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign.py +0 -0
  530. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  531. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_interactive_remote.py +0 -0
  532. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_provider.py +0 -0
  533. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  534. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_audit.py +0 -0
  535. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_chat_continue.py +0 -0
  536. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_diagnose_config_provenance.py +0 -0
  537. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_diagnose_graph.py +0 -0
  538. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor.py +0 -0
  539. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor_config_free_1801.py +0 -0
  540. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  541. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_drive.py +0 -0
  542. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_drive_queue.py +0 -0
  543. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_issue_create_label.py +0 -0
  549. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_issue_reopen.py +0 -0
  550. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_merge.py +0 -0
  551. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_assign.py +0 -0
  552. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_capture.py +0 -0
  553. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_chat_add_child.py +0 -0
  554. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_dispatch.py +0 -0
  555. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_gate_b.py +0 -0
  556. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_gate_c.py +0 -0
  557. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_order.py +0 -0
  558. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  559. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_ship.py +0 -0
  560. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_network.py +0 -0
  561. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_new_issue_chat.py +0 -0
  562. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_plans.py +0 -0
  563. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_portal.py +0 -0
  564. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_pull_artifact.py +0 -0
  565. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_queue.py +0 -0
  566. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_reattach_sessions.py +0 -0
  567. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_refine_board.py +0 -0
  568. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_preflight.py +0 -0
  569. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_propagate.py +0 -0
  570. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_window.py +0 -0
  571. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_repo_2220.py +0 -0
  572. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_scorecard.py +0 -0
  573. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_set_review_findings.py +0 -0
  574. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_advisory_terminal.py +0 -0
  575. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_merge_queue.py +0 -0
  576. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_provider.py +0 -0
  577. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_review_finalizing.py +0 -0
  578. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_test_failed_tag.py +0 -0
  579. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_usage_limit.py +0 -0
  580. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_sync_comments_873.py +0 -0
  581. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_test_plan.py +0 -0
  582. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_track.py +0 -0
  583. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_tui_update.py +0 -0
  584. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_wait.py +0 -0
  585. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_client_base_install.py +0 -0
  586. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_comments.py +0 -0
  587. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_completion_summary.py +0 -0
  588. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_acceptance.py +0 -0
  589. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_audit.py +0 -0
  590. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_pricing.py +0 -0
  591. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  592. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_usage_gate.py +0 -0
  593. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_conflict_fix.py +0 -0
  594. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_conflict_fix_semantic.py +0 -0
  595. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test.py +0 -0
  596. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_baseline.py +0 -0
  597. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_routing.py +0 -0
  598. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_toolchain.py +0 -0
  599. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_web_sse_restart_live.py +0 -0
  600. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coordinator_machine.py +0 -0
  601. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cross_platform_imports.py +0 -0
  602. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard.py +0 -0
  603. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_fixture.py +0 -0
  604. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_terminal.py +0 -0
  605. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_terminal_live.py +0 -0
  606. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_db.py +0 -0
  607. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dead_end.py +0 -0
  608. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_db_backup.py +0 -0
  609. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_web_dist.py +0 -0
  610. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_web_rollback.py +0 -0
  611. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_drive_queue_unit.py +0 -0
  612. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_manifest.py +0 -0
  613. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_units_lane.py +0 -0
  614. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_web_unit.py +0 -0
  615. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deps.py +0 -0
  616. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dispatch.py +0 -0
  617. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dispatch_target_validation.py +0 -0
  618. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dist_name.py +0 -0
  619. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_done_housekeeping.py +0 -0
  620. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive.py +0 -0
  621. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_queue.py +0 -0
  622. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_state.py +0 -0
  623. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_tmux.py +0 -0
  624. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_capability_detection.py +0 -0
  625. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  626. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_image_provenance.py +0 -0
  627. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_errors.py +0 -0
  628. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_events.py +0 -0
  629. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_failure_class.py +0 -0
  630. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_filelock.py +0 -0
  631. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  632. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fix_of_force_override.py +0 -0
  633. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_config_health.py +0 -0
  634. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_health_probes.py +0 -0
  635. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_health_snapshot.py +0 -0
  636. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_freshness.py +0 -0
  637. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_a.py +0 -0
  638. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_b.py +0 -0
  639. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_snapshot_staleness.py +0 -0
  640. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gates.py +0 -0
  641. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  642. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_generated_types_fixture.py +0 -0
  643. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_goal.py +0 -0
  644. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_graph_health.py +0 -0
  645. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_graph_selfheal_absent_2237.py +0 -0
  646. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_handoff.py +0 -0
  647. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_checks.py +0 -0
  648. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_cli.py +0 -0
  649. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_cli_graph.py +0 -0
  650. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_config.py +0 -0
  651. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_context.py +0 -0
  652. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_deploy_lane_facts.py +0 -0
  653. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_incident_regression.py +0 -0
  654. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_pypi.py +0 -0
  655. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_registry.py +0 -0
  656. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_timer_active.py +0 -0
  657. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_toolchain.py +0 -0
  658. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_unit_drift.py +0 -0
  659. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_unit_enablement.py +0 -0
  660. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_hooks.py +0 -0
  661. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_human_attended_437.py +0 -0
  662. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_init.py +0 -0
  663. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_integration.py +0 -0
  664. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_briefing_echo.py +0 -0
  665. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_prefill_state.py +0 -0
  666. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_session_relaunch.py +0 -0
  667. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_test_verdict_backstop.py +0 -0
  668. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_token_attribution.py +0 -0
  669. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_worktree.py +0 -0
  670. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_issue_store_seam.py +0 -0
  671. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_liveness_auditor.py +0 -0
  672. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_liveness_notify.py +0 -0
  673. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_machine_pause.py +0 -0
  674. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_merge_queue.py +0 -0
  675. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_merge_verify.py +0 -0
  676. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_chat.py +0 -0
  677. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_dispatch.py +0 -0
  678. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_gate.py +0 -0
  679. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_order.py +0 -0
  680. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_seam.py +0 -0
  681. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_mock_author.py +0 -0
  682. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_model_tiering.py +0 -0
  683. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_models.py +0 -0
  684. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_models_config_labels.py +0 -0
  685. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_needs_attention.py +0 -0
  686. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_network.py +0 -0
  687. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_new_issue_chat.py +0 -0
  688. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_next_release_tag.py +0 -0
  689. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_no_direct_gh_calls.py +0 -0
  690. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_node_shim.py +0 -0
  691. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_baseline.py +0 -0
  692. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_cli.py +0 -0
  693. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_collect.py +0 -0
  694. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_config.py +0 -0
  695. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_drive_seam.py +0 -0
  696. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_isolation.py +0 -0
  697. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_predicate.py +0 -0
  698. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_quiet_hours.py +0 -0
  699. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_service.py +0 -0
  700. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notify.py +0 -0
  701. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notify_drain.py +0 -0
  702. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_openapi.py +0 -0
  703. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_operational_defaults.py +0 -0
  704. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_overlap_fence.py +0 -0
  705. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_overlap_predict.py +0 -0
  706. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_packaged_deploy_units.py +0 -0
  707. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_parentage.py +0 -0
  708. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_paste_landed.py +0 -0
  709. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_pipeline.py +0 -0
  710. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_approve_plan_command.py +0 -0
  711. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_pr_command.py +0 -0
  712. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_review_command.py +0 -0
  713. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_only.py +0 -0
  714. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_parser.py +0 -0
  715. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_platform_paths.py +0 -0
  716. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_bridge.py +0 -0
  717. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_config.py +0 -0
  718. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_sync.py +0 -0
  719. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_pr_body_lint.py +0 -0
  720. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_prereqs.py +0 -0
  721. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_production_db_guard.py +0 -0
  722. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_progress.py +0 -0
  723. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_provider_seam.py +0 -0
  724. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers_config_labels.py +0 -0
  725. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers_pty.py +0 -0
  726. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_quiet_hours.py +0 -0
  727. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_quiet_hours_store_2146.py +0 -0
  728. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reap_merged_sessions.py +0 -0
  729. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reap_stale_interactive_tick.py +0 -0
  730. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_branch.py +0 -0
  731. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_completions.py +0 -0
  732. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_merges.py +0 -0
  733. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_no_agent_record.py +0 -0
  734. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_usage_limit_done.py +0 -0
  735. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_refine_chat.py +0 -0
  736. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_2101.py +0 -0
  737. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  738. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_deadlock_2240.py +0 -0
  739. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_propagate.py +0 -0
  740. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_edit_2220.py +0 -0
  746. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_graph_fleet_2237.py +0 -0
  747. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_onboard_2220.py +0 -0
  748. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_report_result_push.py +0 -0
  749. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reports.py +0 -0
  750. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry.py +0 -0
  751. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry_type_1636.py +0 -0
  752. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_revalidate.py +0 -0
  753. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review.py +0 -0
  754. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_end_review_without_verdict.py +0 -0
  755. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_parse_failure_diagnostic.py +0 -0
  756. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_reaffirm.py +0 -0
  757. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_state.py +0 -0
  758. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_backstop.py +0 -0
  759. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_override_audit.py +0 -0
  760. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_relay.py +0 -0
  761. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_zero_commits.py +0 -0
  762. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_scoped_review_wiring.py +0 -0
  763. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_scorecard.py +0 -0
  764. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_serve.py +0 -0
  765. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_serve_app_board_trim.py +0 -0
  766. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_session.py +0 -0
  767. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_slice_issue_attribution.py +0 -0
  768. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke.py +0 -0
  769. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke_live_checkout_restore.py +0 -0
  770. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke_workflow.py +0 -0
  771. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_spend_ceiling.py +0 -0
  772. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_spend_ceiling_coordinator.py +0 -0
  773. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_split.py +0 -0
  774. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_split_work.py +0 -0
  775. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stage_projection.py +0 -0
  776. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stalled_pipeline.py +0 -0
  777. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_state.py +0 -0
  778. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_state_review_findings_daemon.py +0 -0
  779. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_status_fleet_footer.py +0 -0
  780. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stop_1567.py +0 -0
  781. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stuck.py +0 -0
  782. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_terminal_command.py +0 -0
  783. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_author.py +0 -0
  784. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_chat.py +0 -0
  785. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_orchestrator.py +0 -0
  786. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_report.py +0 -0
  787. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_verdict_parsing.py +0 -0
  788. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_verdict_transcript_floor.py +0 -0
  789. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_board_audit.py +0 -0
  790. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_config_load_1080.py +0 -0
  791. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_daemon_routing_906.py +0 -0
  792. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_tmux_host.py +0 -0
  793. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_tmux_session.py +0 -0
  794. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_transcript_floor.py +0 -0
  795. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage.py +0 -0
  796. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage_limits.py +0 -0
  797. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage_rollup.py +0 -0
  798. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_venv_live_install_2121.py +0 -0
  799. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_version_single_source.py +0 -0
  800. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_watch.py +0 -0
  801. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  802. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_events.py +0 -0
  803. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_image_pin_sync.py +0 -0
  804. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_safety.py +0 -0
  805. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_test_scoping.py +0 -0
  806. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worktree.py +0 -0
  807. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  808. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/Cargo.lock +0 -0
  809. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/Cargo.toml +0 -0
  810. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/cargo-config-local-quadraui.toml.example +0 -0
  811. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/audit.rs +0 -0
  812. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/chat.rs +0 -0
  813. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/data.rs +0 -0
  814. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/dialogs.rs +0 -0
  815. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/drive.rs +0 -0
  816. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/drive_queue.rs +0 -0
  817. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/escalation.rs +0 -0
  818. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/events.rs +0 -0
  819. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fixtures.rs +0 -0
  820. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_health.rs +0 -0
  821. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_sessions.rs +0 -0
  822. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_terminals.rs +0 -0
  823. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/format.rs +0 -0
  824. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/milestone_dag.rs +0 -0
  825. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/mod.rs +0 -0
  826. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/msv.rs +0 -0
  827. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/pipeline.rs +0 -0
  828. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/plans.rs +0 -0
  829. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/render.rs +0 -0
  830. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/reports.rs +0 -0
  831. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/sessions.rs +0 -0
  832. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/settings_ui.rs +0 -0
  833. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/sidebar.rs +0 -0
  834. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/terminal.rs +0 -0
  835. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/tests.rs +0 -0
  836. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/types.rs +0 -0
  837. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/workspace.rs +0 -0
  838. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/bin/gtk.rs +0 -0
  839. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/commands.rs +0 -0
  840. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/lib.rs +0 -0
  841. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/main.rs +0 -0
  842. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/settings.rs +0 -0
  843. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/tests/acceptance.rs +0 -0
  844. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/tests/cli.rs +0 -0
  845. {code_coordinator-0.5.113 → code_coordinator-0.5.115}/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.113
3
+ Version: 0.5.115
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.113
3
+ Version: 0.5.115
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.113",
2
+ "tag": "0.5.115",
3
3
  "distance": 0,
4
- "node": "ga030a27e286c5012119c4cdbfb871f070e331e8a",
4
+ "node": "g28e36b1a94feb56072af2832c5a0025e5b6ffa90",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-16"
@@ -1873,18 +1873,35 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1873
1873
  # an independent inline copy of the same "branch empty → 0, repo
1874
1874
  # missing → None, else ask GitHub" logic.
1875
1875
  ahead = github_ops.branch_commits_ahead_for_assignment(assignment, cfg)
1876
- if ahead != 0:
1877
- detail = (
1878
- "its commit count could not be confirmed (gh lookup failed)"
1879
- if ahead is None
1880
- else f"{ahead} commit(s) present on its branch"
1876
+ if ahead is None:
1877
+ # #2324: a genuine lookup failure (network error, auth, rate
1878
+ # limit, repo missing) is NOT evidence that commits exist — it's
1879
+ # just an unanswered question. Don't assert the #1357
1880
+ # false-positive shape or point at `--accept-advisory`, which
1881
+ # assumes real commits are sitting on the branch; nothing here
1882
+ # established that. Say the lookup failed and name what to
1883
+ # check instead. (A confirmed 404 on the head branch is handled
1884
+ # above this `is None` check — `branch_commits_ahead_for_assignment`
1885
+ # reads that as 0, not None.)
1886
+ click.echo(
1887
+ f"error: assignment {assignment_id} is 'advisory', and its "
1888
+ "commit count could not be confirmed (gh lookup failed) — "
1889
+ "coord retry only re-dispatches a GENUINE zero-commit "
1890
+ "advisory, and a failed lookup isn't confirmation either "
1891
+ "way. Check `gh api` access and the recorded branch/repo, "
1892
+ "then retry; or inspect by hand: coord log "
1893
+ f"{assignment_id}.",
1894
+ err=True,
1881
1895
  )
1896
+ sys.exit(1)
1897
+ if ahead != 0:
1882
1898
  click.echo(
1883
- f"error: assignment {assignment_id} is 'advisory', and {detail} "
1884
- " coord retry only re-dispatches a GENUINE zero-commit "
1885
- "advisory. This looks like the #1357 false-positive "
1886
- "signature instead; use `coord drive --accept-advisory` to "
1887
- "proceed with the existing commits, or inspect by hand.",
1899
+ f"error: assignment {assignment_id} is 'advisory', and "
1900
+ f"{ahead} commit(s) are present on its branch coord retry "
1901
+ "only re-dispatches a GENUINE zero-commit advisory. This is "
1902
+ "the #1357 false-positive signature instead; use `coord "
1903
+ "drive --accept-advisory` to proceed with the existing "
1904
+ "commits, or inspect by hand.",
1888
1905
  err=True,
1889
1906
  )
1890
1907
  sys.exit(1)
@@ -3321,6 +3321,51 @@ def _expand_env_vars(value: str) -> str:
3321
3321
  return _ENV_VAR_RE.sub(_replace, value)
3322
3322
 
3323
3323
 
3324
+ #: Matches exactly what opencode's own ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX``
3325
+ #: parser (#2321) accepts as a *string form* of a number: one or more ASCII
3326
+ #: digits, nothing else — no sign, no decimal point, no whitespace, no
3327
+ #: underscore digit-grouping. Combined with the ``> 0`` check below this
3328
+ #: mirrors opencode's own rule (integer, ``> 0``) closely enough to reject
3329
+ #: every value opencode is documented to silently discard: ``"131072 "``
3330
+ #: (trailing whitespace), ``"131_072"`` (underscore grouping — Python's
3331
+ #: ``int()`` would accept this but JS ``Number()`` coercion does not),
3332
+ #: ``"0"`` (fails ``> 0``), ``"1.5"`` (decimal point), and ``"unlimited"``
3333
+ #: (non-numeric).
3334
+ _OPENCODE_OUTPUT_TOKEN_MAX_RE = re.compile(r"[0-9]+")
3335
+
3336
+ #: The env var name gated by :data:`_OPENCODE_OUTPUT_TOKEN_MAX_RE` — kept as
3337
+ #: a constant rather than a literal so config.py and opencode.py can be
3338
+ #: grepped for the exact same string (deliberately NOT imported from
3339
+ #: coord.providers.opencode: config.py must not depend on provider modules).
3340
+ OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR = "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"
3341
+
3342
+
3343
+ def _validate_opencode_output_token_max_env(value: str, *, context: str) -> None:
3344
+ """Reject an ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` override that
3345
+ opencode's own parser would silently discard (#2321).
3346
+
3347
+ opencode's env-var parser demands an integer ``> 0``; anything else
3348
+ (a non-numeric string, a decimal, a value with surrounding whitespace
3349
+ or underscore digit-grouping, zero or negative) maps to ``undefined``
3350
+ internally, which silently restores opencode's 32,000-token default
3351
+ with **no warning anywhere** — exactly the failure mode #2321 exists
3352
+ to end. Config-parse time is the only point where "silently reverted
3353
+ to 32,000" can be turned into a loud, actionable error instead of a
3354
+ truncated worker run discovered hours later.
3355
+
3356
+ Raises:
3357
+ ConfigError: when *value* is not a bare positive-integer string.
3358
+ """
3359
+ if not _OPENCODE_OUTPUT_TOKEN_MAX_RE.fullmatch(value) or int(value) <= 0:
3360
+ raise ConfigError(
3361
+ f"{context} must be a positive integer string with no "
3362
+ "surrounding whitespace, sign, decimal point, or underscores "
3363
+ "(opencode's OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX parser "
3364
+ "silently discards anything else and reverts to its 32000 "
3365
+ f"default) — got {value!r}"
3366
+ )
3367
+
3368
+
3324
3369
  _PORTAL_PLAIN_STR_FIELDS = ("base_url",)
3325
3370
  _PORTAL_SECRET_STR_FIELDS = ("bridge_client_id", "bridge_client_secret")
3326
3371
 
@@ -3471,6 +3516,20 @@ def _parse_providers(raw: Any) -> ProvidersConfig:
3471
3516
  # Expand ${VAR} in env values.
3472
3517
  env: dict[str, str] = {k: _expand_env_vars(v) for k, v in env_raw.items()}
3473
3518
 
3519
+ # #2321: an operator override of opencode's output-token-cap knob
3520
+ # must be a value opencode's own parser will actually honour — see
3521
+ # _validate_opencode_output_token_max_env for why a bad value here
3522
+ # (e.g. a trailing space) is worse than a normal type error: it
3523
+ # doesn't fail, it silently reverts to the 32000 default.
3524
+ if OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR in env:
3525
+ _validate_opencode_output_token_max_env(
3526
+ env[OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR],
3527
+ context=(
3528
+ f"providers.definitions[{def_name!r}].env"
3529
+ f"[{OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR!r}]"
3530
+ ),
3531
+ )
3532
+
3474
3533
  extra_args_raw = def_raw.get("extra_args", []) or []
3475
3534
  if not isinstance(extra_args_raw, list) or not all(
3476
3535
  isinstance(a, str) for a in extra_args_raw
@@ -1069,6 +1069,12 @@ def _work_advisory_commits_ahead(assignment: "Assignment", config: "Config") ->
1069
1069
  zero-commit gate uses) rather than a local git checkout — `coord
1070
1070
  diagnose` runs on the daemon host, which has no guarantee of a local
1071
1071
  clone of every worker's branch.
1072
+
1073
+ #2324: ``None`` here means the lookup genuinely couldn't be confirmed
1074
+ (network/auth/rate-limit/repo-missing) — a head branch GitHub positively
1075
+ 404s, with the base branch still resolving, comes back as ``0`` instead
1076
+ (see :func:`coord.github_ops.branch_commits_ahead`), since a deleted
1077
+ branch is proof nothing was pushed, not an unknown.
1072
1078
  """
1073
1079
  from coord import github_ops # noqa: PLC0415
1074
1080
 
@@ -1775,6 +1775,58 @@ def get_compare_files(repo: str, base: str, head: str) -> list[str] | None:
1775
1775
  return [line for line in (ln.strip() for ln in raw.splitlines()) if line]
1776
1776
 
1777
1777
 
1778
+ def _gh_ref_confirmed_missing(exc: Exception) -> bool:
1779
+ """True when *exc* (raised by ``_gh`` for a ``gh api`` ref/compare call)
1780
+ is GitHub positively saying "no such ref" — a 404 — as opposed to an
1781
+ auth, rate-limit, network, or other transient failure that merely looks
1782
+ like one from the caller's point of view.
1783
+
1784
+ #2324: deliberately narrower than the "http 4" match
1785
+ :func:`branch_exists_on_remote` uses (which folds 401/403/429 in with
1786
+ 404, and fails open elsewhere for that function's own reasons). This is
1787
+ the one call site where conflating "confirmed gone" with "auth/rate-limit
1788
+ blip" would make `coord retry`'s zero-commit gate treat a locked-out
1789
+ ``gh`` as proof a branch was deleted and race ahead re-dispatching real,
1790
+ unconfirmed work — so it checks :func:`_is_transient_error`'s keywords
1791
+ first and only then looks for an explicit "404"/"not found" signal.
1792
+ """
1793
+ if _is_transient_error(exc):
1794
+ return False
1795
+ msg = str(exc).lower()
1796
+ return "404" in msg or "not found" in msg
1797
+
1798
+
1799
+ def _head_branch_confirmed_deleted(repo: str, base: str, branch: str) -> bool:
1800
+ """True when *branch* 404s on *repo* while *base* still resolves.
1801
+
1802
+ #2324: :func:`branch_commits_ahead`'s three-dot compare call 404s
1803
+ identically whether it's the head branch that's gone, the base branch,
1804
+ or something else entirely obscures both — the compare error text alone
1805
+ can't tell them apart. This asks each ref directly (the same
1806
+ ``git/refs/heads`` lookup :func:`branch_exists_on_remote` uses) so a
1807
+ branch that was genuinely deleted — the normal cleanup after a
1808
+ zero-commit worker exit — reads as "confirmed gone" instead of being
1809
+ lumped in with an unrelated failure and reported as unknown.
1810
+
1811
+ Only returns True on the one shape that's actually conclusive: the head
1812
+ ref 404s (via :func:`_gh_ref_confirmed_missing`) *and* the base ref
1813
+ still resolves. Any other combination — head resolves fine, head lookup
1814
+ itself fails inconclusively, or base can't be confirmed either — returns
1815
+ False so the caller keeps its existing fail-closed ``None``.
1816
+ """
1817
+ try:
1818
+ _gh("api", f"repos/{repo}/git/refs/heads/{branch}")
1819
+ return False # head resolves fine; compare failed for some other reason
1820
+ except RuntimeError as exc:
1821
+ if not _gh_ref_confirmed_missing(exc):
1822
+ return False # inconclusive — do not guess
1823
+ try:
1824
+ _gh("api", f"repos/{repo}/git/refs/heads/{base}")
1825
+ except RuntimeError:
1826
+ return False # base itself unconfirmable — don't trust the read
1827
+ return True # head confirmed gone, base confirmed present
1828
+
1829
+
1778
1830
  def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
1779
1831
  """Commits *branch* is ahead of *base* on the remote, or ``None``.
1780
1832
 
@@ -1790,6 +1842,16 @@ def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
1790
1842
  real reviews. This is the opposite polarity from
1791
1843
  :func:`branch_is_fully_merged`, which returns a plain ``False`` on error
1792
1844
  because *its* fail-safe direction is "keep the PR open".
1845
+
1846
+ #2324 exception: when the compare call fails, a *confirmed* 404 on the
1847
+ head branch while the base branch still resolves
1848
+ (:func:`_head_branch_confirmed_deleted`) returns ``0``, not ``None`` — a
1849
+ head ref that GitHub positively says doesn't exist is the strongest
1850
+ possible evidence nothing was ever pushed to it (a branch carrying
1851
+ commits would still be there). Every other failure shape — the compare
1852
+ call fails for a reason that isn't a confirmed head-branch 404, or the
1853
+ follow-up ref checks themselves are inconclusive — keeps the existing
1854
+ fail-closed ``None``.
1793
1855
  """
1794
1856
  if not branch or not base:
1795
1857
  return None
@@ -1799,6 +1861,8 @@ def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
1799
1861
  raw = _gh("api", f"repos/{repo}/compare/{base}...{branch}")
1800
1862
  cmp = json.loads(raw)
1801
1863
  except Exception: # noqa: BLE001 — unknown, not zero
1864
+ if _head_branch_confirmed_deleted(repo, base, branch):
1865
+ return 0
1802
1866
  return None
1803
1867
  if not isinstance(cmp, dict):
1804
1868
  return None
@@ -1832,7 +1896,11 @@ def branch_commits_ahead_for_assignment(assignment: Any, config: Any) -> int | N
1832
1896
  that ``config`` doesn't know about returns ``None`` ("cannot confirm"),
1833
1897
  never a bare 0, matching :func:`branch_commits_ahead`'s own fail-closed
1834
1898
  polarity: an unconfirmable commit count must never be silently read as
1835
- "empty branch, safe to touch".
1899
+ "empty branch, safe to touch" — *except* the one case
1900
+ :func:`branch_commits_ahead` itself carves out (#2324): a recorded
1901
+ branch whose head ref GitHub positively 404s, with the base branch still
1902
+ resolving, comes back as 0 rather than ``None`` — a deleted branch
1903
+ proves nothing was pushed at least as conclusively as a blank one does.
1836
1904
  """
1837
1905
  branch = (getattr(assignment, "branch", None) or "").strip()
1838
1906
  if not branch:
@@ -76,6 +76,12 @@ Differences from :class:`~.claude.ClaudeProvider`:
76
76
  * ``env()`` always sets ``OPENCODE_CONFIG_DIR`` (agent-file discovery, see
77
77
  above) and ``OPENCODE_CONFIG`` (the OpenRouter upstream-routing pin, see
78
78
  ``coord/agents/opencode/routing.jsonc`` and :data:`ROUTING_PIN_PATH`).
79
+ * ``env()`` also seeds ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` to
80
+ :data:`OUTPUT_TOKEN_MAX_DEFAULT` (#2321) — unlike the two variables
81
+ above, this one *is* operator-overridable (it's a tuning knob, not a
82
+ safety mechanism); see :meth:`env`'s docstring for why it sits on the
83
+ opposite side of ``self._env`` from ``OPENCODE_CONFIG_DIR``/
84
+ ``OPENCODE_CONFIG``.
79
85
  """
80
86
 
81
87
  from __future__ import annotations
@@ -148,6 +154,46 @@ AGENTS_ROOT = Path(__file__).resolve().parent.parent / "agents" / "opencode"
148
154
  #: onto the worker's environment as ``OPENCODE_CONFIG`` by :meth:`env`.
149
155
  ROUTING_PIN_PATH = AGENTS_ROOT / "routing.jsonc"
150
156
 
157
+ #: Default value for ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` (#2321).
158
+ #:
159
+ #: opencode caps every request's output tokens at 32,000 (its internal
160
+ #: ``OY = 32000`` default) unless this environment variable overrides it —
161
+ #: and on a reasoning model that 32,000-token budget is *shared* with the
162
+ #: model's own reasoning, so a long reasoning block can consume the whole
163
+ #: cap before a single tool call is emitted. This is not hypothetical:
164
+ #: space-invaders#1 (``8c95182b0749``) spent all 32,000 tokens on one
165
+ #: 113 KB reasoning block, was truncated (``"reason":"length"``), emitted
166
+ #: no tool call, and exited 0 with nothing on disk — the run this issue is
167
+ #: named for.
168
+ #:
169
+ #: opencode computes the *effective* cap as
170
+ #: ``min(model.limit.output, $OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX)`` —
171
+ #: it is a ceiling suggestion, not a per-model override. Raising it can
172
+ #: never push a model's output above what that model's own
173
+ #: ``limit.output`` allows; it can only stop opencode's own 32,000
174
+ #: default from clamping a model that allows more. That makes a single
175
+ #: generous constant safe across every model dispatched through this
176
+ #: provider — no need to look up ``limit.output`` per model at dispatch
177
+ #: time.
178
+ #:
179
+ #: Chosen as 384,000 — the largest ``limit.output`` among the opencode
180
+ #: model definitions coord currently routes through (``oc-cheap`` /
181
+ #: ``opencode/deepseek-v4-flash`` and ``oc-heavy`` /
182
+ #: ``opencode/deepseek-v4-pro``, both 384,000; ``oc-mid`` /
183
+ #: ``opencode/glm-5.2`` is lower at 131,072 and is naturally clamped to
184
+ #: its own true ceiling by the ``min()`` above — never pushed past it).
185
+ #:
186
+ #: Both fleet binaries already read this variable (1.18.11 on dellserver —
187
+ #: the machine that hit the space-invaders#1 truncation — and 1.18.12 on
188
+ #: precision), and it is not gated behind ``OPENCODE_EXPERIMENTAL`` the
189
+ #: way other ``experimental*``-named flags are (that gating uses a
190
+ #: different internal helper; this flag's parser reads the env var
191
+ #: directly, unconditionally). No version-floor probe is needed here and
192
+ #: none should be added later on speculation: on a binary that predates
193
+ #: this flag it is simply inert and the cap silently stays at 32,000 —
194
+ #: never a hard failure.
195
+ OUTPUT_TOKEN_MAX_DEFAULT = 384_000
196
+
151
197
 
152
198
  class OpenCodeAgentNotFoundError(RuntimeError):
153
199
  """Raised when no committed opencode agent definition exists for a
@@ -641,35 +687,62 @@ class OpenCodeProvider(Provider):
641
687
  def env(self) -> dict[str, str]:
642
688
  """Extra environment variables for the worker subprocess.
643
689
 
644
- Two parts:
645
-
646
- 1. ``ProviderDef.env`` (already ``${VAR}``-expanded by config
690
+ Three parts, deliberately split across **both sides** of
691
+ ``self._env`` — that asymmetry is the whole point, see below:
692
+
693
+ 1. **#2321, seeded BEFORE ``self._env``, operator-overridable:**
694
+ ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` defaults to
695
+ :data:`OUTPUT_TOKEN_MAX_DEFAULT` (see that constant for the
696
+ full rationale). Unlike part 3 below, this is a *tuning knob*,
697
+ not a safety mechanism — an operator has a legitimate reason to
698
+ pin it lower (e.g. to cap cost) or higher (a future model with
699
+ a larger ``limit.output``), so it is seeded first and then
700
+ allowed to be shadowed by ``self._env`` like any other
701
+ ``ProviderDef.env`` entry. ``coord/config.py``'s
702
+ ``_parse_providers`` rejects a value at config-parse time that
703
+ opencode's own parser would silently discard (non-integer,
704
+ ``<= 0``, or containing whitespace/underscores) — see that
705
+ function for the validation opencode itself performs.
706
+ 2. ``ProviderDef.env`` (already ``${VAR}``-expanded by config
647
707
  parsing, #1706) — how an operator points a named ``opencode``
648
708
  provider definition at a specific set of credentials without
649
- baking them into the machine's agent unit.
650
- 2. **#1705, always set, not operator-overridable:**
651
- ``OPENCODE_CONFIG_DIR`` (:data:`AGENTS_ROOT` where the
652
- committed per-spec-type agent files live, see the module
653
- docstring for why an env var rather than a worktree file copy)
654
- and ``OPENCODE_CONFIG`` (:data:`ROUTING_PIN_PATH` — the
655
- OpenRouter routing pin, see ``coord/agents/opencode/routing.jsonc``).
656
- These are applied **after** ``self._env`` so a
657
- ``ProviderDef.env`` entry cannot accidentally (or maliciously,
658
- via a compromised ``coordinator.yml`` edit that isn't the
659
- security-reviewed agent-file path) shadow the deny-list
660
- discovery mechanism see :class:`OpenCodeAgentNotFoundError`'s
661
- docstring for why silently losing this would be bad. Verified
662
- empirically that ``OPENCODE_CONFIG_DIR`` is inert for a provider
663
- the operator hasn't configured credentials for (real opencode
664
- 1.18.11 run against a non-OpenRouter model with both variables
665
- set completed normally) see
709
+ baking them into the machine's agent unit. This is also where
710
+ an operator's override of part 1 above lands, since dict
711
+ ``.update()`` here happens after the default is seeded.
712
+ 3. **#1705, always set AFTER ``self._env``, NOT
713
+ operator-overridable:** ``OPENCODE_CONFIG_DIR``
714
+ (:data:`AGENTS_ROOT` — where the committed per-spec-type agent
715
+ files live, see the module docstring for why an env var rather
716
+ than a worktree file copy) and ``OPENCODE_CONFIG``
717
+ (:data:`ROUTING_PIN_PATH` the OpenRouter routing pin, see
718
+ ``coord/agents/opencode/routing.jsonc``). These are applied
719
+ **after** ``self._env`` so a ``ProviderDef.env`` entry cannot
720
+ accidentally (or maliciously, via a compromised
721
+ ``coordinator.yml`` edit that isn't the security-reviewed
722
+ agent-file path) shadow the deny-list discovery mechanism
723
+ see :class:`OpenCodeAgentNotFoundError`'s docstring for why
724
+ silently losing this would be bad. Verified empirically that
725
+ ``OPENCODE_CONFIG_DIR`` is inert for a provider the operator
726
+ hasn't configured credentials for (real opencode 1.18.11 run
727
+ against a non-OpenRouter model with both variables set
728
+ completed normally) — see
666
729
  ``test_opencode_routing_pin_inert_without_openrouter_credential_end_to_end``.
667
730
 
731
+ The asymmetry: part 1 is a default an operator must be able to
732
+ override (seeded *before* the merge, operator wins); part 3 is a
733
+ safety mechanism an operator must never be able to override (set
734
+ *after* the merge, coord wins). Do not "fix" this into a single
735
+ consistent ordering — the two groups need opposite precedence on
736
+ purpose.
737
+
668
738
  Returns a fresh dict each call.
669
739
  """
670
- merged = dict(self._env)
671
- merged["OPENCODE_CONFIG_DIR"] = str(AGENTS_ROOT)
672
- merged["OPENCODE_CONFIG"] = str(ROUTING_PIN_PATH)
740
+ merged: dict[str, str] = {
741
+ "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX": str(OUTPUT_TOKEN_MAX_DEFAULT),
742
+ }
743
+ merged.update(self._env) # operator wins over the tuning-knob default
744
+ merged["OPENCODE_CONFIG_DIR"] = str(AGENTS_ROOT) # coord wins, unchanged
745
+ merged["OPENCODE_CONFIG"] = str(ROUTING_PIN_PATH) # coord wins, unchanged
673
746
  return merged
674
747
 
675
748
  def parse_log(
@@ -1349,6 +1349,93 @@ def test_providers_definition_env_non_string_value_raises(tmp_path: Path) -> Non
1349
1349
  load(p)
1350
1350
 
1351
1351
 
1352
+ # ── providers.definitions[*].env OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX (#2321) ─
1353
+
1354
+
1355
+ def test_providers_output_token_max_valid_value_accepted(tmp_path: Path) -> None:
1356
+ """A bare positive-integer string is accepted and stored verbatim."""
1357
+ p = tmp_path / "coordinator.yml"
1358
+ p.write_text(
1359
+ _MIN_CONFIG
1360
+ + "providers:\n"
1361
+ " definitions:\n"
1362
+ " oc:\n"
1363
+ " type: opencode\n"
1364
+ " env:\n"
1365
+ " OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: '131072'\n"
1366
+ )
1367
+ cfg = load(p)
1368
+ env = cfg.providers.definitions["oc"].env
1369
+ assert env["OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"] == "131072"
1370
+
1371
+
1372
+ @pytest.mark.parametrize(
1373
+ "bad_value",
1374
+ [
1375
+ "131072 ", # trailing whitespace — opencode's parser silently discards
1376
+ " 131072", # leading whitespace
1377
+ "131_072", # underscore digit-grouping — Number() coercion rejects
1378
+ "0", # not > 0
1379
+ "-1", # not > 0, has a sign
1380
+ "1.5", # decimal point
1381
+ "unlimited", # non-numeric
1382
+ "", # empty
1383
+ ],
1384
+ )
1385
+ def test_providers_output_token_max_bad_value_raises(
1386
+ tmp_path: Path, bad_value: str
1387
+ ) -> None:
1388
+ """A value opencode's own parser would silently discard is rejected
1389
+ loudly at config-parse time (#2321) instead of silently reverting to
1390
+ the 32000 default with no warning."""
1391
+ p = tmp_path / "coordinator.yml"
1392
+ p.write_text(
1393
+ _MIN_CONFIG
1394
+ + "providers:\n"
1395
+ " definitions:\n"
1396
+ " oc:\n"
1397
+ " type: opencode\n"
1398
+ " env:\n"
1399
+ f" OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: {bad_value!r}\n"
1400
+ )
1401
+ with pytest.raises(ConfigError, match="OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"):
1402
+ load(p)
1403
+
1404
+
1405
+ def test_providers_output_token_max_absent_does_not_raise(tmp_path: Path) -> None:
1406
+ """Not setting the key at all is fine — env() supplies its own default."""
1407
+ p = tmp_path / "coordinator.yml"
1408
+ p.write_text(
1409
+ _MIN_CONFIG
1410
+ + "providers:\n"
1411
+ " definitions:\n"
1412
+ " oc:\n"
1413
+ " type: opencode\n"
1414
+ )
1415
+ cfg = load(p)
1416
+ assert "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX" not in cfg.providers.definitions["oc"].env
1417
+
1418
+
1419
+ def test_providers_output_token_max_validated_after_var_expansion(
1420
+ tmp_path: Path, monkeypatch
1421
+ ) -> None:
1422
+ """The value is validated AFTER ${VAR} expansion — an expanded bad
1423
+ value is caught, not just a literal one."""
1424
+ monkeypatch.setenv("COORD_TEST_BAD_TOKEN_MAX", "not-a-number")
1425
+ p = tmp_path / "coordinator.yml"
1426
+ p.write_text(
1427
+ _MIN_CONFIG
1428
+ + "providers:\n"
1429
+ " definitions:\n"
1430
+ " oc:\n"
1431
+ " type: opencode\n"
1432
+ " env:\n"
1433
+ " OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: '${COORD_TEST_BAD_TOKEN_MAX}'\n"
1434
+ )
1435
+ with pytest.raises(ConfigError, match="OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"):
1436
+ load(p)
1437
+
1438
+
1352
1439
  def test_providers_extra_args_non_string_element_raises(tmp_path: Path) -> None:
1353
1440
  """extra_args elements must be strings."""
1354
1441
  p = tmp_path / "coordinator.yml"
@@ -1651,6 +1651,43 @@ def test_zero_commit_advisory_is_not_reported_healthy(monkeypatch, config) -> No
1651
1651
  assert res.recovered is False
1652
1652
 
1653
1653
 
1654
+ def test_zero_commit_advisory_with_deleted_branch_is_not_reported_healthy(
1655
+ monkeypatch, config
1656
+ ) -> None:
1657
+ """#2324: space-invaders#1's exact shape — a genuine zero-commit
1658
+ advisory whose branch has already been deleted. Unlike the other tests
1659
+ in this section, `_work_advisory_commits_ahead` is deliberately NOT
1660
+ stubbed here — this exercises the real call into
1661
+ `github_ops.branch_commits_ahead_for_assignment`, mocking only `gh`
1662
+ itself, to prove the full chain (not just the diagnose-side branching)
1663
+ reads a confirmed-404 head branch as 0, not None. Before #2324 this
1664
+ reported "could not be confirmed" and steered toward `coord drive
1665
+ --accept-advisory`, which assumes commits exist."""
1666
+ _stub(monkeypatch, session="dead")
1667
+
1668
+ def _gh_dispatch(*args, **kwargs):
1669
+ path = args[1] if len(args) > 1 else ""
1670
+ if path == "repos/acme/api/compare/main...issue-42-deleted":
1671
+ raise RuntimeError("gh: Not Found (HTTP 404)")
1672
+ if path == "repos/acme/api/git/refs/heads/issue-42-deleted":
1673
+ raise RuntimeError("gh: Not Found (HTTP 404)")
1674
+ if path == "repos/acme/api/git/refs/heads/main":
1675
+ return "{}"
1676
+ raise AssertionError(f"unexpected _gh call: {args!r}")
1677
+
1678
+ monkeypatch.setattr("coord.github_ops._gh", _gh_dispatch)
1679
+
1680
+ a = _assign(aid="w-advisory-deleted", status="advisory", branch="issue-42-deleted")
1681
+ board = Board(completed=[a])
1682
+ res = diagnose.diagnose_stage(board, config, "api", 42, "work")
1683
+
1684
+ assert not any("looks healthy" in f for f in res.findings), res.findings
1685
+ assert not any("could not be confirmed" in f for f in res.findings), res.findings
1686
+ assert any("0 commits" in f for f in res.findings), res.findings
1687
+ assert any("coord retry w-advisory-deleted" in f for f in res.findings), res.findings
1688
+ assert res.recovered is False
1689
+
1690
+
1654
1691
  def test_zero_commit_advisory_on_a_plan_row_is_not_reported_healthy(
1655
1692
  monkeypatch, config
1656
1693
  ) -> None: