code-coordinator 0.5.61__tar.gz → 0.5.62__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 (815) hide show
  1. {code_coordinator-0.5.61/code_coordinator.egg-info → code_coordinator-0.5.62}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.61 → code_coordinator-0.5.62/code_coordinator.egg-info}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent.py +89 -11
  5. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dispatch.py +8 -0
  6. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive.py +27 -0
  7. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/models.py +16 -0
  8. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notify.py +18 -1
  9. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_zero_commit.py +166 -0
  10. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dispatch.py +35 -0
  11. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive.py +71 -0
  12. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notify.py +60 -0
  13. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/cargo-test.yml +0 -0
  23. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/release-tui.yml +0 -0
  25. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.gitignore +0 -0
  27. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/GOAL.md +0 -0
  29. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/LICENSE +0 -0
  30. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/README.md +0 -0
  32. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_bool_guard.py +0 -0
  50. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/cli.py +0 -0
  60. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/client.py +0 -0
  61. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/__init__.py +0 -0
  62. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/_common.py +0 -0
  63. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/acceptance.py +0 -0
  64. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/agent_ops.py +0 -0
  65. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/audit.py +0 -0
  66. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/chat.py +0 -0
  67. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/dispatch.py +0 -0
  68. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/dispatch_workers.py +0 -0
  69. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/drive.py +0 -0
  70. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/drive_queue.py +0 -0
  71. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/gate_a.py +0 -0
  72. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/gates.py +0 -0
  73. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/issues.py +0 -0
  74. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/lifecycle.py +0 -0
  75. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/merge.py +0 -0
  76. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/milestone.py +0 -0
  77. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/plan_followup.py +0 -0
  78. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/plans.py +0 -0
  79. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/portal.py +0 -0
  80. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/release.py +0 -0
  81. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/report.py +0 -0
  82. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/review.py +0 -0
  83. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/scorecard.py +0 -0
  84. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/sessions.py +0 -0
  85. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/setup.py +0 -0
  86. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/status.py +0 -0
  87. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/terminal.py +0 -0
  88. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/test_gate.py +0 -0
  89. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/tui.py +0 -0
  90. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/comments.py +0 -0
  91. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/config.py +0 -0
  92. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  102. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  104. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  105. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/db.py +0 -0
  203. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dist_name.py +0 -0
  226. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive_queue.py +0 -0
  227. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive_state.py +0 -0
  228. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/events.py +0 -0
  229. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/failure_class.py +0 -0
  230. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/filelock.py +0 -0
  231. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/fleet_config_health.py +0 -0
  232. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/freshness.py +0 -0
  233. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_a.py +0 -0
  234. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_b.py +0 -0
  235. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_snapshot.py +0 -0
  236. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gates.py +0 -0
  237. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/github_ops.py +0 -0
  238. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/goal.py +0 -0
  239. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/graph_health.py +0 -0
  240. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/__init__.py +0 -0
  241. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/aggregate.py +0 -0
  242. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/__init__.py +0 -0
  243. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/agent_install.py +0 -0
  244. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/cargo_targets.py +0 -0
  245. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/claude_binary.py +0 -0
  246. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/deploy_lane_facts.py +0 -0
  247. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/disk.py +0 -0
  248. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_board.py +0 -0
  249. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  250. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_phantom.py +0 -0
  251. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_unit_drift.py +0 -0
  252. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/graph.py +0 -0
  253. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/plan_usage.py +0 -0
  254. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/repo_state.py +0 -0
  255. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/spawned_coord.py +0 -0
  256. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/timer_active.py +0 -0
  257. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/toolchain.py +0 -0
  258. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/unit_drift.py +0 -0
  259. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/unit_enablement.py +0 -0
  260. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/worktrees.py +0 -0
  261. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/cli.py +0 -0
  262. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/context.py +0 -0
  263. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/fleet_snapshot.py +0 -0
  264. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/models.py +0 -0
  265. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/pypi.py +0 -0
  266. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/registry.py +0 -0
  267. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/render.py +0 -0
  268. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/units.py +0 -0
  269. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/hooks.py +0 -0
  270. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/housekeeping.py +0 -0
  271. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/interactive.py +0 -0
  272. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/issue_store.py +0 -0
  273. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/liveness_auditor.py +0 -0
  274. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/machine_pause.py +0 -0
  275. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/merge_queue.py +0 -0
  276. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_chat.py +0 -0
  277. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_dispatch.py +0 -0
  278. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_gate.py +0 -0
  279. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_order.py +0 -0
  280. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/mock_author.py +0 -0
  281. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/network.py +0 -0
  282. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/new_issue_chat.py +0 -0
  283. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/__init__.py +0 -0
  284. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/baseline.py +0 -0
  285. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/cli.py +0 -0
  286. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/collect.py +0 -0
  287. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/digest.py +0 -0
  288. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/models.py +0 -0
  289. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/predicate.py +0 -0
  290. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/service.py +0 -0
  291. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/store.py +0 -0
  292. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/transport.py +0 -0
  293. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/openapi.py +0 -0
  294. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/overlap_fence.py +0 -0
  295. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/parentage.py +0 -0
  296. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/parentage_github.py +0 -0
  297. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/pipeline.py +0 -0
  298. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/plan_parser.py +0 -0
  299. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/plans.py +0 -0
  300. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/platform_paths.py +0 -0
  301. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/portal_bridge.py +0 -0
  302. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/pr_body_lint.py +0 -0
  303. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/prereqs.py +0 -0
  304. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/progress.py +0 -0
  305. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/__init__.py +0 -0
  306. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/base.py +0 -0
  307. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/claude.py +0 -0
  308. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/claude_pty.py +0 -0
  309. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/opencode.py +0 -0
  310. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/reconcile.py +0 -0
  311. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/refine_chat.py +0 -0
  312. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_cordon.py +0 -0
  313. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_propagate.py +0 -0
  314. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_verify.py +0 -0
  315. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_window.py +0 -0
  316. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/reports.py +0 -0
  317. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/revalidate.py +0 -0
  318. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/review.py +0 -0
  319. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/scorecard.py +0 -0
  320. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/serve_app.py +0 -0
  321. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/skills/update-issue/SKILL.md +0 -0
  322. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/smoke.py +0 -0
  323. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/spend_ceiling.py +0 -0
  324. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/split_work.py +0 -0
  325. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/stage_projection.py +0 -0
  326. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/state.py +0 -0
  327. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_author.py +0 -0
  328. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_chat.py +0 -0
  329. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_orchestrator.py +0 -0
  330. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_report.py +0 -0
  331. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/tui_release.py +0 -0
  332. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage.py +0 -0
  333. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage_limits.py +0 -0
  334. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage_rollup.py +0 -0
  335. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/worker_events.py +0 -0
  336. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coordinator.example.yml +0 -0
  337. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-agent.service +0 -0
  338. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.service +0 -0
  339. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.sh +0 -0
  340. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.timer +0 -0
  341. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-drive-queue.service +0 -0
  342. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-drive-queue.timer +0 -0
  343. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-notify.service +0 -0
  344. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-notify.timer +0 -0
  345. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-propagate.service +0 -0
  346. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-propagate.timer +0 -0
  347. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-window.service +0 -0
  348. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-window.timer +0 -0
  349. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-serve.service +0 -0
  350. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.service +0 -0
  351. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.sh +0 -0
  352. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.timer +0 -0
  353. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-rollback.sh +0 -0
  354. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web.service +0 -0
  355. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/node-shim.sh +0 -0
  356. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/AGENT_OPERATIONS.md +0 -0
  357. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ARCHITECTURE.md +0 -0
  358. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ARCH_SECURITY_GATES.md +0 -0
  359. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/COCKPIT.md +0 -0
  360. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CONTROL_CENTER.md +0 -0
  361. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CROSS_PLATFORM.md +0 -0
  362. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CUSTOMER_PORTAL.md +0 -0
  363. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/DRIVE_QUEUE.md +0 -0
  364. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/EPHEMERAL_WORKERS.md +0 -0
  365. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/FORGE_MIGRATION.md +0 -0
  366. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/GRAPHIFY_SETUP.md +0 -0
  367. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ISSUE_GUIDANCE.md +0 -0
  368. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/MAC_MINI.md +0 -0
  369. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  370. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/NOTIFIER.md +0 -0
  371. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/OPENCODE_VERIFICATION.md +0 -0
  372. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/OPERATING_GOTCHAS.md +0 -0
  373. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ORACLE_LOOP.md +0 -0
  374. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PHONE_WEBAPP.md +0 -0
  375. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PIPELINE_V2.md +0 -0
  376. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PLATFORM_EVOLUTION.md +0 -0
  377. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/SECOND_BACKEND.md +0 -0
  378. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/STORE_SERVICE.md +0 -0
  379. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  380. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/WEB_CONTROL_CENTER.md +0 -0
  381. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/epic-down.sh +0 -0
  394. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/epic-up.sh +0 -0
  395. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/preflight.sh +0 -0
  396. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/provision-worker.sh +0 -0
  397. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  398. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  399. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/verify-github-token.sh +0 -0
  400. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/codegen.py +0 -0
  401. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/coord-test-runner.sh +0 -0
  402. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/drive-batch.sh +0 -0
  403. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/gen_board_fixture.py +0 -0
  404. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/next_release_tag.py +0 -0
  405. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/run_tests_in_populated_home.sh +0 -0
  406. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/run_tests_without_gh.sh +0 -0
  407. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/smoke_437_interactive.py +0 -0
  408. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_878_review_capture.py +0 -0
  409. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_release_published.py +0 -0
  410. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_release_wheel.py +0 -0
  411. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/setup.cfg +0 -0
  412. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/SMOKE_SET.md +0 -0
  413. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/__init__.py +0 -0
  414. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  415. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/contract.md +0 -0
  416. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/manifest.yml +0 -0
  417. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  418. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  419. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  420. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  421. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/conftest.py +0 -0
  422. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/contract.md +0 -0
  423. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/manifest.yml +0 -0
  424. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  425. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  426. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/contract.md +0 -0
  427. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/manifest.yml +0 -0
  428. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  429. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  430. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  431. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  432. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  433. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  434. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  435. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  436. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  437. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  438. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/contract.md +0 -0
  439. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  440. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  441. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/manifest.yml +0 -0
  442. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/tsconfig.json +0 -0
  444. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  445. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/conftest.py +0 -0
  446. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-basic.json +0 -0
  447. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  448. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  449. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  462. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  463. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  464. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  465. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_acceptance.py +0 -0
  466. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_acceptance_drivers.py +0 -0
  467. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent.py +0 -0
  468. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_api_error.py +0 -0
  469. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_app.py +0 -0
  470. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_branch_base.py +0 -0
  471. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_branch_capture.py +0 -0
  472. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_config_free_1712.py +0 -0
  473. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_deploy_units_endpoint.py +0 -0
  474. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_dirty_worktree.py +0 -0
  475. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_graph_self_heal.py +0 -0
  476. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_health_h3.py +0 -0
  477. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_idle_restart.py +0 -0
  478. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_push_failure.py +0 -0
  479. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_reap.py +0 -0
  480. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_repos_and_pull.py +0 -0
  481. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_restart_services_endpoint.py +0 -0
  482. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_startup_diagnostics.py +0 -0
  483. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_update.py +0 -0
  484. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_update_bluegreen.py +0 -0
  485. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_usage_limit.py +0 -0
  486. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ambient_home_isolation.py +0 -0
  487. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_approve_reject_plan.py +0 -0
  488. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_approve_usage_gate.py +0 -0
  489. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_assignment_already_recorded_daemon.py +0 -0
  490. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_log.py +0 -0
  491. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_outcome.py +0 -0
  492. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_query.py +0 -0
  493. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_auto_loop.py +0 -0
  494. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_auto_release_publish_2035.py +0 -0
  495. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_base_checkout_restore.py +0 -0
  496. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_cap_762.py +0 -0
  497. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_fixture.py +0 -0
  498. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_read_path.py +0 -0
  499. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_wire.py +0 -0
  502. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_brain.py +0 -0
  503. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_branch_model.py +0 -0
  504. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_bug_intake.py +0 -0
  505. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_build_worker_image_env_update.py +0 -0
  506. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cargo_cache.py +0 -0
  507. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ci_acceptance_gate_1950.py +0 -0
  508. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ci_store.py +0 -0
  509. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_claim.py +0 -0
  510. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_acceptance.py +0 -0
  511. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign.py +0 -0
  512. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  513. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_remote.py +0 -0
  514. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_provider.py +0 -0
  515. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_audit.py +0 -0
  516. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_chat_continue.py +0 -0
  517. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_diagnose_config_provenance.py +0 -0
  518. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_diagnose_graph.py +0 -0
  519. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor.py +0 -0
  520. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_free_1801.py +0 -0
  521. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  522. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_drive.py +0 -0
  523. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_drive_queue.py +0 -0
  524. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_escalate.py +0 -0
  525. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_fix_headless_review.py +0 -0
  526. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_gate_a.py +0 -0
  527. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_install_drift.py +0 -0
  528. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_install_skills.py +0 -0
  529. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_issue_create_label.py +0 -0
  530. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_issue_reopen.py +0 -0
  531. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_merge.py +0 -0
  532. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_merge_queue.py +0 -0
  556. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_provider.py +0 -0
  557. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_review_finalizing.py +0 -0
  558. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_test_failed_tag.py +0 -0
  559. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_usage_limit.py +0 -0
  560. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_sync_comments_873.py +0 -0
  561. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_test_plan.py +0 -0
  562. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_track.py +0 -0
  563. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_tui_update.py +0 -0
  564. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_wait.py +0 -0
  565. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_client_base_install.py +0 -0
  566. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_usage_gate.py +0 -0
  573. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test.py +0 -0
  576. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_baseline.py +0 -0
  577. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_routing.py +0 -0
  578. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_toolchain.py +0 -0
  579. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_web_sse_restart_live.py +0 -0
  580. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coordinator_machine.py +0 -0
  581. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cross_platform_imports.py +0 -0
  582. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard.py +0 -0
  583. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_fixture.py +0 -0
  584. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_terminal.py +0 -0
  585. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_terminal_live.py +0 -0
  586. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_db.py +0 -0
  587. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dead_end.py +0 -0
  588. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_db_backup.py +0 -0
  589. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_dist.py +0 -0
  590. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_rollback.py +0 -0
  591. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_drive_queue_unit.py +0 -0
  592. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_manifest.py +0 -0
  593. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_units_lane.py +0 -0
  594. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_web_unit.py +0 -0
  595. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deps.py +0 -0
  596. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_diagnose.py +0 -0
  597. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dispatch_target_validation.py +0 -0
  598. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dist_name.py +0 -0
  599. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_done_housekeeping.py +0 -0
  600. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_queue.py +0 -0
  601. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_state.py +0 -0
  602. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_tmux.py +0 -0
  603. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_capability_detection.py +0 -0
  604. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  605. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_image_provenance.py +0 -0
  606. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_errors.py +0 -0
  607. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_events.py +0 -0
  608. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_failure_class.py +0 -0
  609. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_filelock.py +0 -0
  610. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  611. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fix_of_force_override.py +0 -0
  612. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_config_health.py +0 -0
  613. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_health_probes.py +0 -0
  614. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_health_snapshot.py +0 -0
  615. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_freshness.py +0 -0
  616. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_a.py +0 -0
  617. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_b.py +0 -0
  618. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_snapshot_staleness.py +0 -0
  619. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gates.py +0 -0
  620. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_generated_types_fixture.py +0 -0
  621. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_github_ops.py +0 -0
  622. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_handoff.py +0 -0
  625. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_checks.py +0 -0
  626. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_cli.py +0 -0
  627. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_cli_graph.py +0 -0
  628. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_config.py +0 -0
  629. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_context.py +0 -0
  630. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_deploy_lane_facts.py +0 -0
  631. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_incident_regression.py +0 -0
  632. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_pypi.py +0 -0
  633. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_registry.py +0 -0
  634. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_timer_active.py +0 -0
  635. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_toolchain.py +0 -0
  636. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_unit_drift.py +0 -0
  637. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_unit_enablement.py +0 -0
  638. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_hooks.py +0 -0
  639. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_human_attended_437.py +0 -0
  640. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_init.py +0 -0
  641. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_integration.py +0 -0
  642. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_briefing_echo.py +0 -0
  643. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_prefill_state.py +0 -0
  644. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_session_relaunch.py +0 -0
  645. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_test_verdict_backstop.py +0 -0
  646. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_token_attribution.py +0 -0
  647. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_worktree.py +0 -0
  648. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_issue_store_seam.py +0 -0
  649. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_liveness_auditor.py +0 -0
  650. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_liveness_notify.py +0 -0
  651. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_machine_pause.py +0 -0
  652. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_merge_queue.py +0 -0
  653. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_merge_verify.py +0 -0
  654. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_chat.py +0 -0
  655. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_dispatch.py +0 -0
  656. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_gate.py +0 -0
  657. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_order.py +0 -0
  658. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_seam.py +0 -0
  659. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_mock_author.py +0 -0
  660. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_model_tiering.py +0 -0
  661. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_models.py +0 -0
  662. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_models_config_labels.py +0 -0
  663. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_needs_attention.py +0 -0
  664. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_network.py +0 -0
  665. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_new_issue_chat.py +0 -0
  666. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_next_release_tag.py +0 -0
  667. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_no_direct_gh_calls.py +0 -0
  668. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_node_shim.py +0 -0
  669. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_baseline.py +0 -0
  670. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_cli.py +0 -0
  671. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_collect.py +0 -0
  672. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_config.py +0 -0
  673. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_drive_seam.py +0 -0
  674. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_isolation.py +0 -0
  675. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_predicate.py +0 -0
  676. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_quiet_hours.py +0 -0
  677. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_service.py +0 -0
  678. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notify_drain.py +0 -0
  679. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_openapi.py +0 -0
  680. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_operational_defaults.py +0 -0
  681. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_overlap_fence.py +0 -0
  682. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_packaged_deploy_units.py +0 -0
  683. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_parentage.py +0 -0
  684. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_paste_landed.py +0 -0
  685. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_pipeline.py +0 -0
  686. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_approve_plan_command.py +0 -0
  687. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_pr_command.py +0 -0
  688. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_review_command.py +0 -0
  689. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_only.py +0 -0
  690. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_parser.py +0 -0
  691. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_platform_paths.py +0 -0
  692. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_portal_bridge.py +0 -0
  693. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_portal_config.py +0 -0
  694. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_pr_body_lint.py +0 -0
  695. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_prereqs.py +0 -0
  696. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_production_db_guard.py +0 -0
  697. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_progress.py +0 -0
  698. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_provider_seam.py +0 -0
  699. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers.py +0 -0
  700. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers_config_labels.py +0 -0
  701. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers_pty.py +0 -0
  702. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_quiet_hours.py +0 -0
  703. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_quiet_hours_store_2146.py +0 -0
  704. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reap_merged_sessions.py +0 -0
  705. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reap_stale_interactive_tick.py +0 -0
  706. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_branch.py +0 -0
  707. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_completions.py +0 -0
  708. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_merges.py +0 -0
  709. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_usage_limit_done.py +0 -0
  710. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_refine_chat.py +0 -0
  711. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_cordon_2101.py +0 -0
  712. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_propagate.py +0 -0
  713. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_unified_1242.py +0 -0
  714. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_verify.py +0 -0
  715. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_window.py +0 -0
  716. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_remote_auto_prune.py +0 -0
  717. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_remote_interactive_reaper.py +0 -0
  718. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_report_result_push.py +0 -0
  719. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reports.py +0 -0
  720. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry.py +0 -0
  721. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry_advisory_1606.py +0 -0
  722. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry_type_1636.py +0 -0
  723. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_revalidate.py +0 -0
  724. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review.py +0 -0
  725. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_end_review_without_verdict.py +0 -0
  726. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_parse_failure_diagnostic.py +0 -0
  727. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_reaffirm.py +0 -0
  728. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_state.py +0 -0
  729. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_backstop.py +0 -0
  730. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_override_audit.py +0 -0
  731. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_relay.py +0 -0
  732. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_zero_commits.py +0 -0
  733. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_scoped_review_wiring.py +0 -0
  734. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_scorecard.py +0 -0
  735. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_serve.py +0 -0
  736. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_serve_app_board_trim.py +0 -0
  737. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_session.py +0 -0
  738. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_slice_issue_attribution.py +0 -0
  739. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke.py +0 -0
  740. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke_live_checkout_restore.py +0 -0
  741. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke_workflow.py +0 -0
  742. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_spend_ceiling.py +0 -0
  743. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_spend_ceiling_coordinator.py +0 -0
  744. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_split.py +0 -0
  745. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_split_work.py +0 -0
  746. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stage_projection.py +0 -0
  747. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stalled_pipeline.py +0 -0
  748. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_state.py +0 -0
  749. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_state_review_findings_daemon.py +0 -0
  750. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_status_fleet_footer.py +0 -0
  751. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stop_1567.py +0 -0
  752. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stuck.py +0 -0
  753. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_terminal_command.py +0 -0
  754. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_author.py +0 -0
  755. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_chat.py +0 -0
  756. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_orchestrator.py +0 -0
  757. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_report.py +0 -0
  758. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_verdict_parsing.py +0 -0
  759. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_verdict_transcript_floor.py +0 -0
  760. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_board_audit.py +0 -0
  761. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_config_load_1080.py +0 -0
  762. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_daemon_routing_906.py +0 -0
  763. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_tmux_host.py +0 -0
  764. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_tmux_session.py +0 -0
  765. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_transcript_floor.py +0 -0
  766. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage.py +0 -0
  767. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage_limits.py +0 -0
  768. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage_rollup.py +0 -0
  769. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_venv_live_install_2121.py +0 -0
  770. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_version_single_source.py +0 -0
  771. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_watch.py +0 -0
  772. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_events.py +0 -0
  773. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_image_pin_sync.py +0 -0
  774. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_safety.py +0 -0
  775. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_test_scoping.py +0 -0
  776. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worktree.py +0 -0
  777. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  778. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/Cargo.lock +0 -0
  779. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/Cargo.toml +0 -0
  780. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/cargo-config-local-quadraui.toml.example +0 -0
  781. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/audit.rs +0 -0
  782. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/chat.rs +0 -0
  783. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/data.rs +0 -0
  784. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/dialogs.rs +0 -0
  785. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/drive.rs +0 -0
  786. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/drive_queue.rs +0 -0
  787. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/escalation.rs +0 -0
  788. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/events.rs +0 -0
  789. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fixtures.rs +0 -0
  790. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_health.rs +0 -0
  791. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_sessions.rs +0 -0
  792. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_terminals.rs +0 -0
  793. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/format.rs +0 -0
  794. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/milestone_dag.rs +0 -0
  795. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/mod.rs +0 -0
  796. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/msv.rs +0 -0
  797. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/pipeline.rs +0 -0
  798. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/plans.rs +0 -0
  799. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/render.rs +0 -0
  800. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/reports.rs +0 -0
  801. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/sessions.rs +0 -0
  802. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/settings_ui.rs +0 -0
  803. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/sidebar.rs +0 -0
  804. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/terminal.rs +0 -0
  805. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/tests.rs +0 -0
  806. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/types.rs +0 -0
  807. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/workspace.rs +0 -0
  808. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/bin/gtk.rs +0 -0
  809. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/commands.rs +0 -0
  810. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/lib.rs +0 -0
  811. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/main.rs +0 -0
  812. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/settings.rs +0 -0
  813. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/acceptance.rs +0 -0
  814. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/cli.rs +0 -0
  815. {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.61
3
+ Version: 0.5.62
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.61
3
+ Version: 0.5.62
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.61",
2
+ "tag": "0.5.62",
3
3
  "distance": 0,
4
- "node": "g74884c7dae4507e48a87e147dbfae31765822fd5",
4
+ "node": "g84d64a795986ab501062308d9e29da81f86cfb79",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -26,6 +26,7 @@ from pathlib import Path
26
26
  from typing import TYPE_CHECKING, Any, Callable, Iterable
27
27
 
28
28
  from coord import cargo_cache
29
+ from coord.models import DELIVERABLE_ANALYSIS_LABEL
29
30
  from coord.platform_paths import default_coord_dir
30
31
 
31
32
  if TYPE_CHECKING:
@@ -604,6 +605,19 @@ class AssignmentSpec:
604
605
  # `AssignmentSpec(**body)` in agent_app.py 400s on those) unless the
605
606
  # operator has actually configured one.
606
607
  cost_ceiling_usd: float | None = None
608
+ # #2188: the issue's GitHub label names, mirroring `Proposal.issue_labels`
609
+ # (#1430) — carried on the wire so a reap running on a config-free agent
610
+ # (docs/EPHEMERAL_WORKERS.md; no local DB or GitHub token to ask) can
611
+ # still see `coord.models.DELIVERABLE_ANALYSIS_LABEL` without an extra
612
+ # round-trip. Only `coord/dispatch.py`'s `dispatch()` populates this (from
613
+ # `proposal.issue_labels`, itself only set for `type="work"` dispatches —
614
+ # see #1430's `model_for_labels`/`provider_for_labels` gating), and only
615
+ # when non-empty — an agent predating this field 400s on an unrecognized
616
+ # kwarg (`AssignmentSpec(**body)` in agent_app.py), same discipline as
617
+ # every other optional wire field above. Empty by default: a spec with no
618
+ # labels (or dispatched by a caller that never populated
619
+ # `Proposal.issue_labels`) behaves exactly as before this field existed.
620
+ issue_labels: list[str] = field(default_factory=list)
607
621
 
608
622
 
609
623
  class _GitError(RuntimeError):
@@ -2700,6 +2714,11 @@ class AgentAssignment:
2700
2714
  # #448: advisory reason when the worker exited cleanly (exit_code==0) but
2701
2715
  # pushed 0 commits. None on all other status values.
2702
2716
  #
2717
+ # #2188: also None (never set) for an issue labelled `deliverable:
2718
+ # analysis` — that shape lands on `status == DONE`/`analysis_deliverable
2719
+ # = True` below instead, since 0 commits is its SUCCESS condition, not
2720
+ # something advisory.
2721
+ #
2703
2722
  # #1323 used to *also* reuse this field (for "work"-type assignments,
2704
2723
  # see _ADVISORY_TYPES) to hold a reason when a configured artifact_paths
2705
2724
  # glob matched 0 files, downgrading DONE -> ADVISORY in the process.
@@ -2787,6 +2806,26 @@ class AgentAssignment:
2787
2806
  # ceiling kill is indistinguishable from a crash and the money is spent
2788
2807
  # again on the next pass.
2789
2808
  spend_ceiling_reason: str | None = None
2809
+ # #2188: True when `_reap` classified a clean (exit_code==0), 0-commit
2810
+ # exit as a DELIVERABLE — the issue was labelled
2811
+ # `coord.models.DELIVERABLE_ANALYSIS_LABEL` (`spec.issue_labels`) — rather
2812
+ # than the #448 "worker did nothing" ADVISORY. Only ever set alongside
2813
+ # `status == DONE`; `False` on every other outcome, including a normal
2814
+ # zero-commit ADVISORY (the label wasn't present) and a labelled issue
2815
+ # whose worker actually pushed commits (that's an ordinary DONE, handled
2816
+ # by the ordinary Test/Review/Merge pipeline — this flag is specifically
2817
+ # "the deliverable IS the message, there is no diff").
2818
+ analysis_deliverable: bool = False
2819
+ # #2188: the worker's own final message — `result` off the last
2820
+ # stream-json `result` event (`coord.worker_events.WorkerSummary.
2821
+ # result_text`), captured here so the coordinator can post the actual
2822
+ # deliverable (a diagnosis/audit's prose) to the issue instead of a bare
2823
+ # "assignment complete" comment. The worker itself has no `gh` access to
2824
+ # post this — see coord.notify.post_transition's EVENT_COMPLETION arm.
2825
+ # Populated only when `analysis_deliverable` is True; `None` otherwise
2826
+ # (a normal work assignment's deliverable is the diff itself, already
2827
+ # visible on the PR — restating the transcript there would be noise).
2828
+ result_text: str | None = None
2790
2829
 
2791
2830
  def to_dict(self) -> dict:
2792
2831
  d = asdict(self)
@@ -7209,6 +7248,16 @@ class AgentServer:
7209
7248
  # ("work",) to the full work-like set so `test-author`/`mock-author`
7210
7249
  # get the same downgrade; before that they could land on `done` with
7211
7250
  # an empty branch.
7251
+ # #2188: an issue labelled `deliverable:analysis` inverts the #448
7252
+ # reading — for it, a clean exit with 0 commits is the SUCCESS
7253
+ # condition (the deliverable is the worker's own final message, not
7254
+ # a diff), not the "worker did nothing" anomaly. Detected off
7255
+ # `assignment.spec.issue_labels` (wire field, #2188) so this works on
7256
+ # a config-free agent too — no DB or GitHub read required. Resolved
7257
+ # in the SAME `_ahead == 0` branch as the advisory check below so
7258
+ # the two can never disagree about what "0 commits" means for this
7259
+ # assignment.
7260
+ _analysis_deliverable = False
7212
7261
  _zero_commit_reason: str | None = None
7213
7262
  if (exit_code == 0 and assignment is not None
7214
7263
  and assignment.worktree_path
@@ -7218,17 +7267,30 @@ class AgentServer:
7218
7267
  _base = assignment.spec.branch or "main"
7219
7268
  _ahead = self._commits_ahead(_wt_advisory, _base)
7220
7269
  if _ahead == 0:
7221
- _zero_commit_reason = (
7222
- "worker exited cleanly but pushed 0 commits"
7223
- )
7224
- try:
7225
- with open(assignment.log_path, "a") as reopen:
7226
- reopen.write(
7227
- "# reap: advisory 0 commits ahead of "
7228
- f"{_base}; status set to advisory\n"
7229
- )
7230
- except OSError:
7231
- pass
7270
+ if DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
7271
+ _analysis_deliverable = True
7272
+ try:
7273
+ with open(assignment.log_path, "a") as reopen:
7274
+ reopen.write(
7275
+ "# reap: analysis deliverable — 0 commits "
7276
+ f"ahead of {_base}; issue labelled "
7277
+ f"{DELIVERABLE_ANALYSIS_LABEL!r}, status "
7278
+ "set to done (#2188)\n"
7279
+ )
7280
+ except OSError:
7281
+ pass
7282
+ else:
7283
+ _zero_commit_reason = (
7284
+ "worker exited cleanly but pushed 0 commits"
7285
+ )
7286
+ try:
7287
+ with open(assignment.log_path, "a") as reopen:
7288
+ reopen.write(
7289
+ "# reap: advisory — 0 commits ahead of "
7290
+ f"{_base}; status set to advisory\n"
7291
+ )
7292
+ except OSError:
7293
+ pass
7232
7294
 
7233
7295
  # This block MUST always run regardless of push outcome so that
7234
7296
  # the assignment transitions out of 'running'.
@@ -7296,6 +7358,22 @@ class AgentServer:
7296
7358
  assignment.zero_commit_reason = _zero_commit_reason
7297
7359
  else:
7298
7360
  assignment.status = DONE
7361
+ if _analysis_deliverable:
7362
+ # #2188: 0 commits on a `deliverable:analysis`
7363
+ # issue is the success shape — capture the
7364
+ # worker's own final message (already parsed
7365
+ # into `_worker_summary` above) so the
7366
+ # coordinator can post the actual deliverable to
7367
+ # the issue instead of a bare "complete" comment.
7368
+ # Best-effort: a non-stream-json log (or one with
7369
+ # no terminal `result` event) just leaves
7370
+ # `result_text` `None` — the assignment is still
7371
+ # correctly `done`, only the auto-posted prose is
7372
+ # missing, same degradation as every other
7373
+ # best-effort log parse in this function.
7374
+ assignment.analysis_deliverable = True
7375
+ if _worker_summary is not None and _worker_summary.result_text:
7376
+ assignment.result_text = _worker_summary.result_text
7299
7377
  else:
7300
7378
  assignment.status = FAILED
7301
7379
  # #1461: only ever attaches to a FAILED/ADVISORY transition —
@@ -755,6 +755,14 @@ def dispatch(
755
755
  # field reject unknown payload keys with a 400.
756
756
  if getattr(proposal, "resume_session_id", None):
757
757
  payload["resume_session_id"] = proposal.resume_session_id
758
+ # #2188: the issue's GitHub labels, so the agent's own reap can see
759
+ # `coord.models.DELIVERABLE_ANALYSIS_LABEL` without a DB/GitHub round
760
+ # trip (config-free agent — docs/EPHEMERAL_WORKERS.md). Only sent when
761
+ # non-empty, same discipline as every optional wire field above — an
762
+ # agent predating `AssignmentSpec.issue_labels` 400s on an unrecognized
763
+ # kwarg.
764
+ if proposal.issue_labels:
765
+ payload["issue_labels"] = list(proposal.issue_labels)
758
766
  # #2131: per-leg spend ceiling, resolved here (CLI/daemon lane) and
759
767
  # carried on the wire so a config-free agent is covered too. Sent ONLY
760
768
  # when the operator has actually configured one — with no `budget:` block
@@ -109,6 +109,7 @@ from coord.interactive import (
109
109
  )
110
110
  from coord.dead_end import DeadEnd, detect_dead_end
111
111
  from coord.failure_class import classify_failure, plan_usage_limit_resume
112
+ from coord.models import DELIVERABLE_ANALYSIS_LABEL
112
113
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
113
114
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
114
115
  # import lived in a hunk #1590 rewrote, so the merge came out textually clean
@@ -1397,6 +1398,32 @@ def decide(
1397
1398
  f"{state.work_machine or machine}"
1398
1399
  )
1399
1400
 
1401
+ # ---- analysis deliverable: done + 0 commits is the SUCCESS shape (#2188)
1402
+ #
1403
+ # An issue labelled `deliverable:analysis` inverts the read on a 0-commit
1404
+ # exit: the deliverable is the worker's own final message (already
1405
+ # posted to the issue by the coordinator — see coord.notify.
1406
+ # post_transition's EVENT_COMPLETION arm), not a diff. `coord.agent.
1407
+ # AgentServer._reap` only ever produces this shape on `status == "done"`
1408
+ # (never "advisory" — see `AgentAssignment.analysis_deliverable`), so
1409
+ # this only needs to guard the `done` arm above, and it runs BEFORE the
1410
+ # "no branch"/dead-end/Test/Review/Merge machinery below: none of that
1411
+ # applies when there is nothing to test, review, or merge. A labelled
1412
+ # issue whose worker DID push commits (the label describes the common
1413
+ # case, not a hard rule) falls through unchanged — `branch_has_commits`
1414
+ # is False only for the genuine 0-commit shape.
1415
+ if (
1416
+ state.work_status == "done"
1417
+ and DELIVERABLE_ANALYSIS_LABEL in state.issue_labels
1418
+ and (not state.work_branch or not verifier.branch_has_commits(state))
1419
+ ):
1420
+ return _succeed(
1421
+ f"✓ ANALYSIS DELIVERABLE — {state.work_aid} completed with 0 "
1422
+ f"commits (issue labelled `{DELIVERABLE_ANALYSIS_LABEL}`); the "
1423
+ "worker's final message is the deliverable and was posted to "
1424
+ "the issue automatically — nothing to test, review, or merge."
1425
+ )
1426
+
1400
1427
  # A 'done' row with no branch never pushed anything either.
1401
1428
  if not state.work_branch:
1402
1429
  return _die(
@@ -354,6 +354,22 @@ def test_mode_from_labels(labels) -> str | None:
354
354
  return None
355
355
 
356
356
 
357
+ # #2188: the per-issue DELIVERABLE policy label — mirrors `TEST_MODE_*_LABEL`'s
358
+ # shape (cheapest fit, no body parsing). An issue whose deliverable is a
359
+ # written artifact (a diagnosis, an audit, a spike/investigation writeup)
360
+ # rather than a diff cannot succeed in the default pipeline: a worker that
361
+ # does exactly what was asked ends with 0 commits by design, which the reap
362
+ # otherwise reads as the #448 "worker did nothing" ADVISORY and `coord drive`
363
+ # gives up on — discarding the whole deliverable (#2188's own worked example,
364
+ # #2132, lost $1.65 of correct, on-topic analysis this way). Labelling the
365
+ # issue `deliverable:analysis` inverts that reading: a clean exit with 0
366
+ # commits is `coord.agent.AgentServer._reap`'s SUCCESS condition for this
367
+ # issue, not its anomaly — see `_ZERO_COMMIT_TYPES`/`AgentAssignment.
368
+ # analysis_deliverable` in coord/agent.py and the `decide()` short-circuit in
369
+ # coord/drive.py that skips Test/Review/Merge for it.
370
+ DELIVERABLE_ANALYSIS_LABEL = "deliverable:analysis"
371
+
372
+
357
373
  @dataclass
358
374
  class Assignment:
359
375
  machine_name: str
@@ -2470,7 +2470,24 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
2470
2470
  failure_reason=_failure_reason,
2471
2471
  )
2472
2472
  elif transition.event == EVENT_COMPLETION:
2473
- post_completion(exit_code=transition.exit_code or 0, **common)
2473
+ # #2188: a `deliverable:analysis` issue that legitimately ended with
2474
+ # 0 commits has no diff to point at — the deliverable IS the
2475
+ # worker's own final message (`AgentAssignment.result_text`, see
2476
+ # `coord.agent.AgentServer._reap`). Post it as the completion
2477
+ # comment's summary so it reaches the issue automatically; the
2478
+ # worker itself has no `gh` access to post it. Every other
2479
+ # completion (the overwhelming majority) is unaffected — `entry.get
2480
+ # ("analysis_deliverable")` is only ever truthy for this one shape.
2481
+ _analysis_summary = (
2482
+ entry.get("result_text") or ""
2483
+ if entry.get("analysis_deliverable")
2484
+ else ""
2485
+ )
2486
+ post_completion(
2487
+ exit_code=transition.exit_code or 0,
2488
+ summary=_analysis_summary,
2489
+ **common,
2490
+ )
2474
2491
  mark_notified(
2475
2492
  transition.assignment_id,
2476
2493
  transition.event,
@@ -416,3 +416,169 @@ def test_advisory_counted_as_completed_in_health(
416
416
  assert h["active"] == 0, "ADVISORY must not count as active"
417
417
  assert h["completed"] >= 1, "ADVISORY must count as completed"
418
418
  server.shutdown()
419
+
420
+
421
+ # ── `deliverable:analysis` inverts the 0-commit reading (#2188) ──────────────
422
+ #
423
+ # An issue whose deliverable is a written artifact (a diagnosis, an audit, a
424
+ # spike) — not a diff — legitimately ends with 0 commits: that is the SUCCESS
425
+ # condition, not the #448 "worker did nothing" anomaly. Labelling the issue
426
+ # `deliverable:analysis` tells the reap to record `done`, not `advisory`, for
427
+ # exactly that shape. An unlabelled issue with 0 commits must be completely
428
+ # unaffected — this is the other half of the acceptance test the issue asks
429
+ # for ("a normal (code) issue with zero commits still reports advisory
430
+ # exactly as it does today").
431
+
432
+ _RESULT_LINE = (
433
+ '{"type": "result", "subtype": "success", "is_error": false, '
434
+ '"result": "Diagnosis: 74 percent of blocking review findings were '
435
+ 'real defects; zero were false positives or style nits."}'
436
+ )
437
+
438
+
439
+ def test_analysis_deliverable_zero_commit_is_done_not_advisory(
440
+ tmp_path: Path, repo_local_only: Path
441
+ ) -> None:
442
+ """#2188: `deliverable:analysis` + 0 commits + clean exit → DONE, not
443
+ ADVISORY — the core regression guard for the issue's acceptance
444
+ criteria."""
445
+ server = AgentServer(
446
+ machine_name="t",
447
+ repos=["api"],
448
+ repo_paths={"api": str(repo_local_only)},
449
+ state_dir=tmp_path / "state",
450
+ # Worker exits cleanly, writes nothing, but DOES emit a stream-json
451
+ # `result` event carrying its final diagnosis — exactly what
452
+ # `claude -p --output-format stream-json` produces.
453
+ worker_command=lambda spec: ["/bin/sh", "-c", f"printf '%s\\n' '{_RESULT_LINE}'"],
454
+ )
455
+ spec = AssignmentSpec(
456
+ repo_name="api",
457
+ repo_path=str(repo_local_only),
458
+ issue_number=2132,
459
+ issue_title="Diagnose the 29% request-changes rate",
460
+ briefing="b",
461
+ branch="main",
462
+ issue_labels=["deliverable:analysis"],
463
+ )
464
+ a = server.assign(spec)
465
+ final = server.wait_for(a.id, timeout=10)
466
+
467
+ assert final.status == DONE, (
468
+ f"expected DONE for a labelled analysis deliverable, got {final.status!r}"
469
+ )
470
+ assert final.exit_code == 0
471
+ assert final.zero_commit_reason is None, (
472
+ "must not carry the #448 advisory reason once relabelled done"
473
+ )
474
+ assert final.analysis_deliverable is True
475
+ assert final.result_text is not None
476
+ assert "74 percent" in final.result_text
477
+ server.shutdown()
478
+
479
+
480
+ def test_analysis_deliverable_label_appears_in_log(
481
+ tmp_path: Path, repo_local_only: Path
482
+ ) -> None:
483
+ """The analysis-deliverable diagnosis is written to the assignment log,
484
+ mirroring the existing advisory-reason log guarantee."""
485
+ server = AgentServer(
486
+ machine_name="t",
487
+ repos=["api"],
488
+ repo_paths={"api": str(repo_local_only)},
489
+ state_dir=tmp_path / "state",
490
+ worker_command=lambda spec: ["/bin/true"],
491
+ )
492
+ spec = AssignmentSpec(
493
+ repo_name="api",
494
+ repo_path=str(repo_local_only),
495
+ issue_number=2133,
496
+ issue_title="noop analysis",
497
+ briefing="b",
498
+ branch="main",
499
+ issue_labels=["deliverable:analysis"],
500
+ )
501
+ a = server.assign(spec)
502
+ final = server.wait_for(a.id, timeout=10)
503
+
504
+ assert final.status == DONE
505
+ assert final.log_path is not None
506
+ log_text = Path(final.log_path).read_text()
507
+ assert "analysis deliverable" in log_text.lower(), (
508
+ f"expected 'analysis deliverable' in log, got:\n{log_text}"
509
+ )
510
+ server.shutdown()
511
+
512
+
513
+ def test_unlabelled_zero_commit_is_still_advisory_exactly_as_before(
514
+ tmp_path: Path, repo_local_only: Path
515
+ ) -> None:
516
+ """#2188 acceptance: an ORDINARY (unlabelled) issue with 0 commits must
517
+ be completely unaffected by the new label — same ADVISORY status, same
518
+ reason, same `analysis_deliverable=False`/`result_text=None` as every
519
+ zero-commit work assignment before this feature existed."""
520
+ server = AgentServer(
521
+ machine_name="t",
522
+ repos=["api"],
523
+ repo_paths={"api": str(repo_local_only)},
524
+ state_dir=tmp_path / "state",
525
+ worker_command=lambda spec: ["/bin/sh", "-c", f"printf '%s\\n' '{_RESULT_LINE}'"],
526
+ )
527
+ spec = AssignmentSpec(
528
+ repo_name="api",
529
+ repo_path=str(repo_local_only),
530
+ issue_number=2134,
531
+ issue_title="ordinary no-op work",
532
+ briefing="b",
533
+ branch="main",
534
+ # No issue_labels at all — the common case.
535
+ )
536
+ a = server.assign(spec)
537
+ final = server.wait_for(a.id, timeout=10)
538
+
539
+ assert final.status == ADVISORY, (
540
+ f"unlabelled 0-commit issue must stay ADVISORY, got {final.status!r}"
541
+ )
542
+ assert final.zero_commit_reason is not None
543
+ assert "0 commits" in final.zero_commit_reason
544
+ assert final.analysis_deliverable is False
545
+ assert final.result_text is None
546
+ server.shutdown()
547
+
548
+
549
+ def test_analysis_deliverable_survives_persist_load(
550
+ tmp_path: Path, repo_local_only: Path
551
+ ) -> None:
552
+ """`analysis_deliverable`/`result_text` round-trip through the agent
553
+ state JSON (persist → load), mirroring the existing advisory round-trip
554
+ guarantee."""
555
+ from coord.agent import AgentAssignment # noqa: PLC0415
556
+
557
+ a = AgentAssignment(
558
+ id="analysis-001",
559
+ spec=AssignmentSpec(
560
+ repo_name="api",
561
+ repo_path="/tmp",
562
+ issue_number=1,
563
+ issue_title="t",
564
+ briefing="b",
565
+ issue_labels=["deliverable:analysis"],
566
+ ),
567
+ status=DONE,
568
+ analysis_deliverable=True,
569
+ result_text="the diagnosis",
570
+ exit_code=0,
571
+ finished_at=1234567890.0,
572
+ )
573
+ d = a.to_dict()
574
+ assert d["status"] == DONE
575
+ assert d["analysis_deliverable"] is True
576
+ assert d["result_text"] == "the diagnosis"
577
+
578
+ spec_data = d.pop("spec")
579
+ spec = AssignmentSpec(**spec_data)
580
+ a2 = AgentAssignment(spec=spec, **d)
581
+ assert a2.status == DONE
582
+ assert a2.analysis_deliverable is True
583
+ assert a2.result_text == "the diagnosis"
584
+ assert a2.spec.issue_labels == ["deliverable:analysis"]
@@ -247,6 +247,41 @@ class TestDispatch:
247
247
  payload = mock_post.call_args.kwargs["json"]
248
248
  assert "target_branch" not in payload
249
249
 
250
+ @patch("coord.dispatch.httpx.post")
251
+ def test_payload_carries_issue_labels_when_set(
252
+ self, mock_post: MagicMock, config: Config,
253
+ ) -> None:
254
+ """#2188: `proposal.issue_labels` flows onto the wire so the agent's
255
+ own reap can see `deliverable:analysis` without a DB/GitHub round
256
+ trip (config-free agent)."""
257
+ mock_resp = MagicMock()
258
+ mock_resp.json.return_value = {"ok": True}
259
+ mock_post.return_value = mock_resp
260
+
261
+ p = Proposal(
262
+ id=1, machine_name="laptop", repo_name="api",
263
+ issue_number=2132, issue_title="Diagnose the 29% rate",
264
+ rationale="analysis",
265
+ issue_labels=["deliverable:analysis", "priority:high"],
266
+ )
267
+ dispatch(p, config)
268
+ payload = mock_post.call_args.kwargs["json"]
269
+ assert payload["issue_labels"] == ["deliverable:analysis", "priority:high"]
270
+
271
+ @patch("coord.dispatch.httpx.post")
272
+ def test_payload_omits_issue_labels_when_unset(
273
+ self, mock_post: MagicMock, config: Config, proposal: Proposal,
274
+ ) -> None:
275
+ """Older agents (pre-#2188) reject unknown kwargs in
276
+ AssignmentSpec(**body), so the field must be omitted when the
277
+ proposal carries no labels — matches `target_branch`'s discipline."""
278
+ mock_resp = MagicMock()
279
+ mock_resp.json.return_value = {"ok": True}
280
+ mock_post.return_value = mock_resp
281
+ dispatch(proposal, config)
282
+ payload = mock_post.call_args.kwargs["json"]
283
+ assert "issue_labels" not in payload
284
+
250
285
  @patch("coord.dispatch.httpx.post")
251
286
  def test_payload_carries_coordinator_only_files(
252
287
  self, mock_post: MagicMock, proposal: Proposal,
@@ -1406,6 +1406,77 @@ def test_advisory_with_no_branch_at_all_is_terminal():
1406
1406
  assert "no commits on its branch" in action.message
1407
1407
 
1408
1408
 
1409
+ # ── analysis deliverable: done + 0 commits is a SUCCESS, not a dead end (#2188)
1410
+
1411
+
1412
+ def test_analysis_deliverable_done_with_no_commits_succeeds():
1413
+ """#2188: `coord.agent.AgentServer._reap` never lands a `deliverable:
1414
+ analysis` issue's 0-commit exit on `advisory` — it lands DONE. `coord
1415
+ drive` must record that as a success instead of dying on 'no commits
1416
+ on its branch'/'no branch' the way an ordinary work row would."""
1417
+ action = step(
1418
+ state(
1419
+ work_aid="w1",
1420
+ work_status="done",
1421
+ work_branch="issue-2132-diagnose",
1422
+ issue_labels=("deliverable:analysis",),
1423
+ ),
1424
+ verifier=FakeVerifier(has_commits=False),
1425
+ )
1426
+ assert action.is_exit
1427
+ assert action.exit_code == EXIT_OK
1428
+ assert "ANALYSIS" in action.message
1429
+ assert "deliverable:analysis" in action.message
1430
+
1431
+
1432
+ def test_analysis_deliverable_done_with_no_branch_at_all_succeeds():
1433
+ """Same as above when the reap never captured a branch name at all
1434
+ (e.g. the worktree was already gone) — `not state.work_branch` alone
1435
+ must be enough to take the analysis-deliverable exit, without ever
1436
+ calling `verifier.branch_has_commits` on an empty branch."""
1437
+ verifier = FakeVerifier(has_commits=True)
1438
+ action = step(
1439
+ state(
1440
+ work_aid="w1",
1441
+ work_status="done",
1442
+ work_branch="",
1443
+ issue_labels=("deliverable:analysis",),
1444
+ ),
1445
+ verifier=verifier,
1446
+ )
1447
+ assert action.is_exit
1448
+ assert action.exit_code == EXIT_OK
1449
+ assert verifier.commits_calls == 0
1450
+
1451
+
1452
+ def test_analysis_deliverable_done_with_commits_falls_through_unchanged():
1453
+ """The label describes the common case, not a hard rule: a
1454
+ `deliverable:analysis` issue whose worker DID push commits must reach
1455
+ the ordinary Test/Review/Merge pipeline exactly like any other done
1456
+ row, not the analysis short-circuit."""
1457
+ action = step(
1458
+ done_work(work_test_state="", issue_labels=("deliverable:analysis",)),
1459
+ verifier=FakeVerifier(has_commits=True),
1460
+ )
1461
+ assert action.kind == WAIT # waiting on coord to dispatch the Test stage
1462
+
1463
+
1464
+ def test_unlabelled_done_with_no_commits_is_unaffected_by_2188():
1465
+ """#2188 acceptance: an ordinary (unlabelled) issue must be completely
1466
+ unaffected by the analysis-deliverable short-circuit — `coord.agent.
1467
+ AgentServer._reap` never puts an unlabelled 0-commit work row on
1468
+ `done` in the first place (it stays `advisory`, covered by the tests
1469
+ above), but this guards `decide()`'s own logic in case a `done` row
1470
+ with no branch/commits reaches it some other way."""
1471
+ action = step(
1472
+ state(work_aid="w1", work_status="done", work_branch=""),
1473
+ verifier=FakeVerifier(has_commits=False),
1474
+ )
1475
+ assert action.is_exit
1476
+ assert "no branch" in action.message
1477
+ assert "ANALYSIS" not in action.message
1478
+
1479
+
1409
1480
  # ═══════════════════════════════════════════════════════════════════════════
1410
1481
  # the TEST gate
1411
1482
  # ═══════════════════════════════════════════════════════════════════════════
@@ -206,6 +206,66 @@ class TestRun:
206
206
  assert row is not None, "assignment row must exist"
207
207
  assert row["failure_reason"] == "remote: Invalid username or token."
208
208
 
209
+ def test_analysis_deliverable_completion_posts_final_message(
210
+ self, coord_dir: Path, config: Config
211
+ ) -> None:
212
+ """#2188: a `deliverable:analysis` issue's 0-commit completion has no
213
+ diff to point at — the deliverable IS the worker's own final message
214
+ (`AgentAssignment.result_text`). It must be posted automatically as
215
+ the completion comment's summary, since the worker itself has no
216
+ `gh` access to post it."""
217
+ _record("an1")
218
+ agent_status = {
219
+ "active": [],
220
+ "completed": [
221
+ _agent_completed(
222
+ "an1",
223
+ "done",
224
+ analysis_deliverable=True,
225
+ result_text=(
226
+ "Diagnosis: 74% of blocking review findings were "
227
+ "real defects; zero were false positives or style "
228
+ "nits."
229
+ ),
230
+ )
231
+ ],
232
+ }
233
+ with patch.object(notify_mod, "_agent_status", return_value=agent_status), \
234
+ patch("coord.dispatch.github_ops.post_issue_comment") as mock_post:
235
+ posted, _stuck, _attn, _stalled, _liveness = notify_mod.run(config)
236
+ assert len(posted) == 1
237
+ mock_post.assert_called_once()
238
+ body = mock_post.call_args.args[2]
239
+ assert "Coordinator: Assignment Complete" in body
240
+ assert "### Summary" in body
241
+ assert "74% of blocking review findings were real defects" in body
242
+
243
+ def test_ordinary_completion_has_no_summary_section(
244
+ self, coord_dir: Path, config: Config
245
+ ) -> None:
246
+ """#2188 acceptance: an ordinary (non-analysis) completion must be
247
+ unaffected — `result_text` is only ever folded into the posted
248
+ comment when `analysis_deliverable` is set on the same entry."""
249
+ _record("ord1")
250
+ agent_status = {
251
+ "active": [],
252
+ "completed": [
253
+ _agent_completed(
254
+ "ord1",
255
+ "done",
256
+ analysis_deliverable=False,
257
+ result_text="some unrelated final message",
258
+ )
259
+ ],
260
+ }
261
+ with patch.object(notify_mod, "_agent_status", return_value=agent_status), \
262
+ patch("coord.dispatch.github_ops.post_issue_comment") as mock_post:
263
+ notify_mod.run(config)
264
+ body = mock_post.call_args.args[2]
265
+ assert "Coordinator: Assignment Complete" in body
266
+ assert "### Summary" not in body
267
+ assert "some unrelated final message" not in body
268
+
209
269
 
210
270
  # ── #448: advisory (0-commit clean exit) notify ─────────────────────────────
211
271