code-coordinator 0.5.112__tar.gz → 0.5.113__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.113}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/_board_mapping.py +3 -0
  5. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent.py +104 -1
  6. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/api/generated.ts +1 -0
  7. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/db.py +13 -0
  8. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/models.py +21 -0
  9. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notify.py +18 -0
  10. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/reconcile.py +47 -0
  11. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/serve_app.py +5 -0
  12. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/state.py +50 -0
  13. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent.py +74 -0
  14. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_zero_commit.py +200 -0
  15. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cargo_cache.py +18 -0
  16. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_serve.py +18 -0
  17. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_state.py +105 -0
  18. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/tests/fixtures/board_sample.json +3 -0
  19. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/board.md +0 -0
  20. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/complete-session.md +0 -0
  21. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/coordinator.md +0 -0
  22. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/_lib.sh +0 -0
  23. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-checkout +0 -0
  24. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-commit +0 -0
  25. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-merge +0 -0
  26. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/coord-ci-acceptance.yml +0 -0
  28. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/auto-release.yml +0 -0
  29. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/cargo-test.yml +0 -0
  30. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/publish.yml +0 -0
  31. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/release-tui.yml +0 -0
  32. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/test.yml +0 -0
  33. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.gitignore +0 -0
  34. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/CLAUDE.md +0 -0
  35. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/GOAL.md +0 -0
  36. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/LICENSE +0 -0
  37. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/MANIFEST.in +0 -0
  38. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/README.md +0 -0
  39. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/SOURCES.txt +0 -0
  40. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/dependency_links.txt +0 -0
  41. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/entry_points.txt +0 -0
  42. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/requires.txt +0 -0
  43. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/scm_file_list.json +0 -0
  44. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/top_level.txt +0 -0
  45. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/__init__.py +0 -0
  46. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/acceptance.py +0 -0
  47. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/acceptance_drivers.py +0 -0
  48. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent_app.py +0 -0
  49. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent_update.py +0 -0
  50. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/.gitignore +0 -0
  51. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/agents/work.md +0 -0
  52. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/routing.jsonc +0 -0
  53. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/block_log.py +0 -0
  56. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_bool_guard.py +0 -0
  57. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_service.py +0 -0
  58. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_wire.py +0 -0
  59. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/brain.py +0 -0
  60. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/branch_model.py +0 -0
  61. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/bug_intake.py +0 -0
  62. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/cargo_cache.py +0 -0
  63. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/ci_github.py +0 -0
  64. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/client.py +0 -0
  68. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/config.py +0 -0
  100. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/config_reload.py +0 -0
  101. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/.gitignore +0 -0
  109. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/components.json +0 -0
  110. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  111. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  112. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  113. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  114. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  115. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  116. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  117. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  118. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  119. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/index.html +0 -0
  120. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  121. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/sw.js +0 -0
  122. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  123. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  124. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  125. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  126. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  127. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  128. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  129. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  130. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  131. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  132. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/eslint.config.js +0 -0
  133. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/index.html +0 -0
  134. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  135. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/package-lock.json +0 -0
  136. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/package.json +0 -0
  137. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  138. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/playwright.config.ts +0 -0
  139. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/postcss.config.js +0 -0
  140. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  141. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  142. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  143. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/App.tsx +0 -0
  144. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/api/client.ts +0 -0
  145. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  146. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  147. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  148. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  149. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  150. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  151. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  152. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  153. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  154. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  155. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  156. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  157. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  158. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  159. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  160. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  161. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  162. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  163. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  164. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  165. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  166. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  167. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  168. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  169. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  170. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  171. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  172. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  173. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  174. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  175. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  176. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  177. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  178. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  179. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/index.css +0 -0
  180. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  181. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  182. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/main.tsx +0 -0
  183. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  184. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  185. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  186. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  187. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  188. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  189. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  190. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  191. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  192. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  193. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  194. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  195. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  196. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  197. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  198. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  199. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  200. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  201. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  202. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  203. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  204. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  205. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  206. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tailwind.config.js +0 -0
  207. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tsconfig.json +0 -0
  208. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  209. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/vite.config.ts +0 -0
  210. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dead_end.py +0 -0
  211. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/README.md +0 -0
  212. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-agent.service +0 -0
  213. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.service +0 -0
  214. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.sh +0 -0
  215. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.timer +0 -0
  216. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-drive-queue.service +0 -0
  217. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-drive-queue.timer +0 -0
  218. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-notify.service +0 -0
  219. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-notify.timer +0 -0
  220. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-propagate.service +0 -0
  221. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-propagate.timer +0 -0
  222. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-window.service +0 -0
  223. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-window.timer +0 -0
  224. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-serve.service +0 -0
  225. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web-dist-build.service +0 -0
  226. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web-dist-build.timer +0 -0
  227. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web.service +0 -0
  228. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy_manifest.py +0 -0
  229. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy_units.py +0 -0
  230. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deps.py +0 -0
  231. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/diagnose.py +0 -0
  232. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dispatch.py +0 -0
  233. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dist_name.py +0 -0
  234. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive.py +0 -0
  235. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive_queue.py +0 -0
  236. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive_state.py +0 -0
  237. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/events.py +0 -0
  238. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/failure_class.py +0 -0
  239. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/filelock.py +0 -0
  240. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/fleet_config_health.py +0 -0
  241. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/freshness.py +0 -0
  242. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_a.py +0 -0
  243. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_b.py +0 -0
  244. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_snapshot.py +0 -0
  245. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gates.py +0 -0
  246. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/github_ops.py +0 -0
  247. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/goal.py +0 -0
  248. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/graph_health.py +0 -0
  249. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/__init__.py +0 -0
  250. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/aggregate.py +0 -0
  251. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/__init__.py +0 -0
  252. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/agent_install.py +0 -0
  253. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/cargo_targets.py +0 -0
  254. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/claude_binary.py +0 -0
  255. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/deploy_lane_facts.py +0 -0
  256. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/disk.py +0 -0
  257. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_board.py +0 -0
  258. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  259. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_phantom.py +0 -0
  260. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_unit_drift.py +0 -0
  261. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/graph.py +0 -0
  262. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/graphify_cli.py +0 -0
  263. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/index_lock.py +0 -0
  264. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/plan_usage.py +0 -0
  265. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/repo_state.py +0 -0
  266. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/spawned_coord.py +0 -0
  267. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/timer_active.py +0 -0
  268. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/toolchain.py +0 -0
  269. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/unit_drift.py +0 -0
  270. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/unit_enablement.py +0 -0
  271. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/worktrees.py +0 -0
  272. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/cli.py +0 -0
  273. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/context.py +0 -0
  274. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/fleet_snapshot.py +0 -0
  275. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/models.py +0 -0
  276. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/pypi.py +0 -0
  277. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/registry.py +0 -0
  278. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/render.py +0 -0
  279. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/units.py +0 -0
  280. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/hooks.py +0 -0
  281. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/housekeeping.py +0 -0
  282. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/interactive.py +0 -0
  283. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/issue_store.py +0 -0
  284. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/liveness_auditor.py +0 -0
  285. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/machine_pause.py +0 -0
  286. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/merge_queue.py +0 -0
  287. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_chat.py +0 -0
  288. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_dispatch.py +0 -0
  289. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_gate.py +0 -0
  290. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_order.py +0 -0
  291. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/mock_author.py +0 -0
  292. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/network.py +0 -0
  293. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/new_issue_chat.py +0 -0
  294. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/__init__.py +0 -0
  295. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/baseline.py +0 -0
  296. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/cli.py +0 -0
  297. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/collect.py +0 -0
  298. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/digest.py +0 -0
  299. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/models.py +0 -0
  300. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/predicate.py +0 -0
  301. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/service.py +0 -0
  302. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/store.py +0 -0
  303. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/transport.py +0 -0
  304. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/openapi.py +0 -0
  305. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/overlap_fence.py +0 -0
  306. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/overlap_predict.py +0 -0
  307. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/parentage.py +0 -0
  308. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/parentage_github.py +0 -0
  309. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/pipeline.py +0 -0
  310. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/plan_parser.py +0 -0
  311. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/plans.py +0 -0
  312. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/platform_paths.py +0 -0
  313. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_bridge.py +0 -0
  314. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_store.py +0 -0
  315. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_sync.py +0 -0
  316. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/pr_body_lint.py +0 -0
  317. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/prereqs.py +0 -0
  318. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/progress.py +0 -0
  319. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/__init__.py +0 -0
  320. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/base.py +0 -0
  321. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/claude.py +0 -0
  322. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/claude_pty.py +0 -0
  323. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/opencode.py +0 -0
  324. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/queue_diagnose.py +0 -0
  325. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/refine_chat.py +0 -0
  326. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_cordon.py +0 -0
  327. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_propagate.py +0 -0
  328. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_verify.py +0 -0
  329. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_window.py +0 -0
  330. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/repo_edit.py +0 -0
  331. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/repo_onboard.py +0 -0
  332. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/reports.py +0 -0
  333. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/revalidate.py +0 -0
  334. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/review.py +0 -0
  335. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/scorecard.py +0 -0
  336. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/skills/update-issue/SKILL.md +0 -0
  337. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/smoke.py +0 -0
  338. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/spend_ceiling.py +0 -0
  339. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/split_work.py +0 -0
  340. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/stage_projection.py +0 -0
  341. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_author.py +0 -0
  342. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_chat.py +0 -0
  343. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_orchestrator.py +0 -0
  344. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_report.py +0 -0
  345. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/tui_release.py +0 -0
  346. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage.py +0 -0
  347. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage_limits.py +0 -0
  348. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage_rollup.py +0 -0
  349. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/worker_events.py +0 -0
  350. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coordinator.example.yml +0 -0
  351. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-agent.service +0 -0
  352. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.service +0 -0
  353. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.sh +0 -0
  354. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.timer +0 -0
  355. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-drive-queue.service +0 -0
  356. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-drive-queue.timer +0 -0
  357. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-notify.service +0 -0
  358. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-notify.timer +0 -0
  359. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-propagate.service +0 -0
  360. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-propagate.timer +0 -0
  361. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-window.service +0 -0
  362. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-window.timer +0 -0
  363. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-serve.service +0 -0
  364. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.service +0 -0
  365. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.sh +0 -0
  366. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.timer +0 -0
  367. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-rollback.sh +0 -0
  368. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web.service +0 -0
  369. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/node-shim.sh +0 -0
  370. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/AGENT_OPERATIONS.md +0 -0
  371. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ARCHITECTURE.md +0 -0
  372. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ARCH_SECURITY_GATES.md +0 -0
  373. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/COCKPIT.md +0 -0
  374. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CONTROL_CENTER.md +0 -0
  375. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/COST_DISCIPLINE.md +0 -0
  376. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CROSS_PLATFORM.md +0 -0
  377. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CUSTOMER_PORTAL.md +0 -0
  378. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/DRIVE_QUEUE.md +0 -0
  379. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/EPHEMERAL_WORKERS.md +0 -0
  380. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/FORGE_MIGRATION.md +0 -0
  381. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/GRAPHIFY_SETUP.md +0 -0
  382. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ISSUE_GUIDANCE.md +0 -0
  383. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/MAC_MINI.md +0 -0
  384. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  385. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/NOTIFIER.md +0 -0
  386. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/OPENCODE_VERIFICATION.md +0 -0
  387. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/OPERATING_GOTCHAS.md +0 -0
  388. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ORACLE_LOOP.md +0 -0
  389. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PHONE_WEBAPP.md +0 -0
  390. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PIPELINE_V2.md +0 -0
  391. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PLATFORM_EVOLUTION.md +0 -0
  392. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/SECOND_BACKEND.md +0 -0
  393. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/STORE_SERVICE.md +0 -0
  394. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  395. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/WEB_CONTROL_CENTER.md +0 -0
  396. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/coord-test-runner.sh +0 -0
  417. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/drive-batch.sh +0 -0
  418. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/next_release_tag.py +0 -0
  420. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/smoke_437_interactive.py +0 -0
  423. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_878_review_capture.py +0 -0
  424. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_release_published.py +0 -0
  425. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_release_wheel.py +0 -0
  426. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/setup.cfg +0 -0
  427. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/SMOKE_SET.md +0 -0
  428. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/__init__.py +0 -0
  429. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  430. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/contract.md +0 -0
  431. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/manifest.yml +0 -0
  432. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  433. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  434. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  435. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  436. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/conftest.py +0 -0
  437. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/contract.md +0 -0
  438. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/manifest.yml +0 -0
  439. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  440. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  441. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/contract.md +0 -0
  442. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/manifest.yml +0 -0
  443. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  444. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  445. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  446. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  447. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  448. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  449. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  450. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  451. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  452. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  453. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/contract.md +0 -0
  454. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  455. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  456. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/manifest.yml +0 -0
  457. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  458. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/tsconfig.json +0 -0
  459. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  460. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/conftest.py +0 -0
  461. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/board-pipeline-basic.json +0 -0
  462. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  463. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  464. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  465. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  466. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/all_pass.json +0 -0
  467. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  468. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/mixed_fail.json +0 -0
  469. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  470. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  471. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/skip.json +0 -0
  472. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/truncated.json +0 -0
  473. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  474. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  475. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  476. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  477. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  478. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  479. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  480. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  481. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_acceptance.py +0 -0
  482. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_acceptance_drivers.py +0 -0
  483. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_api_error.py +0 -0
  484. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_app.py +0 -0
  485. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_branch_base.py +0 -0
  486. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_branch_capture.py +0 -0
  487. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_config_free_1712.py +0 -0
  488. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_deploy_units_endpoint.py +0 -0
  489. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_dirty_worktree.py +0 -0
  490. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_graph_self_heal.py +0 -0
  491. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_health_h3.py +0 -0
  492. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_idle_restart.py +0 -0
  493. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_push_failure.py +0 -0
  494. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_reap.py +0 -0
  495. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_repos_and_pull.py +0 -0
  496. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_restart_services_endpoint.py +0 -0
  497. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_startup_diagnostics.py +0 -0
  498. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_update.py +0 -0
  499. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_update_bluegreen.py +0 -0
  500. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_usage_limit.py +0 -0
  501. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ambient_home_isolation.py +0 -0
  502. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_approve_reject_plan.py +0 -0
  503. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_approve_usage_gate.py +0 -0
  504. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_assignment_already_recorded_daemon.py +0 -0
  505. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_log.py +0 -0
  506. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_outcome.py +0 -0
  507. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_query.py +0 -0
  508. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_auto_loop.py +0 -0
  509. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_auto_release_publish_2035.py +0 -0
  510. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_base_checkout_restore.py +0 -0
  511. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_block_log.py +0 -0
  512. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_cap_762.py +0 -0
  513. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_fixture.py +0 -0
  514. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_read_path.py +0 -0
  515. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_service.py +0 -0
  516. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_state.py +0 -0
  517. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_wire.py +0 -0
  518. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_brain.py +0 -0
  519. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_branch_model.py +0 -0
  520. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_bug_intake.py +0 -0
  521. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_build_worker_image_env_update.py +0 -0
  522. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_acceptance_gate_1950.py +0 -0
  523. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_parity_2091.py +0 -0
  524. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_store.py +0 -0
  525. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_claim.py +0 -0
  526. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_acceptance.py +0 -0
  527. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign.py +0 -0
  528. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  529. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_interactive_remote.py +0 -0
  530. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_provider.py +0 -0
  531. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  532. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_audit.py +0 -0
  533. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_chat_continue.py +0 -0
  534. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_diagnose_config_provenance.py +0 -0
  535. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_drive.py +0 -0
  540. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_drive_queue.py +0 -0
  541. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_escalate.py +0 -0
  542. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_fix_headless_review.py +0 -0
  543. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_gate_a.py +0 -0
  544. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_install_drift.py +0 -0
  545. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_install_skills.py +0 -0
  546. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_issue_create_label.py +0 -0
  547. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_issue_reopen.py +0 -0
  548. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_pull_artifact.py +0 -0
  563. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_queue.py +0 -0
  564. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_reattach_sessions.py +0 -0
  565. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_refine_board.py +0 -0
  566. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_preflight.py +0 -0
  567. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_propagate.py +0 -0
  568. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_window.py +0 -0
  569. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_repo_2220.py +0 -0
  570. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_scorecard.py +0 -0
  571. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_merge_queue.py +0 -0
  574. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_provider.py +0 -0
  575. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_review_finalizing.py +0 -0
  576. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_test_failed_tag.py +0 -0
  577. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_usage_limit.py +0 -0
  578. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_sync_comments_873.py +0 -0
  579. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_test_plan.py +0 -0
  580. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_track.py +0 -0
  581. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_tui_update.py +0 -0
  582. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_wait.py +0 -0
  583. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_client_base_install.py +0 -0
  584. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_comments.py +0 -0
  585. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_completion_summary.py +0 -0
  586. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config.py +0 -0
  587. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_acceptance.py +0 -0
  588. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_audit.py +0 -0
  589. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_pricing.py +0 -0
  590. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  591. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_usage_gate.py +0 -0
  592. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_conflict_fix.py +0 -0
  593. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_conflict_fix_semantic.py +0 -0
  594. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test.py +0 -0
  595. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_baseline.py +0 -0
  596. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_routing.py +0 -0
  597. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_toolchain.py +0 -0
  598. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_web_sse_restart_live.py +0 -0
  599. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coordinator_machine.py +0 -0
  600. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cross_platform_imports.py +0 -0
  601. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard.py +0 -0
  602. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_fixture.py +0 -0
  603. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_terminal.py +0 -0
  604. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_terminal_live.py +0 -0
  605. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_db.py +0 -0
  606. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dead_end.py +0 -0
  607. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_db_backup.py +0 -0
  608. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_web_dist.py +0 -0
  609. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_web_rollback.py +0 -0
  610. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_drive_queue_unit.py +0 -0
  611. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_manifest.py +0 -0
  612. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_units_lane.py +0 -0
  613. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_web_unit.py +0 -0
  614. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deps.py +0 -0
  615. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_diagnose.py +0 -0
  616. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dispatch.py +0 -0
  617. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dispatch_target_validation.py +0 -0
  618. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dist_name.py +0 -0
  619. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_done_housekeeping.py +0 -0
  620. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive.py +0 -0
  621. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_queue.py +0 -0
  622. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_state.py +0 -0
  623. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_tmux.py +0 -0
  624. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_capability_detection.py +0 -0
  625. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  626. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_image_provenance.py +0 -0
  627. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_errors.py +0 -0
  628. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_events.py +0 -0
  629. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_failure_class.py +0 -0
  630. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_filelock.py +0 -0
  631. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  632. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fix_of_force_override.py +0 -0
  633. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_config_health.py +0 -0
  634. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_health_probes.py +0 -0
  635. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_health_snapshot.py +0 -0
  636. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_freshness.py +0 -0
  637. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_a.py +0 -0
  638. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_b.py +0 -0
  639. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_snapshot_staleness.py +0 -0
  640. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gates.py +0 -0
  641. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  642. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_generated_types_fixture.py +0 -0
  643. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_github_ops.py +0 -0
  644. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_goal.py +0 -0
  645. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_graph_health.py +0 -0
  646. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_graph_selfheal_absent_2237.py +0 -0
  647. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_handoff.py +0 -0
  648. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_checks.py +0 -0
  649. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_cli.py +0 -0
  650. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_cli_graph.py +0 -0
  651. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_config.py +0 -0
  652. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_context.py +0 -0
  653. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_deploy_lane_facts.py +0 -0
  654. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_incident_regression.py +0 -0
  655. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_pypi.py +0 -0
  656. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_registry.py +0 -0
  657. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_timer_active.py +0 -0
  658. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_toolchain.py +0 -0
  659. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_unit_drift.py +0 -0
  660. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_unit_enablement.py +0 -0
  661. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_hooks.py +0 -0
  662. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_human_attended_437.py +0 -0
  663. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_init.py +0 -0
  664. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_integration.py +0 -0
  665. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_briefing_echo.py +0 -0
  666. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_prefill_state.py +0 -0
  667. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_session_relaunch.py +0 -0
  668. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_test_verdict_backstop.py +0 -0
  669. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_token_attribution.py +0 -0
  670. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_worktree.py +0 -0
  671. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_issue_store_seam.py +0 -0
  672. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_liveness_auditor.py +0 -0
  673. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_liveness_notify.py +0 -0
  674. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_machine_pause.py +0 -0
  675. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_merge_queue.py +0 -0
  676. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_merge_verify.py +0 -0
  677. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_chat.py +0 -0
  678. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_dispatch.py +0 -0
  679. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_gate.py +0 -0
  680. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_order.py +0 -0
  681. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_seam.py +0 -0
  682. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_mock_author.py +0 -0
  683. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_model_tiering.py +0 -0
  684. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_models.py +0 -0
  685. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_models_config_labels.py +0 -0
  686. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_needs_attention.py +0 -0
  687. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_network.py +0 -0
  688. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_new_issue_chat.py +0 -0
  689. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_next_release_tag.py +0 -0
  690. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_no_direct_gh_calls.py +0 -0
  691. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_node_shim.py +0 -0
  692. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_baseline.py +0 -0
  693. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_cli.py +0 -0
  694. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_collect.py +0 -0
  695. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_config.py +0 -0
  696. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_drive_seam.py +0 -0
  697. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_isolation.py +0 -0
  698. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_predicate.py +0 -0
  699. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_quiet_hours.py +0 -0
  700. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_service.py +0 -0
  701. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notify.py +0 -0
  702. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notify_drain.py +0 -0
  703. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_openapi.py +0 -0
  704. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_operational_defaults.py +0 -0
  705. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_overlap_fence.py +0 -0
  706. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_overlap_predict.py +0 -0
  707. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_packaged_deploy_units.py +0 -0
  708. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_parentage.py +0 -0
  709. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_paste_landed.py +0 -0
  710. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_pipeline.py +0 -0
  711. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_approve_plan_command.py +0 -0
  712. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_pr_command.py +0 -0
  713. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_review_command.py +0 -0
  714. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_only.py +0 -0
  715. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_parser.py +0 -0
  716. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_platform_paths.py +0 -0
  717. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_bridge.py +0 -0
  718. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_config.py +0 -0
  719. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_sync.py +0 -0
  720. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_pr_body_lint.py +0 -0
  721. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_prereqs.py +0 -0
  722. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_production_db_guard.py +0 -0
  723. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_progress.py +0 -0
  724. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_provider_seam.py +0 -0
  725. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers.py +0 -0
  726. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers_config_labels.py +0 -0
  727. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers_pty.py +0 -0
  728. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_quiet_hours.py +0 -0
  729. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_quiet_hours_store_2146.py +0 -0
  730. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reap_merged_sessions.py +0 -0
  731. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reap_stale_interactive_tick.py +0 -0
  732. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_branch.py +0 -0
  733. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_completions.py +0 -0
  734. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_merges.py +0 -0
  735. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_no_agent_record.py +0 -0
  736. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_usage_limit_done.py +0 -0
  737. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_refine_chat.py +0 -0
  738. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_2101.py +0 -0
  739. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  740. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_deadlock_2240.py +0 -0
  741. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_propagate.py +0 -0
  742. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_unified_1242.py +0 -0
  743. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_verify.py +0 -0
  744. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_window.py +0 -0
  745. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_remote_auto_prune.py +0 -0
  746. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_remote_interactive_reaper.py +0 -0
  747. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_edit_2220.py +0 -0
  748. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_graph_fleet_2237.py +0 -0
  749. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_onboard_2220.py +0 -0
  750. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_report_result_push.py +0 -0
  751. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reports.py +0 -0
  752. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry.py +0 -0
  753. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry_advisory_1606.py +0 -0
  754. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry_type_1636.py +0 -0
  755. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_revalidate.py +0 -0
  756. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review.py +0 -0
  757. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_end_review_without_verdict.py +0 -0
  758. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_parse_failure_diagnostic.py +0 -0
  759. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_reaffirm.py +0 -0
  760. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_state.py +0 -0
  761. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_backstop.py +0 -0
  762. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_override_audit.py +0 -0
  763. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_relay.py +0 -0
  764. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_zero_commits.py +0 -0
  765. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_scoped_review_wiring.py +0 -0
  766. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_scorecard.py +0 -0
  767. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_serve_app_board_trim.py +0 -0
  768. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_session.py +0 -0
  769. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_slice_issue_attribution.py +0 -0
  770. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke.py +0 -0
  771. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke_live_checkout_restore.py +0 -0
  772. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke_workflow.py +0 -0
  773. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_spend_ceiling.py +0 -0
  774. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_spend_ceiling_coordinator.py +0 -0
  775. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_split.py +0 -0
  776. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_split_work.py +0 -0
  777. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stage_projection.py +0 -0
  778. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stalled_pipeline.py +0 -0
  779. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_state_review_findings_daemon.py +0 -0
  780. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_status_fleet_footer.py +0 -0
  781. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stop_1567.py +0 -0
  782. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stuck.py +0 -0
  783. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_terminal_command.py +0 -0
  784. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_author.py +0 -0
  785. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_chat.py +0 -0
  786. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_orchestrator.py +0 -0
  787. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_report.py +0 -0
  788. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_verdict_parsing.py +0 -0
  789. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_verdict_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_board_audit.py +0 -0
  791. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_config_load_1080.py +0 -0
  792. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_daemon_routing_906.py +0 -0
  793. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_tmux_host.py +0 -0
  794. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_tmux_session.py +0 -0
  795. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage.py +0 -0
  797. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage_limits.py +0 -0
  798. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage_rollup.py +0 -0
  799. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_venv_live_install_2121.py +0 -0
  800. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_version_single_source.py +0 -0
  801. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_watch.py +0 -0
  802. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  803. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_events.py +0 -0
  804. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_image_pin_sync.py +0 -0
  805. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_safety.py +0 -0
  806. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_test_scoping.py +0 -0
  807. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worktree.py +0 -0
  808. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  809. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/Cargo.lock +0 -0
  810. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/Cargo.toml +0 -0
  811. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/cargo-config-local-quadraui.toml.example +0 -0
  812. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/audit.rs +0 -0
  813. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/chat.rs +0 -0
  814. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/data.rs +0 -0
  815. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/dialogs.rs +0 -0
  816. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/drive.rs +0 -0
  817. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/drive_queue.rs +0 -0
  818. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/escalation.rs +0 -0
  819. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/events.rs +0 -0
  820. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fixtures.rs +0 -0
  821. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_health.rs +0 -0
  822. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_sessions.rs +0 -0
  823. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_terminals.rs +0 -0
  824. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/format.rs +0 -0
  825. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/milestone_dag.rs +0 -0
  826. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/mod.rs +0 -0
  827. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/msv.rs +0 -0
  828. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/pipeline.rs +0 -0
  829. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/plans.rs +0 -0
  830. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/render.rs +0 -0
  831. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/reports.rs +0 -0
  832. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/sessions.rs +0 -0
  833. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/settings_ui.rs +0 -0
  834. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/sidebar.rs +0 -0
  835. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/terminal.rs +0 -0
  836. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/tests.rs +0 -0
  837. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/tests/acceptance.rs +0 -0
  845. {code_coordinator-0.5.112 → code_coordinator-0.5.113}/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.113
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.113
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.113",
3
3
  "distance": 0,
4
- "node": "g6173265320032222560fcd77419a9f74fc98d14e",
4
+ "node": "ga030a27e286c5012119c4cdbfb871f070e331e8a",
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
@@ -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,
@@ -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)},
@@ -2811,6 +2811,56 @@ def _update_assignment_tokens_local(
2811
2811
  pass
2812
2812
 
2813
2813
 
2814
+ def update_assignment_stop_reason(assignment_id: str, stop_reason: str) -> None:
2815
+ """#2316: record the worker's terminal ``stop_reason`` — routes to the
2816
+ daemon when set.
2817
+
2818
+ Persisted for EVERY terminal work-like assignment (not just failed
2819
+ ones) so ``coord gates``/``coord status``/the dashboard have something
2820
+ to read — before this column existed, a truncated worker's ``/status``
2821
+ already carried ``stop_reason`` but the coordinator dropped it on
2822
+ receipt (see ``coord.agent.AgentServer.list_assignments``, which parses
2823
+ the log and includes it on every terminal ``completed`` entry).
2824
+
2825
+ Idempotent: the UPDATE only fires when the row's ``stop_reason`` is
2826
+ still NULL (first-writer-wins) — a terminal row's stop reason cannot
2827
+ change after the fact, so a later reconcile tick re-observing the same
2828
+ ``/status`` entry is a no-op rather than a redundant write. Silently
2829
+ no-ops on a falsy *stop_reason* or a missing assignment row, and
2830
+ swallows ``OperationalError`` so a pre-migration DB (tests, an older
2831
+ install that hasn't restarted the coordinator yet) never crashes the
2832
+ reconcile/notify path this is called from.
2833
+ """
2834
+ if not assignment_id or not stop_reason:
2835
+ return
2836
+ svc = _board_service()
2837
+ resp = _route_write(
2838
+ svc,
2839
+ "/assignment-usage",
2840
+ {"assignment_id": assignment_id, "stop_reason": stop_reason},
2841
+ )
2842
+ if resp is not None:
2843
+ return
2844
+ _update_assignment_stop_reason_local(assignment_id, stop_reason)
2845
+
2846
+
2847
+ def _update_assignment_stop_reason_local(assignment_id: str, stop_reason: str) -> None:
2848
+ """Write ``stop_reason`` directly to the local DB. Called by the daemon endpoint."""
2849
+ if not assignment_id or not stop_reason:
2850
+ return
2851
+ conn = get_connection()
2852
+ try:
2853
+ conn.execute(
2854
+ "UPDATE assignments SET stop_reason=? WHERE assignment_id=? "
2855
+ "AND stop_reason IS NULL",
2856
+ (stop_reason, assignment_id),
2857
+ )
2858
+ conn.commit()
2859
+ except sqlite3.OperationalError:
2860
+ # Column may not exist yet (pre-migration DB or test fixtures).
2861
+ pass
2862
+
2863
+
2814
2864
  def mark_assignment_interactive(assignment_id: str) -> None:
2815
2865
  """#546/#665: flag the row as interactive — routes to the daemon when set.
2816
2866
 
@@ -5028,6 +5028,80 @@ class TestListAssignmentsTokens:
5028
5028
  assert entry.get("input_tokens", 0) == 0
5029
5029
 
5030
5030
 
5031
+ # ── #2316: stop_reason / truncation_reason reach /status ───────────────────────
5032
+
5033
+
5034
+ class TestStopReasonInCompletedEntry:
5035
+ """`list_assignments()['completed']` must carry `stop_reason` (parsed
5036
+ fresh from the log on every /status call, same as `num_turns`/
5037
+ `total_cost_usd` above) so `coord.reconcile._capture_stop_reason_best_
5038
+ effort` has something to persist — this is the wire half of #2316's
5039
+ "the information is already there and is thrown away" gap."""
5040
+
5041
+ def _make_spec(self, repo_path: Path) -> AssignmentSpec:
5042
+ return AssignmentSpec(
5043
+ repo_name="api",
5044
+ repo_path=str(repo_path),
5045
+ issue_number=2316,
5046
+ issue_title="t",
5047
+ briefing="b",
5048
+ branch="main",
5049
+ )
5050
+
5051
+ def test_stop_reason_appears_in_completed_entry(self, tmp_path: Path) -> None:
5052
+ import json as _json
5053
+
5054
+ repo = _init_repo(tmp_path / "repo")
5055
+ server = _server(tmp_path, repo_path=repo)
5056
+ spec = self._make_spec(repo)
5057
+
5058
+ log_path = tmp_path / "trunc1.log"
5059
+ log_path.write_text(
5060
+ _json.dumps(
5061
+ {
5062
+ "type": "result",
5063
+ "subtype": "success",
5064
+ "is_error": False,
5065
+ "stop_reason": "max_tokens",
5066
+ "result": "",
5067
+ }
5068
+ )
5069
+ + "\n",
5070
+ encoding="utf-8",
5071
+ )
5072
+
5073
+ a = AgentAssignment(
5074
+ id="trunc1",
5075
+ spec=spec,
5076
+ status=FAILED,
5077
+ finished_at=1.0,
5078
+ exit_code=0,
5079
+ log_path=str(log_path),
5080
+ truncation_reason=(
5081
+ "the model was cut off at its output limit before writing "
5082
+ "anything (stop_reason='max_tokens')"
5083
+ ),
5084
+ error=(
5085
+ "the model was cut off at its output limit before writing "
5086
+ "anything (stop_reason='max_tokens')"
5087
+ ),
5088
+ )
5089
+ server._assignments[a.id] = a
5090
+
5091
+ listing = server.list_assignments()
5092
+ completed = listing["completed"]
5093
+ assert len(completed) == 1
5094
+ entry = completed[0]
5095
+ # `stop_reason`: freshly parsed from the log on every /status call.
5096
+ assert entry.get("stop_reason") == "max_tokens"
5097
+ # `truncation_reason`/`error`: plain dataclass fields, already on the
5098
+ # assignment — `to_status_dict()`'s `asdict` carries them through
5099
+ # exactly like `usage_limit_reason`/`api_error_reason` do.
5100
+ assert entry.get("truncation_reason") is not None
5101
+ assert "cut off at its output limit" in entry["truncation_reason"]
5102
+ assert entry.get("error") == entry["truncation_reason"]
5103
+
5104
+
5031
5105
  # ── #1492: agent-side clearing of terminal ADVISORY entries ────────────────────
5032
5106
 
5033
5107