code-coordinator 0.5.112__tar.gz → 0.5.114__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.112 → code_coordinator-0.5.114}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/_board_mapping.py +3 -0
  5. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agent.py +104 -1
  6. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/config.py +59 -0
  7. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/api/generated.ts +1 -0
  8. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/db.py +13 -0
  9. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/models.py +21 -0
  10. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notify.py +18 -0
  11. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/providers/opencode.py +96 -23
  12. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/reconcile.py +47 -0
  13. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/serve_app.py +5 -0
  14. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/state.py +50 -0
  15. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent.py +74 -0
  16. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_zero_commit.py +200 -0
  17. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cargo_cache.py +18 -0
  18. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config.py +87 -0
  19. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_providers.py +34 -0
  20. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_serve.py +18 -0
  21. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_state.py +105 -0
  22. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/tests/fixtures/board_sample.json +3 -0
  23. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.claude/commands/board.md +0 -0
  24. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.claude/commands/complete-session.md +0 -0
  25. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.claude/commands/coordinator.md +0 -0
  26. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.githooks/_lib.sh +0 -0
  27. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.githooks/post-checkout +0 -0
  28. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.githooks/post-commit +0 -0
  29. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.githooks/post-merge +0 -0
  30. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/coord-ci-acceptance.yml +0 -0
  32. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/workflows/auto-release.yml +0 -0
  33. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/workflows/cargo-test.yml +0 -0
  34. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/workflows/publish.yml +0 -0
  35. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/workflows/release-tui.yml +0 -0
  36. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.github/workflows/test.yml +0 -0
  37. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/.gitignore +0 -0
  38. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/CLAUDE.md +0 -0
  39. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/GOAL.md +0 -0
  40. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/LICENSE +0 -0
  41. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/MANIFEST.in +0 -0
  42. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/README.md +0 -0
  43. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/SOURCES.txt +0 -0
  44. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/dependency_links.txt +0 -0
  45. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/entry_points.txt +0 -0
  46. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/requires.txt +0 -0
  47. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/scm_file_list.json +0 -0
  48. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/code_coordinator.egg-info/top_level.txt +0 -0
  49. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/__init__.py +0 -0
  50. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/acceptance.py +0 -0
  51. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/acceptance_drivers.py +0 -0
  52. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agent_app.py +0 -0
  53. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agent_update.py +0 -0
  54. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agents/opencode/.gitignore +0 -0
  55. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agents/opencode/agents/work.md +0 -0
  56. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/agents/opencode/routing.jsonc +0 -0
  57. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/audit.py +0 -0
  58. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/auto_loop.py +0 -0
  59. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/block_log.py +0 -0
  60. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/board_bool_guard.py +0 -0
  61. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/ci_github.py +0 -0
  68. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/ci_store.py +0 -0
  69. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/claim.py +0 -0
  70. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/client.py +0 -0
  72. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/__init__.py +0 -0
  73. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/_common.py +0 -0
  74. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/acceptance.py +0 -0
  75. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/agent_ops.py +0 -0
  76. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/audit.py +0 -0
  77. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/chat.py +0 -0
  78. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/dispatch.py +0 -0
  79. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/dispatch_workers.py +0 -0
  80. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/release.py +0 -0
  92. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/repo.py +0 -0
  93. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/report.py +0 -0
  94. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/review.py +0 -0
  95. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/scorecard.py +0 -0
  96. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/sessions.py +0 -0
  97. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/setup.py +0 -0
  98. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/status.py +0 -0
  99. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/.gitignore +0 -0
  112. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/components.json +0 -0
  113. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  114. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  115. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  116. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  117. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  118. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  119. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  120. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  121. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  122. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/index.html +0 -0
  123. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  124. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/sw.js +0 -0
  125. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  126. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  127. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  128. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  129. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  130. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  131. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  132. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  133. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  134. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  135. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/eslint.config.js +0 -0
  136. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/index.html +0 -0
  137. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  138. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/package-lock.json +0 -0
  139. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/package.json +0 -0
  140. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  141. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/playwright.config.ts +0 -0
  142. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/postcss.config.js +0 -0
  143. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  144. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  145. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  146. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/App.tsx +0 -0
  147. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/api/client.ts +0 -0
  148. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  149. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  150. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  151. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  152. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  153. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  154. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  155. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  156. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  157. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  158. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  159. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  160. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  161. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  162. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  163. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  164. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  165. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  166. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  167. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  168. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  169. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  170. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  171. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  172. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  173. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  174. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  175. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  176. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  177. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  178. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  179. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  180. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  181. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  182. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/index.css +0 -0
  183. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  184. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  185. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/main.tsx +0 -0
  186. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  187. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  188. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  189. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  190. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  191. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  192. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  193. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  194. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  195. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  196. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  197. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  198. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  199. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  200. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  201. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  202. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  203. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  204. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  205. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  206. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  207. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  208. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  209. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/tailwind.config.js +0 -0
  210. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/tsconfig.json +0 -0
  211. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  212. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dashboard/webapp/vite.config.ts +0 -0
  213. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dead_end.py +0 -0
  214. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/README.md +0 -0
  215. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-agent.service +0 -0
  216. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-db-backup.service +0 -0
  217. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-db-backup.sh +0 -0
  218. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-db-backup.timer +0 -0
  219. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-drive-queue.service +0 -0
  220. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-drive-queue.timer +0 -0
  221. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-notify.service +0 -0
  222. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-notify.timer +0 -0
  223. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-release-propagate.service +0 -0
  224. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-release-propagate.timer +0 -0
  225. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-release-window.service +0 -0
  226. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-release-window.timer +0 -0
  227. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-serve.service +0 -0
  228. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-web-dist-build.service +0 -0
  229. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-web-dist-build.timer +0 -0
  230. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy/coord-web.service +0 -0
  231. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy_manifest.py +0 -0
  232. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deploy_units.py +0 -0
  233. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/deps.py +0 -0
  234. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/diagnose.py +0 -0
  235. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dispatch.py +0 -0
  236. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/dist_name.py +0 -0
  237. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/drive.py +0 -0
  238. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/drive_queue.py +0 -0
  239. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/drive_state.py +0 -0
  240. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/events.py +0 -0
  241. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/failure_class.py +0 -0
  242. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/filelock.py +0 -0
  243. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/fleet_config_health.py +0 -0
  244. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/freshness.py +0 -0
  245. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/gate_a.py +0 -0
  246. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/gate_b.py +0 -0
  247. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/gate_snapshot.py +0 -0
  248. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/gates.py +0 -0
  249. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/github_ops.py +0 -0
  250. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/goal.py +0 -0
  251. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/graph_health.py +0 -0
  252. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/__init__.py +0 -0
  253. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/aggregate.py +0 -0
  254. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/__init__.py +0 -0
  255. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/agent_install.py +0 -0
  256. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/cargo_targets.py +0 -0
  257. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/claude_binary.py +0 -0
  258. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/deploy_lane_facts.py +0 -0
  259. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/disk.py +0 -0
  260. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/fleet_board.py +0 -0
  261. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  262. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/fleet_phantom.py +0 -0
  263. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/fleet_unit_drift.py +0 -0
  264. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/graph.py +0 -0
  265. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/graphify_cli.py +0 -0
  266. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/index_lock.py +0 -0
  267. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/plan_usage.py +0 -0
  268. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/repo_state.py +0 -0
  269. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/spawned_coord.py +0 -0
  270. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/timer_active.py +0 -0
  271. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/toolchain.py +0 -0
  272. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/unit_drift.py +0 -0
  273. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/unit_enablement.py +0 -0
  274. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/checks/worktrees.py +0 -0
  275. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/cli.py +0 -0
  276. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/context.py +0 -0
  277. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/fleet_snapshot.py +0 -0
  278. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/models.py +0 -0
  279. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/pypi.py +0 -0
  280. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/registry.py +0 -0
  281. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/render.py +0 -0
  282. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/health/units.py +0 -0
  283. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/hooks.py +0 -0
  284. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/housekeeping.py +0 -0
  285. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/interactive.py +0 -0
  286. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/issue_store.py +0 -0
  287. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/liveness_auditor.py +0 -0
  288. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/machine_pause.py +0 -0
  289. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/merge_queue.py +0 -0
  290. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/milestone_chat.py +0 -0
  291. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/milestone_dispatch.py +0 -0
  292. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/milestone_gate.py +0 -0
  293. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/milestone_order.py +0 -0
  294. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/mock_author.py +0 -0
  295. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/network.py +0 -0
  296. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/new_issue_chat.py +0 -0
  297. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/__init__.py +0 -0
  298. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/baseline.py +0 -0
  299. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/cli.py +0 -0
  300. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/collect.py +0 -0
  301. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/digest.py +0 -0
  302. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/models.py +0 -0
  303. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/predicate.py +0 -0
  304. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/service.py +0 -0
  305. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/store.py +0 -0
  306. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/notifier/transport.py +0 -0
  307. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/openapi.py +0 -0
  308. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/overlap_fence.py +0 -0
  309. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/overlap_predict.py +0 -0
  310. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/parentage.py +0 -0
  311. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/parentage_github.py +0 -0
  312. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/pipeline.py +0 -0
  313. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/plan_parser.py +0 -0
  314. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/plans.py +0 -0
  315. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/platform_paths.py +0 -0
  316. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/portal_bridge.py +0 -0
  317. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/portal_store.py +0 -0
  318. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/portal_sync.py +0 -0
  319. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/pr_body_lint.py +0 -0
  320. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/prereqs.py +0 -0
  321. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/progress.py +0 -0
  322. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/providers/__init__.py +0 -0
  323. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/providers/base.py +0 -0
  324. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/providers/claude.py +0 -0
  325. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/providers/claude_pty.py +0 -0
  326. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/queue_diagnose.py +0 -0
  327. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/refine_chat.py +0 -0
  328. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/release_cordon.py +0 -0
  329. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/release_propagate.py +0 -0
  330. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/release_verify.py +0 -0
  331. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/release_window.py +0 -0
  332. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/repo_edit.py +0 -0
  333. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/repo_onboard.py +0 -0
  334. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/reports.py +0 -0
  335. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/revalidate.py +0 -0
  336. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/review.py +0 -0
  337. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/scorecard.py +0 -0
  338. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/skills/update-issue/SKILL.md +0 -0
  339. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/smoke.py +0 -0
  340. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/spend_ceiling.py +0 -0
  341. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/split_work.py +0 -0
  342. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/stage_projection.py +0 -0
  343. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/test_author.py +0 -0
  344. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/test_chat.py +0 -0
  345. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/test_orchestrator.py +0 -0
  346. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/test_report.py +0 -0
  347. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/tui_release.py +0 -0
  348. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/usage.py +0 -0
  349. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/usage_limits.py +0 -0
  350. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/usage_rollup.py +0 -0
  351. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coord/worker_events.py +0 -0
  352. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/coordinator.example.yml +0 -0
  353. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-agent.service +0 -0
  354. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-db-backup.service +0 -0
  355. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-db-backup.sh +0 -0
  356. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-db-backup.timer +0 -0
  357. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-drive-queue.service +0 -0
  358. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-drive-queue.timer +0 -0
  359. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-notify.service +0 -0
  360. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-notify.timer +0 -0
  361. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-release-propagate.service +0 -0
  362. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-release-propagate.timer +0 -0
  363. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-release-window.service +0 -0
  364. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-release-window.timer +0 -0
  365. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-serve.service +0 -0
  366. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-web-dist-build.service +0 -0
  367. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-web-dist-build.sh +0 -0
  368. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-web-dist-build.timer +0 -0
  369. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-web-rollback.sh +0 -0
  370. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/coord-web.service +0 -0
  371. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/deploy/node-shim.sh +0 -0
  372. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/AGENT_OPERATIONS.md +0 -0
  373. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/ARCHITECTURE.md +0 -0
  374. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/ARCH_SECURITY_GATES.md +0 -0
  375. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/COCKPIT.md +0 -0
  376. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/CONTROL_CENTER.md +0 -0
  377. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/COST_DISCIPLINE.md +0 -0
  378. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/CROSS_PLATFORM.md +0 -0
  379. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/CUSTOMER_PORTAL.md +0 -0
  380. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/DRIVE_QUEUE.md +0 -0
  381. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/EPHEMERAL_WORKERS.md +0 -0
  382. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/FORGE_MIGRATION.md +0 -0
  383. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/GRAPHIFY_SETUP.md +0 -0
  384. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/ISSUE_GUIDANCE.md +0 -0
  385. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/MAC_MINI.md +0 -0
  386. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  387. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/NOTIFIER.md +0 -0
  388. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/OPENCODE_VERIFICATION.md +0 -0
  389. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/OPERATING_GOTCHAS.md +0 -0
  390. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/ORACLE_LOOP.md +0 -0
  391. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/PHONE_WEBAPP.md +0 -0
  392. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/PIPELINE_V2.md +0 -0
  393. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/PLATFORM_EVOLUTION.md +0 -0
  394. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/SECOND_BACKEND.md +0 -0
  395. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/STORE_SERVICE.md +0 -0
  396. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  397. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/WEB_CONTROL_CENTER.md +0 -0
  398. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/mocks/web/README.md +0 -0
  399. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/mocks/web/_tokens.css +0 -0
  400. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/mocks/web/issue-detail.html +0 -0
  401. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/mocks/web/pipeline-narrow.html +0 -0
  402. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/docs/mocks/web/pipeline-wide.html +0 -0
  403. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/graphify-out/.gitignore +0 -0
  404. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/install-agent.sh +0 -0
  405. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/pyproject.toml +0 -0
  406. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/audit_review_verdict_overrides.py +0 -0
  407. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  408. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/build-worker-image.sh +0 -0
  409. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/coordinator-machine.py +0 -0
  410. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/epic-down.sh +0 -0
  411. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/epic-up.sh +0 -0
  412. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/preflight.sh +0 -0
  413. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/provision-worker.sh +0 -0
  414. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  415. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  416. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/azure-workers/verify-github-token.sh +0 -0
  417. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/codegen.py +0 -0
  418. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/coord-test-runner.sh +0 -0
  419. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/drive-batch.sh +0 -0
  420. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/gen_board_fixture.py +0 -0
  421. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/next_release_tag.py +0 -0
  422. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/run_tests_in_populated_home.sh +0 -0
  423. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/run_tests_without_gh.sh +0 -0
  424. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/smoke_437_interactive.py +0 -0
  425. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/setup.cfg +0 -0
  429. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  432. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/contract.md +0 -0
  433. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/manifest.yml +0 -0
  434. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  435. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  436. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  437. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  438. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-37/conftest.py +0 -0
  439. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-37/contract.md +0 -0
  440. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-37/manifest.yml +0 -0
  441. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  442. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  443. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/contract.md +0 -0
  444. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/manifest.yml +0 -0
  445. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  446. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  447. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  448. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  449. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  450. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  451. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  452. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  453. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  454. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  455. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/contract.md +0 -0
  456. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  457. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  458. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/manifest.yml +0 -0
  459. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  460. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-51/tsconfig.json +0 -0
  461. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  462. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/conftest.py +0 -0
  463. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/board-pipeline-basic.json +0 -0
  464. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  465. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  466. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  467. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  468. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/all_pass.json +0 -0
  469. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  470. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/mixed_fail.json +0 -0
  471. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  472. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  473. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/skip.json +0 -0
  474. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/playwright/truncated.json +0 -0
  475. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  476. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  477. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  478. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  479. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  480. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  481. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  482. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  483. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_acceptance.py +0 -0
  484. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_acceptance_drivers.py +0 -0
  485. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_api_error.py +0 -0
  486. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_app.py +0 -0
  487. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_branch_base.py +0 -0
  488. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_branch_capture.py +0 -0
  489. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_config_free_1712.py +0 -0
  490. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_deploy_units_endpoint.py +0 -0
  491. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_dirty_worktree.py +0 -0
  492. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_graph_self_heal.py +0 -0
  493. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_health_h3.py +0 -0
  494. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_idle_restart.py +0 -0
  495. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_push_failure.py +0 -0
  496. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_reap.py +0 -0
  497. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_repos_and_pull.py +0 -0
  498. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_restart_services_endpoint.py +0 -0
  499. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_startup_diagnostics.py +0 -0
  500. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_update.py +0 -0
  501. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_update_bluegreen.py +0 -0
  502. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_agent_usage_limit.py +0 -0
  503. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_ambient_home_isolation.py +0 -0
  504. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_approve_reject_plan.py +0 -0
  505. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_approve_usage_gate.py +0 -0
  506. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_assignment_already_recorded_daemon.py +0 -0
  507. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_audit_log.py +0 -0
  508. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_audit_outcome.py +0 -0
  509. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_audit_query.py +0 -0
  510. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_auto_loop.py +0 -0
  511. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_auto_release_publish_2035.py +0 -0
  512. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_base_checkout_restore.py +0 -0
  513. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_block_log.py +0 -0
  514. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_cap_762.py +0 -0
  515. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_fixture.py +0 -0
  516. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_read_path.py +0 -0
  517. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_service.py +0 -0
  518. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_state.py +0 -0
  519. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_board_wire.py +0 -0
  520. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_brain.py +0 -0
  521. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_branch_model.py +0 -0
  522. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_bug_intake.py +0 -0
  523. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_build_worker_image_env_update.py +0 -0
  524. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_ci_acceptance_gate_1950.py +0 -0
  525. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_acceptance.py +0 -0
  529. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_assign.py +0 -0
  530. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  531. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_assign_interactive_remote.py +0 -0
  532. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_assign_provider.py +0 -0
  533. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  534. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_audit.py +0 -0
  535. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_chat_continue.py +0 -0
  536. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_diagnose_config_provenance.py +0 -0
  537. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_diagnose_graph.py +0 -0
  538. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_doctor.py +0 -0
  539. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_doctor_config_free_1801.py +0 -0
  540. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  541. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_drive.py +0 -0
  542. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_drive_queue.py +0 -0
  543. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_issue_create_label.py +0 -0
  549. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_issue_reopen.py +0 -0
  550. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_merge.py +0 -0
  551. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_assign.py +0 -0
  552. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_capture.py +0 -0
  553. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_chat_add_child.py +0 -0
  554. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_dispatch.py +0 -0
  555. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_gate_b.py +0 -0
  556. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_gate_c.py +0 -0
  557. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_order.py +0 -0
  558. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  559. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_milestone_ship.py +0 -0
  560. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_network.py +0 -0
  561. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_new_issue_chat.py +0 -0
  562. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_plans.py +0 -0
  563. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_portal.py +0 -0
  564. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_pull_artifact.py +0 -0
  565. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_queue.py +0 -0
  566. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_reattach_sessions.py +0 -0
  567. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_refine_board.py +0 -0
  568. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_release_preflight.py +0 -0
  569. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_release_propagate.py +0 -0
  570. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_release_window.py +0 -0
  571. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_repo_2220.py +0 -0
  572. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_scorecard.py +0 -0
  573. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_set_review_findings.py +0 -0
  574. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_advisory_terminal.py +0 -0
  575. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_merge_queue.py +0 -0
  576. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_provider.py +0 -0
  577. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_review_finalizing.py +0 -0
  578. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_test_failed_tag.py +0 -0
  579. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_status_usage_limit.py +0 -0
  580. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_sync_comments_873.py +0 -0
  581. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_test_plan.py +0 -0
  582. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_track.py +0 -0
  583. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_tui_update.py +0 -0
  584. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cli_wait.py +0 -0
  585. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_client_base_install.py +0 -0
  586. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_comments.py +0 -0
  587. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_completion_summary.py +0 -0
  588. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config_acceptance.py +0 -0
  589. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config_audit.py +0 -0
  590. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config_pricing.py +0 -0
  591. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  592. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_config_usage_gate.py +0 -0
  593. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_conflict_fix.py +0 -0
  594. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_conflict_fix_semantic.py +0 -0
  595. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coord_test.py +0 -0
  596. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coord_test_runner_baseline.py +0 -0
  597. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coord_test_runner_routing.py +0 -0
  598. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coord_test_runner_toolchain.py +0 -0
  599. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coord_web_sse_restart_live.py +0 -0
  600. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_coordinator_machine.py +0 -0
  601. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_cross_platform_imports.py +0 -0
  602. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dashboard.py +0 -0
  603. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dashboard_fixture.py +0 -0
  604. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dashboard_terminal.py +0 -0
  605. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dashboard_terminal_live.py +0 -0
  606. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_db.py +0 -0
  607. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dead_end.py +0 -0
  608. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_coord_db_backup.py +0 -0
  609. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_coord_web_dist.py +0 -0
  610. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_coord_web_rollback.py +0 -0
  611. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_drive_queue_unit.py +0 -0
  612. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_manifest.py +0 -0
  613. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_units_lane.py +0 -0
  614. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deploy_web_unit.py +0 -0
  615. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_deps.py +0 -0
  616. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_diagnose.py +0 -0
  617. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dispatch.py +0 -0
  618. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dispatch_target_validation.py +0 -0
  619. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_dist_name.py +0 -0
  620. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_done_housekeeping.py +0 -0
  621. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_drive.py +0 -0
  622. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_drive_queue.py +0 -0
  623. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_drive_state.py +0 -0
  624. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_drive_tmux.py +0 -0
  625. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_epic_up_capability_detection.py +0 -0
  626. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  627. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_epic_up_image_provenance.py +0 -0
  628. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_errors.py +0 -0
  629. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_events.py +0 -0
  630. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_failure_class.py +0 -0
  631. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_filelock.py +0 -0
  632. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  633. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_fix_of_force_override.py +0 -0
  634. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_fleet_config_health.py +0 -0
  635. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_fleet_health_probes.py +0 -0
  636. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_fleet_health_snapshot.py +0 -0
  637. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_freshness.py +0 -0
  638. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_gate_a.py +0 -0
  639. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_gate_b.py +0 -0
  640. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_gate_snapshot_staleness.py +0 -0
  641. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_gates.py +0 -0
  642. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  643. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_generated_types_fixture.py +0 -0
  644. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_github_ops.py +0 -0
  645. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_goal.py +0 -0
  646. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_graph_health.py +0 -0
  647. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_graph_selfheal_absent_2237.py +0 -0
  648. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_handoff.py +0 -0
  649. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_checks.py +0 -0
  650. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_cli.py +0 -0
  651. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_cli_graph.py +0 -0
  652. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_config.py +0 -0
  653. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_context.py +0 -0
  654. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_deploy_lane_facts.py +0 -0
  655. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_incident_regression.py +0 -0
  656. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_pypi.py +0 -0
  657. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_registry.py +0 -0
  658. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_timer_active.py +0 -0
  659. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_toolchain.py +0 -0
  660. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_unit_drift.py +0 -0
  661. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_health_unit_enablement.py +0 -0
  662. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_hooks.py +0 -0
  663. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_human_attended_437.py +0 -0
  664. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_init.py +0 -0
  665. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_integration.py +0 -0
  666. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_briefing_echo.py +0 -0
  667. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_prefill_state.py +0 -0
  668. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_session_relaunch.py +0 -0
  669. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_test_verdict_backstop.py +0 -0
  670. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_token_attribution.py +0 -0
  671. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_interactive_worktree.py +0 -0
  672. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_issue_store_seam.py +0 -0
  673. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_liveness_auditor.py +0 -0
  674. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_liveness_notify.py +0 -0
  675. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_machine_pause.py +0 -0
  676. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_merge_queue.py +0 -0
  677. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_merge_verify.py +0 -0
  678. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_milestone_chat.py +0 -0
  679. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_milestone_dispatch.py +0 -0
  680. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_milestone_gate.py +0 -0
  681. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_milestone_order.py +0 -0
  682. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_milestone_seam.py +0 -0
  683. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_mock_author.py +0 -0
  684. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_model_tiering.py +0 -0
  685. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_models.py +0 -0
  686. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_models_config_labels.py +0 -0
  687. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_needs_attention.py +0 -0
  688. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_network.py +0 -0
  689. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_new_issue_chat.py +0 -0
  690. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_next_release_tag.py +0 -0
  691. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_no_direct_gh_calls.py +0 -0
  692. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_node_shim.py +0 -0
  693. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_baseline.py +0 -0
  694. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_cli.py +0 -0
  695. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_collect.py +0 -0
  696. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_config.py +0 -0
  697. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_drive_seam.py +0 -0
  698. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_isolation.py +0 -0
  699. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_predicate.py +0 -0
  700. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_quiet_hours.py +0 -0
  701. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notifier_service.py +0 -0
  702. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notify.py +0 -0
  703. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_notify_drain.py +0 -0
  704. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_openapi.py +0 -0
  705. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_operational_defaults.py +0 -0
  706. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_overlap_fence.py +0 -0
  707. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_overlap_predict.py +0 -0
  708. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_packaged_deploy_units.py +0 -0
  709. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_parentage.py +0 -0
  710. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_paste_landed.py +0 -0
  711. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_pipeline.py +0 -0
  712. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_plan_followup_approve_plan_command.py +0 -0
  713. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_plan_followup_pr_command.py +0 -0
  714. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_plan_followup_review_command.py +0 -0
  715. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_plan_only.py +0 -0
  716. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_plan_parser.py +0 -0
  717. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_platform_paths.py +0 -0
  718. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_portal_bridge.py +0 -0
  719. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_portal_config.py +0 -0
  720. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_portal_sync.py +0 -0
  721. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_pr_body_lint.py +0 -0
  722. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_prereqs.py +0 -0
  723. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_production_db_guard.py +0 -0
  724. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_progress.py +0 -0
  725. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_provider_seam.py +0 -0
  726. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_providers_config_labels.py +0 -0
  727. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_providers_pty.py +0 -0
  728. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_quiet_hours.py +0 -0
  729. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_quiet_hours_store_2146.py +0 -0
  730. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reap_merged_sessions.py +0 -0
  731. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reap_stale_interactive_tick.py +0 -0
  732. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reconcile_branch.py +0 -0
  733. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reconcile_completions.py +0 -0
  734. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reconcile_merges.py +0 -0
  735. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reconcile_no_agent_record.py +0 -0
  736. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reconcile_usage_limit_done.py +0 -0
  737. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_refine_chat.py +0 -0
  738. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_cordon_2101.py +0 -0
  739. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  740. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_cordon_deadlock_2240.py +0 -0
  741. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_propagate.py +0 -0
  742. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_unified_1242.py +0 -0
  743. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_verify.py +0 -0
  744. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_release_window.py +0 -0
  745. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_remote_auto_prune.py +0 -0
  746. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_remote_interactive_reaper.py +0 -0
  747. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_repo_edit_2220.py +0 -0
  748. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_repo_graph_fleet_2237.py +0 -0
  749. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_repo_onboard_2220.py +0 -0
  750. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_report_result_push.py +0 -0
  751. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_reports.py +0 -0
  752. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_retry.py +0 -0
  753. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_retry_advisory_1606.py +0 -0
  754. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_retry_type_1636.py +0 -0
  755. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_revalidate.py +0 -0
  756. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review.py +0 -0
  757. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_end_review_without_verdict.py +0 -0
  758. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_parse_failure_diagnostic.py +0 -0
  759. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_reaffirm.py +0 -0
  760. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_state.py +0 -0
  761. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_verdict_backstop.py +0 -0
  762. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_verdict_override_audit.py +0 -0
  763. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_verdict_relay.py +0 -0
  764. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_review_zero_commits.py +0 -0
  765. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_scoped_review_wiring.py +0 -0
  766. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_scorecard.py +0 -0
  767. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_serve_app_board_trim.py +0 -0
  768. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_session.py +0 -0
  769. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_slice_issue_attribution.py +0 -0
  770. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_smoke.py +0 -0
  771. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_smoke_live_checkout_restore.py +0 -0
  772. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_smoke_workflow.py +0 -0
  773. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_spend_ceiling.py +0 -0
  774. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_spend_ceiling_coordinator.py +0 -0
  775. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_split.py +0 -0
  776. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_split_work.py +0 -0
  777. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_stage_projection.py +0 -0
  778. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_stalled_pipeline.py +0 -0
  779. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_state_review_findings_daemon.py +0 -0
  780. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_status_fleet_footer.py +0 -0
  781. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_stop_1567.py +0 -0
  782. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_stuck.py +0 -0
  783. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_terminal_command.py +0 -0
  784. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_author.py +0 -0
  785. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_chat.py +0 -0
  786. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_orchestrator.py +0 -0
  787. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_report.py +0 -0
  788. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_verdict_parsing.py +0 -0
  789. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_test_verdict_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_thin_client_board_audit.py +0 -0
  791. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_thin_client_config_load_1080.py +0 -0
  792. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_thin_client_daemon_routing_906.py +0 -0
  793. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_tmux_host.py +0 -0
  794. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_tmux_session.py +0 -0
  795. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_usage.py +0 -0
  797. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_usage_limits.py +0 -0
  798. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_usage_rollup.py +0 -0
  799. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_venv_live_install_2121.py +0 -0
  800. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_version_single_source.py +0 -0
  801. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_watch.py +0 -0
  802. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  803. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worker_events.py +0 -0
  804. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worker_image_pin_sync.py +0 -0
  805. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worker_safety.py +0 -0
  806. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worker_test_scoping.py +0 -0
  807. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worktree.py +0 -0
  808. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  809. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/Cargo.lock +0 -0
  810. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/Cargo.toml +0 -0
  811. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/cargo-config-local-quadraui.toml.example +0 -0
  812. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/audit.rs +0 -0
  813. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/chat.rs +0 -0
  814. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/data.rs +0 -0
  815. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/dialogs.rs +0 -0
  816. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/drive.rs +0 -0
  817. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/drive_queue.rs +0 -0
  818. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/escalation.rs +0 -0
  819. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/events.rs +0 -0
  820. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/fixtures.rs +0 -0
  821. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/fleet_health.rs +0 -0
  822. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/fleet_sessions.rs +0 -0
  823. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/fleet_terminals.rs +0 -0
  824. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/format.rs +0 -0
  825. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/milestone_dag.rs +0 -0
  826. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/mod.rs +0 -0
  827. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/msv.rs +0 -0
  828. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/pipeline.rs +0 -0
  829. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/plans.rs +0 -0
  830. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/render.rs +0 -0
  831. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/reports.rs +0 -0
  832. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/sessions.rs +0 -0
  833. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/settings_ui.rs +0 -0
  834. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/sidebar.rs +0 -0
  835. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/terminal.rs +0 -0
  836. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/tests.rs +0 -0
  837. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/tests/acceptance.rs +0 -0
  845. {code_coordinator-0.5.112 → code_coordinator-0.5.114}/tui/tests/cli.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.112
3
+ Version: 0.5.114
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.112
3
+ Version: 0.5.114
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.112",
2
+ "tag": "0.5.114",
3
3
  "distance": 0,
4
- "node": "g6173265320032222560fcd77419a9f74fc98d14e",
4
+ "node": "g3415bd29a5ed645fb1b607710d503c75830b4bfc",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-16"
@@ -158,6 +158,9 @@ def row_to_assignment(row: object) -> Assignment:
158
158
  # row predating this column and for a normally-parsed verdict.
159
159
  verdict_source=d.get("verdict_source"),
160
160
  verdict_source_reason=d.get("verdict_source_reason"),
161
+ # #2316: raw terminal stop_reason; None for rows predating this
162
+ # column or a worker whose log carried no such field.
163
+ stop_reason=d.get("stop_reason"),
161
164
  )
162
165
 
163
166
 
@@ -232,6 +232,51 @@ def _looks_like_policy_refusal(text: str | None) -> bool:
232
232
  return any(marker in lowered for marker in _POLICY_REFUSAL_MARKERS)
233
233
 
234
234
 
235
+ # #2316: `WorkerSummary.stop_reason` values that mean the model was CUT OFF
236
+ # by an output-token ceiling before it could finish — as opposed to a normal
237
+ # stop (`end_turn`/`stop_sequence`, see `coord.progress`'s identical "unusual
238
+ # stop" allowlist). `"length"` is opencode's `step_finish` reason
239
+ # (`coord.providers.opencode.OpenCodeProvider.parse_log`, gated on opencode's
240
+ # `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`); `"max_tokens"` is Anthropic's own
241
+ # `stop_reason` for the same shape. Either one on a 0-commit clean exit means
242
+ # the worker never got a turn to write anything — the space-invaders#1
243
+ # incident (13 successful tool calls, then one reasoning block burned the
244
+ # entire 32k-token budget and exited 0 with nothing on disk) is exactly this:
245
+ # `exit_code == 0` looked like "worker exited cleanly but pushed 0 commits"
246
+ # (the #448 ADVISORY reading) when it was actually a truncation nobody could
247
+ # have acted on differently. See `_reap`, which checks this BEFORE the #448
248
+ # zero-commit downgrade.
249
+ _TRUNCATION_STOP_REASONS = frozenset({"length", "max_tokens"})
250
+
251
+ # #2321: the opencode-specific knob named in the GitHub comment so an
252
+ # operator reading "cut off at its output limit" doesn't have to go
253
+ # rediscover — as the #2316 investigation had to — that the ceiling is
254
+ # adjustable per provider definition.
255
+ _OPENCODE_OUTPUT_TOKEN_MAX_ENV = "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"
256
+
257
+
258
+ def _format_truncation_reason(stop_reason: str, provider_name: str | None) -> str:
259
+ """#2316: human-readable diagnostic for a 0-commit run truncated by an
260
+ output-token ceiling — used for both `AgentAssignment.truncation_reason`
261
+ (persisted `failure_reason`) and `AgentAssignment.error` (the GitHub
262
+ completion comment's `error=` text, see `coord.notify`'s FAILED arms).
263
+
264
+ Deliberately says "cut off" rather than "exited cleanly" — `exit_code ==
265
+ 0` is what a truncated run looks like, not evidence the worker finished.
266
+ Names :data:`_OPENCODE_OUTPUT_TOKEN_MAX_ENV` for an opencode worker
267
+ (#2321: the ceiling is raisable per provider definition) so an operator
268
+ doesn't have to rediscover that from scratch.
269
+ """
270
+ base = "the model was cut off at its output limit before writing anything"
271
+ if provider_name == "opencode":
272
+ return (
273
+ f"{base} (stop_reason={stop_reason!r}; opencode's output-token "
274
+ f"ceiling is set by {_OPENCODE_OUTPUT_TOKEN_MAX_ENV} and is "
275
+ "raisable per provider definition — #2321)"
276
+ )
277
+ return f"{base} (stop_reason={stop_reason!r})"
278
+
279
+
235
280
  # ── Reap tuning ───────────────────────────────────────────────────────────────
236
281
  # claude-cli sometimes does not exit after emitting its final
237
282
  # `{"type":"result"}` message — a child process (MCP server, tool subprocess)
@@ -2999,6 +3044,20 @@ class AgentAssignment:
2999
3044
  # one of `analysis_deliverable`/`zero_commit_reason`/this field is ever
3000
3045
  # set for a given assignment).
3001
3046
  policy_refusal_reason: str | None = None
3047
+ # #2316: set when `_reap` classifies a clean (exit_code==0), 0-commit
3048
+ # exit as a TRUNCATION — the worker's last `result`/`step_finish` event
3049
+ # carries a `stop_reason` in `_TRUNCATION_STOP_REASONS` (opencode's
3050
+ # `"length"`, claude's `"max_tokens"`) — rather than the #448 ADVISORY
3051
+ # default. Formatted with `_format_truncation_reason`. Only ever set
3052
+ # alongside `status == FAILED` (never ADVISORY: a truncated run is not a
3053
+ # "worker looked and found nothing to do", it is a cut-off nobody chose),
3054
+ # and `None` on every other outcome — including a genuine clean-exit-no-
3055
+ # commits run (no truncation marker matched) and a truncated run that DID
3056
+ # push commits (`_ahead != 0` never reaches this check at all). Mutually
3057
+ # exclusive with `zero_commit_reason`/`analysis_deliverable`/
3058
+ # `policy_refusal_reason`: all four are decided in the SAME `_ahead == 0`
3059
+ # branch of `_reap`, and this one is checked first — see that method.
3060
+ truncation_reason: str | None = None
3002
3061
 
3003
3062
  def to_dict(self) -> dict:
3004
3063
  d = asdict(self)
@@ -7897,6 +7956,13 @@ class AgentServer:
7897
7956
  # readings of "0 commits" can never disagree about which one applies
7898
7957
  # to this assignment.
7899
7958
  _policy_refusal_reason: str | None = None
7959
+ # #2316: checked FIRST in the `_ahead == 0` branch below, ahead of
7960
+ # `_analysis_deliverable`/`_policy_refusal_reason`/`_zero_commit_
7961
+ # reason` — a truncated run's `result_text` is whatever the model
7962
+ # managed to emit before the ceiling cut it off, not a considered
7963
+ # final message, so it must not be read as a positive "deliverable"
7964
+ # or "policy refusal" signal just because it happens to match one.
7965
+ _truncation_reason: str | None = None
7900
7966
  if (exit_code == 0 and assignment is not None
7901
7967
  and assignment.worktree_path
7902
7968
  and assignment.spec.type in _ZERO_COMMIT_TYPES):
@@ -7905,7 +7971,28 @@ class AgentServer:
7905
7971
  _base = assignment.spec.branch or "main"
7906
7972
  _ahead = self._commits_ahead(_wt_advisory, _base)
7907
7973
  if _ahead == 0:
7908
- if DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
7974
+ if (_worker_summary is not None
7975
+ and _worker_summary.stop_reason in _TRUNCATION_STOP_REASONS):
7976
+ # #2316: the model was guillotined by its own
7977
+ # output-token ceiling before it could act — exit
7978
+ # code 0 here is what a truncated run looks like, NOT
7979
+ # evidence of a clean "nothing to do" finish. Must be
7980
+ # re-driven, not parked in the advisory bucket
7981
+ # nobody re-drives (space-invaders#1).
7982
+ _truncation_reason = _format_truncation_reason(
7983
+ _worker_summary.stop_reason, assignment.spec.provider
7984
+ )
7985
+ try:
7986
+ with open(assignment.log_path, "a") as reopen:
7987
+ reopen.write(
7988
+ "# reap: truncated — 0 commits ahead of "
7989
+ f"{_base}; stop_reason="
7990
+ f"{_worker_summary.stop_reason!r}, status "
7991
+ "set to failed (#2316)\n"
7992
+ )
7993
+ except OSError:
7994
+ pass
7995
+ elif DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
7909
7996
  _analysis_deliverable = True
7910
7997
  try:
7911
7998
  with open(assignment.log_path, "a") as reopen:
@@ -8014,6 +8101,22 @@ class AgentServer:
8014
8101
  # shrug.
8015
8102
  assignment.status = FAILED
8016
8103
  assignment.push_failure_reason = _push_failure_reason
8104
+ elif _truncation_reason is not None:
8105
+ # #2316: the worker's own output-token ceiling cut it
8106
+ # off before it committed anything — checked BEFORE
8107
+ # `_policy_refusal_reason`/`_zero_commit_reason` (the
8108
+ # `_reap` computation above already guarantees the
8109
+ # four are mutually exclusive; kept parallel here for
8110
+ # readability). FAILED, not ADVISORY: exit_code==0 is
8111
+ # not evidence of a clean finish for a truncated run,
8112
+ # and nobody re-drives an advisory. `error` is set
8113
+ # too (not just `truncation_reason`) so the existing
8114
+ # generic `entry.get("error")` fallback in
8115
+ # `coord.notify`'s FAILED comment arms carries this
8116
+ # text without needing its own dedicated wiring.
8117
+ assignment.status = FAILED
8118
+ assignment.truncation_reason = _truncation_reason
8119
+ assignment.error = _truncation_reason
8017
8120
  elif _policy_refusal_reason is not None:
8018
8121
  # #2234: clean exit, no commits, and the worker's own
8019
8122
  # final message cites a standing repo-rule
@@ -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
@@ -173,4 +173,5 @@ export interface Assignment {
173
173
  audit_run_number: number | null
174
174
  for_issue_number: number | null
175
175
  driven_by: string | null
176
+ stop_reason: string | null
176
177
  }
@@ -896,6 +896,19 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
896
896
  # own default and identical in effect to `attempts <= 0` (no backoff
897
897
  # window active).
898
898
  "ALTER TABLE drive_queue ADD COLUMN retry_backoff_at REAL",
899
+ # #2316: the worker's own terminal `stop_reason` (e.g. `"end_turn"`,
900
+ # opencode's `"length"`, claude's `"max_tokens"`) — see
901
+ # `coord.agent.AgentServer._reap`'s `/status` `completed` entry
902
+ # (already sent by every agent build) and `coord.reconcile._capture_
903
+ # stop_reason_best_effort`, which persists it here for EVERY terminal
904
+ # assignment, not just failed ones. Previously this value reached the
905
+ # agent's own `/status` response and nothing else — `coord gates`,
906
+ # `coord status` and the dashboard had no column to read it from and
907
+ # a truncated (`stop_reason == "length"`/`"max_tokens"`), 0-commit
908
+ # run was recorded `advisory` with no trace of WHY. NULL for every
909
+ # row predating this migration and for a non-stream-json / PTY
910
+ # worker whose log carries no such field.
911
+ "ALTER TABLE assignments ADD COLUMN stop_reason TEXT",
899
912
  ]
900
913
  for sql in migrations:
901
914
  try:
@@ -702,6 +702,27 @@ class Assignment:
702
702
  # `coord/drive.py`'s work-stage `Action` sets on every `coord assign` it
703
703
  # shells out to.
704
704
  driven_by: str | None = None
705
+ # #2316: the worker's own terminal `stop_reason` (e.g. `"end_turn"`,
706
+ # opencode's `"length"`, claude's `"max_tokens"`) — persisted for EVERY
707
+ # terminal work-like assignment, not just failed ones, so `coord gates`/
708
+ # `coord status`/the dashboard can show it and a future gate can act on
709
+ # it. Captured from the agent's own `/status` `completed` entry (already
710
+ # sent by every agent build — `coord.agent.AgentServer.list_assignments`
711
+ # parses the worker's log and includes it there) by
712
+ # `coord.reconcile._capture_stop_reason_best_effort`. `None` for rows
713
+ # predating this column and for a non-stream-json / PTY worker whose log
714
+ # carries no such field.
715
+ #
716
+ # This is the raw diagnostic value, distinct from `failure_reason`: a
717
+ # truncated (`stop_reason` in `coord.agent._TRUNCATION_STOP_REASONS`),
718
+ # 0-commit run is separately classified FAILED by `AgentServer._reap`
719
+ # with a human-readable `failure_reason` naming the truncation — see
720
+ # `coord.agent.AgentAssignment.truncation_reason`. Before #2316 that same
721
+ # shape (space-invaders#1: the model spent its whole output budget on one
722
+ # reasoning block and hit opencode's 32k-token ceiling) landed on
723
+ # `advisory` — the same bucket as a worker that looked and correctly
724
+ # found nothing to do — so nobody re-drove it.
725
+ stop_reason: str | None = None
705
726
 
706
727
 
707
728
  def effective_issue_number(assignment: "Assignment | dict") -> int:
@@ -2638,11 +2638,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
2638
2638
  # says "spend ceiling" instead of leaving an operator to guess why a
2639
2639
  # leg died mid-task. Mutually exclusive with the other three (see
2640
2640
  # `coord.reconcile.reconcile_completed_assignments`).
2641
+ # #2316: `truncation_reason` is the same column again — the worker's
2642
+ # output-token ceiling cut it off before it committed anything. It
2643
+ # must reach `error=` below too, so the GitHub failure comment reads
2644
+ # "the model was cut off at its output limit before writing
2645
+ # anything" instead of the misleading "exited cleanly but pushed 0
2646
+ # commits" the #448 ADVISORY default would otherwise have produced.
2647
+ # Mutually exclusive with the other four (see
2648
+ # `coord.reconcile.reconcile_completed_assignments`).
2641
2649
  _failure_reason = (
2642
2650
  entry.get("usage_limit_reason")
2643
2651
  or entry.get("api_error_reason")
2644
2652
  or entry.get("push_failure_reason")
2645
2653
  or entry.get("spend_ceiling_reason")
2654
+ or entry.get("truncation_reason")
2646
2655
  )
2647
2656
  post_failure(
2648
2657
  exit_code=transition.exit_code,
@@ -2738,11 +2747,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
2738
2747
  # says "spend ceiling" instead of leaving an operator to guess why a
2739
2748
  # leg died mid-task. Mutually exclusive with the other three (see
2740
2749
  # `coord.reconcile.reconcile_completed_assignments`).
2750
+ # #2316: `truncation_reason` is the same column again — the worker's
2751
+ # output-token ceiling cut it off before it committed anything. It
2752
+ # must reach `error=` below too, so the GitHub failure comment reads
2753
+ # "the model was cut off at its output limit before writing
2754
+ # anything" instead of the misleading "exited cleanly but pushed 0
2755
+ # commits" the #448 ADVISORY default would otherwise have produced.
2756
+ # Mutually exclusive with the other four (see
2757
+ # `coord.reconcile.reconcile_completed_assignments`).
2741
2758
  _failure_reason = (
2742
2759
  entry.get("usage_limit_reason")
2743
2760
  or entry.get("api_error_reason")
2744
2761
  or entry.get("push_failure_reason")
2745
2762
  or entry.get("spend_ceiling_reason")
2763
+ or entry.get("truncation_reason")
2746
2764
  )
2747
2765
  post_failure(
2748
2766
  exit_code=transition.exit_code,
@@ -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(
@@ -429,11 +429,23 @@ def reconcile_completed_assignments(
429
429
  # was killed for spending, not for hitting a usage limit. Stamping it
430
430
  # here is what makes the kill distinguishable from a crash for
431
431
  # `coord retry`, the auto-reassign skip below, and the escalation.
432
+ # #2316: `truncation_reason` is the SAME column again — stamped by
433
+ # `AgentServer._reap` when a 0-commit clean exit's `stop_reason`
434
+ # shows the worker was cut off by its output-token ceiling
435
+ # (`coord.agent._TRUNCATION_STOP_REASONS`) rather than genuinely
436
+ # finding nothing to do. Never coexists with the other three: it is
437
+ # only ever set on the SAME `_ahead == 0` branch as the #448 ADVISORY
438
+ # default (see `AgentServer._reap`'s `elif` chain), which the other
439
+ # three all preempt before that branch even runs. Without this, a
440
+ # truncated run lands FAILED with no `failure_reason` recorded —
441
+ # exactly the "advisory looks the same as this" gap #2316 exists to
442
+ # close.
432
443
  _failure_reason = (
433
444
  entry.get("usage_limit_reason")
434
445
  or entry.get("api_error_reason")
435
446
  or entry.get("push_failure_reason")
436
447
  or entry.get("spend_ceiling_reason")
448
+ or entry.get("truncation_reason")
437
449
  )
438
450
  _escalate_spend_ceiling_best_effort(a, entry)
439
451
  update_state_fn(
@@ -482,6 +494,14 @@ def reconcile_completed_assignments(
482
494
  # failure is swallowed so it can't break the reconcile.
483
495
  _capture_tokens_best_effort(aid, entry)
484
496
 
497
+ # #2316: capture the raw stop_reason from the /status entry for
498
+ # EVERY terminal assignment (not just failed ones) — the enabling
499
+ # persistence step; `_failure_reason` above already carries the
500
+ # human-readable classification for a truncated run specifically.
501
+ # Best-effort — any failure is swallowed so it can't break the
502
+ # reconcile.
503
+ _capture_stop_reason_best_effort(aid, entry)
504
+
485
505
  reconciled.append(
486
506
  {
487
507
  "assignment_id": aid,
@@ -747,6 +767,29 @@ def _capture_tokens_best_effort(assignment_id: str, entry: dict) -> None:
747
767
  pass
748
768
 
749
769
 
770
+ def _capture_stop_reason_best_effort(assignment_id: str, entry: dict) -> None:
771
+ """#2316: persist the raw ``stop_reason`` from a /status completed entry.
772
+
773
+ The agent parses its own log and includes ``stop_reason`` on every
774
+ terminal ``completed`` entry (``coord.agent.AgentServer.list_assignments``
775
+ — this predates #2316, only the write path is new). Captured for EVERY
776
+ terminal assignment, not gated on status, so the column reflects the
777
+ worker's own last word (``"end_turn"``, ``"length"``, ``"max_tokens"``,
778
+ ...) regardless of how ``_failure_reason``/the board's ``status``
779
+ classified the run. Best-effort — any failure is swallowed so it can't
780
+ break the reconcile.
781
+ """
782
+ try:
783
+ stop_reason = entry.get("stop_reason")
784
+ if not stop_reason:
785
+ return
786
+ from coord.state import update_assignment_stop_reason # noqa: PLC0415
787
+
788
+ update_assignment_stop_reason(assignment_id, stop_reason)
789
+ except Exception: # noqa: BLE001 — never let this capture break the reconcile
790
+ pass
791
+
792
+
750
793
  def _build_fix_round_retry_briefing(
751
794
  failed: Assignment, board: Board, repo_cfg, max_review_iterations: int,
752
795
  ) -> str | None:
@@ -1407,6 +1450,10 @@ def _record_usage_limit_reason(assignment_id: str | None, entry: dict) -> None:
1407
1450
  # mutual exclusivity as the three above (see the identical chain in
1408
1451
  # `reconcile_completed_assignments`).
1409
1452
  or entry.get("spend_ceiling_reason")
1453
+ # #2316: a truncated (output-token-ceiling) 0-commit run. Same
1454
+ # column, same mutual exclusivity — see the identical chain in
1455
+ # `reconcile_completed_assignments`.
1456
+ or entry.get("truncation_reason")
1410
1457
  )
1411
1458
  if not reason or not assignment_id:
1412
1459
  return
@@ -2636,6 +2636,7 @@ def _openapi_spec() -> dict:
2636
2636
  "items": {"type": "string"},
2637
2637
  "nullable": True,
2638
2638
  },
2639
+ "stop_reason": {"type": "string", "nullable": True},
2639
2640
  },
2640
2641
  "required": ["assignment_id"],
2641
2642
  }
@@ -5257,6 +5258,10 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
5257
5258
  state._update_assignment_smoke_tests_local(aid, body["smoke_tests"])
5258
5259
  if "completion_summary" in body and body["completion_summary"]:
5259
5260
  state._update_assignment_completion_summary_local(aid, body["completion_summary"])
5261
+ if body.get("stop_reason"):
5262
+ # #2316: same endpoint, same reason as the fields above —
5263
+ # one round-trip covers the diagnostic capture too.
5264
+ state._update_assignment_stop_reason_local(aid, body["stop_reason"])
5260
5265
  except Exception as e: # noqa: BLE001
5261
5266
  return JSONResponse(
5262
5267
  {"error": "assignment-usage write failed", "detail": str(e)},