code-coordinator 0.5.69__tar.gz → 0.5.71__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 (817) hide show
  1. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agent.py +21 -2
  5. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/drive.py +89 -0
  6. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent.py +64 -0
  7. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_drive.py +125 -0
  8. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/workflows/cargo-test.yml +0 -0
  19. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/workflows/release-tui.yml +0 -0
  21. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/.gitignore +0 -0
  23. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/GOAL.md +0 -0
  25. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/LICENSE +0 -0
  26. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/README.md +0 -0
  28. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/board_bool_guard.py +0 -0
  46. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/board_service.py +0 -0
  47. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/board_wire.py +0 -0
  48. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/brain.py +0 -0
  49. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/branch_model.py +0 -0
  50. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/bug_intake.py +0 -0
  51. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/cargo_cache.py +0 -0
  52. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/ci_github.py +0 -0
  53. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/ci_store.py +0 -0
  54. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/claim.py +0 -0
  55. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/cli.py +0 -0
  56. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/client.py +0 -0
  57. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/__init__.py +0 -0
  58. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/_common.py +0 -0
  59. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/acceptance.py +0 -0
  60. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/agent_ops.py +0 -0
  61. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/audit.py +0 -0
  62. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/chat.py +0 -0
  63. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/dispatch.py +0 -0
  64. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/dispatch_workers.py +0 -0
  65. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/drive.py +0 -0
  66. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/drive_queue.py +0 -0
  67. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/gate_a.py +0 -0
  68. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/gates.py +0 -0
  69. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/issues.py +0 -0
  70. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/lifecycle.py +0 -0
  71. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/merge.py +0 -0
  72. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/milestone.py +0 -0
  73. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/plan_followup.py +0 -0
  74. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/plans.py +0 -0
  75. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/portal.py +0 -0
  76. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/release.py +0 -0
  77. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/report.py +0 -0
  78. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/review.py +0 -0
  79. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/scorecard.py +0 -0
  80. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/sessions.py +0 -0
  81. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/setup.py +0 -0
  82. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/status.py +0 -0
  83. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/terminal.py +0 -0
  84. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/test_gate.py +0 -0
  85. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/commands/tui.py +0 -0
  86. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/comments.py +0 -0
  87. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/config.py +0 -0
  88. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/conflict_fix.py +0 -0
  89. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dao.py +0 -0
  90. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/__init__.py +0 -0
  91. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/fixture.py +0 -0
  92. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/index.html +0 -0
  93. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/server.py +0 -0
  94. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/terminal.py +0 -0
  95. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/.gitignore +0 -0
  96. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/components.json +0 -0
  97. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  98. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  99. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  100. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  101. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  102. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  103. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  104. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  105. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  106. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/index.html +0 -0
  107. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  108. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/sw.js +0 -0
  109. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  110. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  111. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  112. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  113. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  114. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  115. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  116. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  117. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  118. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  119. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/eslint.config.js +0 -0
  120. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/index.html +0 -0
  121. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  122. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/package-lock.json +0 -0
  123. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/package.json +0 -0
  124. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  125. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/playwright.config.ts +0 -0
  126. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/postcss.config.js +0 -0
  127. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  128. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  129. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  130. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/App.tsx +0 -0
  131. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/api/client.ts +0 -0
  132. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  133. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  134. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  135. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  136. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  137. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  138. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  139. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  140. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  141. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  142. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  143. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  144. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  145. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  146. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  147. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  148. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  149. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  150. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  151. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  152. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  153. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  154. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  155. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  156. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  157. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  158. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  159. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  160. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  161. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  162. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  163. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  164. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  165. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  166. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  167. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/index.css +0 -0
  168. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  169. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  170. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/main.tsx +0 -0
  171. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  172. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  173. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  174. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  175. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  176. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  177. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  178. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  179. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  180. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  181. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  182. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  183. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  184. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  185. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  186. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  187. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  188. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  189. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  190. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  191. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  192. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  193. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  194. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/tailwind.config.js +0 -0
  195. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/tsconfig.json +0 -0
  196. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  197. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dashboard/webapp/vite.config.ts +0 -0
  198. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/db.py +0 -0
  199. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dead_end.py +0 -0
  200. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/README.md +0 -0
  201. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-agent.service +0 -0
  202. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-db-backup.service +0 -0
  203. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-db-backup.sh +0 -0
  204. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-db-backup.timer +0 -0
  205. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-drive-queue.service +0 -0
  206. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-drive-queue.timer +0 -0
  207. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-notify.service +0 -0
  208. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-notify.timer +0 -0
  209. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-release-propagate.service +0 -0
  210. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-release-propagate.timer +0 -0
  211. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-release-window.service +0 -0
  212. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-release-window.timer +0 -0
  213. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-serve.service +0 -0
  214. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-web-dist-build.service +0 -0
  215. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-web-dist-build.timer +0 -0
  216. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy/coord-web.service +0 -0
  217. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy_manifest.py +0 -0
  218. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deploy_units.py +0 -0
  219. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/deps.py +0 -0
  220. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/diagnose.py +0 -0
  221. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dispatch.py +0 -0
  222. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/dist_name.py +0 -0
  223. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/drive_queue.py +0 -0
  224. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/drive_state.py +0 -0
  225. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/events.py +0 -0
  226. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/failure_class.py +0 -0
  227. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/filelock.py +0 -0
  228. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/fleet_config_health.py +0 -0
  229. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/freshness.py +0 -0
  230. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/gate_a.py +0 -0
  231. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/gate_b.py +0 -0
  232. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/gate_snapshot.py +0 -0
  233. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/gates.py +0 -0
  234. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/github_ops.py +0 -0
  235. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/goal.py +0 -0
  236. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/graph_health.py +0 -0
  237. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/__init__.py +0 -0
  238. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/aggregate.py +0 -0
  239. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/__init__.py +0 -0
  240. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/agent_install.py +0 -0
  241. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/cargo_targets.py +0 -0
  242. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/claude_binary.py +0 -0
  243. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/deploy_lane_facts.py +0 -0
  244. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/disk.py +0 -0
  245. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/fleet_board.py +0 -0
  246. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  247. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/fleet_phantom.py +0 -0
  248. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/fleet_unit_drift.py +0 -0
  249. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/graph.py +0 -0
  250. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/plan_usage.py +0 -0
  251. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/repo_state.py +0 -0
  252. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/spawned_coord.py +0 -0
  253. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/timer_active.py +0 -0
  254. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/toolchain.py +0 -0
  255. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/unit_drift.py +0 -0
  256. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/unit_enablement.py +0 -0
  257. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/checks/worktrees.py +0 -0
  258. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/cli.py +0 -0
  259. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/context.py +0 -0
  260. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/fleet_snapshot.py +0 -0
  261. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/models.py +0 -0
  262. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/pypi.py +0 -0
  263. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/registry.py +0 -0
  264. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/render.py +0 -0
  265. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/health/units.py +0 -0
  266. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/hooks.py +0 -0
  267. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/housekeeping.py +0 -0
  268. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/interactive.py +0 -0
  269. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/issue_store.py +0 -0
  270. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/liveness_auditor.py +0 -0
  271. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/machine_pause.py +0 -0
  272. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/merge_queue.py +0 -0
  273. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/milestone_chat.py +0 -0
  274. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/milestone_dispatch.py +0 -0
  275. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/milestone_gate.py +0 -0
  276. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/milestone_order.py +0 -0
  277. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/mock_author.py +0 -0
  278. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/models.py +0 -0
  279. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/network.py +0 -0
  280. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/new_issue_chat.py +0 -0
  281. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/__init__.py +0 -0
  282. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/baseline.py +0 -0
  283. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/cli.py +0 -0
  284. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/collect.py +0 -0
  285. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/digest.py +0 -0
  286. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/models.py +0 -0
  287. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/predicate.py +0 -0
  288. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/service.py +0 -0
  289. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/store.py +0 -0
  290. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notifier/transport.py +0 -0
  291. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/notify.py +0 -0
  292. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/openapi.py +0 -0
  293. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/overlap_fence.py +0 -0
  294. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/parentage.py +0 -0
  295. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/parentage_github.py +0 -0
  296. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/pipeline.py +0 -0
  297. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/plan_parser.py +0 -0
  298. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/plans.py +0 -0
  299. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/platform_paths.py +0 -0
  300. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/portal_bridge.py +0 -0
  301. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/pr_body_lint.py +0 -0
  302. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/prereqs.py +0 -0
  303. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/progress.py +0 -0
  304. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/providers/__init__.py +0 -0
  305. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/providers/base.py +0 -0
  306. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/providers/claude.py +0 -0
  307. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/providers/claude_pty.py +0 -0
  308. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/providers/opencode.py +0 -0
  309. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/reconcile.py +0 -0
  310. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/refine_chat.py +0 -0
  311. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/release_cordon.py +0 -0
  312. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/release_propagate.py +0 -0
  313. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/release_verify.py +0 -0
  314. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/release_window.py +0 -0
  315. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/reports.py +0 -0
  316. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/revalidate.py +0 -0
  317. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/review.py +0 -0
  318. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/scorecard.py +0 -0
  319. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/serve_app.py +0 -0
  320. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/skills/update-issue/SKILL.md +0 -0
  321. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/smoke.py +0 -0
  322. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/spend_ceiling.py +0 -0
  323. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/split_work.py +0 -0
  324. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/stage_projection.py +0 -0
  325. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/state.py +0 -0
  326. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/test_author.py +0 -0
  327. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/test_chat.py +0 -0
  328. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/test_orchestrator.py +0 -0
  329. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/test_report.py +0 -0
  330. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/tui_release.py +0 -0
  331. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/usage.py +0 -0
  332. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/usage_limits.py +0 -0
  333. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/usage_rollup.py +0 -0
  334. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coord/worker_events.py +0 -0
  335. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/coordinator.example.yml +0 -0
  336. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-agent.service +0 -0
  337. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-db-backup.service +0 -0
  338. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-db-backup.sh +0 -0
  339. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-db-backup.timer +0 -0
  340. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-drive-queue.service +0 -0
  341. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-drive-queue.timer +0 -0
  342. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-notify.service +0 -0
  343. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-notify.timer +0 -0
  344. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-release-propagate.service +0 -0
  345. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-release-propagate.timer +0 -0
  346. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-release-window.service +0 -0
  347. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-release-window.timer +0 -0
  348. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-serve.service +0 -0
  349. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-web-dist-build.service +0 -0
  350. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-web-dist-build.sh +0 -0
  351. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-web-dist-build.timer +0 -0
  352. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-web-rollback.sh +0 -0
  353. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/coord-web.service +0 -0
  354. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/deploy/node-shim.sh +0 -0
  355. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/AGENT_OPERATIONS.md +0 -0
  356. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/ARCHITECTURE.md +0 -0
  357. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/ARCH_SECURITY_GATES.md +0 -0
  358. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/COCKPIT.md +0 -0
  359. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/CONTROL_CENTER.md +0 -0
  360. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/CROSS_PLATFORM.md +0 -0
  361. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/DRIVE_QUEUE.md +0 -0
  363. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/EPHEMERAL_WORKERS.md +0 -0
  364. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/FORGE_MIGRATION.md +0 -0
  365. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/GRAPHIFY_SETUP.md +0 -0
  366. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/ISSUE_GUIDANCE.md +0 -0
  367. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/MAC_MINI.md +0 -0
  368. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  369. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/NOTIFIER.md +0 -0
  370. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/OPENCODE_VERIFICATION.md +0 -0
  371. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/OPERATING_GOTCHAS.md +0 -0
  372. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/mocks/web/README.md +0 -0
  381. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/mocks/web/_tokens.css +0 -0
  382. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/mocks/web/issue-detail.html +0 -0
  383. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/mocks/web/pipeline-narrow.html +0 -0
  384. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/docs/mocks/web/pipeline-wide.html +0 -0
  385. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/graphify-out/.gitignore +0 -0
  386. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/install-agent.sh +0 -0
  387. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/pyproject.toml +0 -0
  388. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/audit_review_verdict_overrides.py +0 -0
  389. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  390. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/build-worker-image.sh +0 -0
  391. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/coordinator-machine.py +0 -0
  392. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/epic-down.sh +0 -0
  393. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/epic-up.sh +0 -0
  394. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/preflight.sh +0 -0
  395. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/provision-worker.sh +0 -0
  396. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  397. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  398. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/azure-workers/verify-github-token.sh +0 -0
  399. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/codegen.py +0 -0
  400. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/coord-test-runner.sh +0 -0
  401. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/gen_board_fixture.py +0 -0
  403. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/next_release_tag.py +0 -0
  404. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/run_tests_in_populated_home.sh +0 -0
  405. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/run_tests_without_gh.sh +0 -0
  406. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/smoke_437_interactive.py +0 -0
  407. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/verify_878_review_capture.py +0 -0
  408. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/verify_release_published.py +0 -0
  409. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/scripts/verify_release_wheel.py +0 -0
  410. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/setup.cfg +0 -0
  411. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/SMOKE_SET.md +0 -0
  412. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/__init__.py +0 -0
  413. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  414. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/contract.md +0 -0
  415. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/manifest.yml +0 -0
  416. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  417. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  418. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  419. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  420. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/contract.md +0 -0
  426. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/manifest.yml +0 -0
  427. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  428. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  429. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  430. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  431. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  432. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  433. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  434. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  435. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  436. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  437. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/contract.md +0 -0
  438. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  439. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  440. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/manifest.yml +0 -0
  441. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  442. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-51/tsconfig.json +0 -0
  443. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  449. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/all_pass.json +0 -0
  450. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  451. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/mixed_fail.json +0 -0
  452. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  453. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  454. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/skip.json +0 -0
  455. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/playwright/truncated.json +0 -0
  456. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  457. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  458. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  460. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  461. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  462. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  463. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  464. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_acceptance.py +0 -0
  465. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_acceptance_drivers.py +0 -0
  466. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_api_error.py +0 -0
  467. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_app.py +0 -0
  468. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_branch_base.py +0 -0
  469. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_branch_capture.py +0 -0
  470. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_config_free_1712.py +0 -0
  471. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_deploy_units_endpoint.py +0 -0
  472. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_dirty_worktree.py +0 -0
  473. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_graph_self_heal.py +0 -0
  474. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_health_h3.py +0 -0
  475. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_idle_restart.py +0 -0
  476. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_push_failure.py +0 -0
  477. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_reap.py +0 -0
  478. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_repos_and_pull.py +0 -0
  479. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_restart_services_endpoint.py +0 -0
  480. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_startup_diagnostics.py +0 -0
  481. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_update.py +0 -0
  482. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_update_bluegreen.py +0 -0
  483. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_usage_limit.py +0 -0
  484. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_agent_zero_commit.py +0 -0
  485. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_ambient_home_isolation.py +0 -0
  486. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_approve_reject_plan.py +0 -0
  487. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_approve_usage_gate.py +0 -0
  488. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_assignment_already_recorded_daemon.py +0 -0
  489. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_audit_log.py +0 -0
  490. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_audit_outcome.py +0 -0
  491. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_audit_query.py +0 -0
  492. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_auto_loop.py +0 -0
  493. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_auto_release_publish_2035.py +0 -0
  494. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_base_checkout_restore.py +0 -0
  495. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_service.py +0 -0
  499. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_state.py +0 -0
  500. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_board_wire.py +0 -0
  501. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_brain.py +0 -0
  502. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_branch_model.py +0 -0
  503. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_bug_intake.py +0 -0
  504. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_build_worker_image_env_update.py +0 -0
  505. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cargo_cache.py +0 -0
  506. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_ci_acceptance_gate_1950.py +0 -0
  507. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_ci_parity_2091.py +0 -0
  508. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_ci_store.py +0 -0
  509. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_claim.py +0 -0
  510. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_acceptance.py +0 -0
  511. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_assign.py +0 -0
  512. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  513. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_assign_interactive_remote.py +0 -0
  514. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_assign_provider.py +0 -0
  515. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_audit.py +0 -0
  516. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_chat_continue.py +0 -0
  517. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_diagnose_config_provenance.py +0 -0
  518. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_diagnose_graph.py +0 -0
  519. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_doctor.py +0 -0
  520. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_doctor_config_free_1801.py +0 -0
  521. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  522. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_drive.py +0 -0
  523. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_drive_queue.py +0 -0
  524. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_escalate.py +0 -0
  525. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_fix_headless_review.py +0 -0
  526. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_gate_a.py +0 -0
  527. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_install_drift.py +0 -0
  528. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_install_skills.py +0 -0
  529. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_issue_create_label.py +0 -0
  530. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_issue_reopen.py +0 -0
  531. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_merge.py +0 -0
  532. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_merge_queue.py +0 -0
  556. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_provider.py +0 -0
  557. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_review_finalizing.py +0 -0
  558. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_test_failed_tag.py +0 -0
  559. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_status_usage_limit.py +0 -0
  560. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_sync_comments_873.py +0 -0
  561. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_test_plan.py +0 -0
  562. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_track.py +0 -0
  563. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_tui_update.py +0 -0
  564. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cli_wait.py +0 -0
  565. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_client_base_install.py +0 -0
  566. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_config_usage_gate.py +0 -0
  573. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coord_test.py +0 -0
  576. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coord_test_runner_baseline.py +0 -0
  577. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coord_test_runner_routing.py +0 -0
  578. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coord_test_runner_toolchain.py +0 -0
  579. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coord_web_sse_restart_live.py +0 -0
  580. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_coordinator_machine.py +0 -0
  581. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_cross_platform_imports.py +0 -0
  582. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dashboard.py +0 -0
  583. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dashboard_fixture.py +0 -0
  584. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dashboard_terminal.py +0 -0
  585. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dashboard_terminal_live.py +0 -0
  586. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_db.py +0 -0
  587. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dead_end.py +0 -0
  588. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_coord_db_backup.py +0 -0
  589. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_coord_web_dist.py +0 -0
  590. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_coord_web_rollback.py +0 -0
  591. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_drive_queue_unit.py +0 -0
  592. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_manifest.py +0 -0
  593. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_units_lane.py +0 -0
  594. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deploy_web_unit.py +0 -0
  595. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_deps.py +0 -0
  596. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_diagnose.py +0 -0
  597. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dispatch.py +0 -0
  598. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dispatch_target_validation.py +0 -0
  599. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_dist_name.py +0 -0
  600. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_done_housekeeping.py +0 -0
  601. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_drive_queue.py +0 -0
  602. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_drive_state.py +0 -0
  603. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_drive_tmux.py +0 -0
  604. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_epic_up_capability_detection.py +0 -0
  605. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  606. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_epic_up_image_provenance.py +0 -0
  607. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_errors.py +0 -0
  608. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_events.py +0 -0
  609. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_failure_class.py +0 -0
  610. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_filelock.py +0 -0
  611. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  612. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_fix_of_force_override.py +0 -0
  613. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_fleet_config_health.py +0 -0
  614. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_fleet_health_probes.py +0 -0
  615. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_fleet_health_snapshot.py +0 -0
  616. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_freshness.py +0 -0
  617. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_gate_a.py +0 -0
  618. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_gate_b.py +0 -0
  619. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_gate_snapshot_staleness.py +0 -0
  620. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_gates.py +0 -0
  621. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_generated_types_fixture.py +0 -0
  622. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_github_ops.py +0 -0
  623. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_goal.py +0 -0
  624. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_graph_health.py +0 -0
  625. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_deploy_lane_facts.py +0 -0
  632. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_incident_regression.py +0 -0
  633. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_pypi.py +0 -0
  634. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_registry.py +0 -0
  635. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_timer_active.py +0 -0
  636. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_toolchain.py +0 -0
  637. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_unit_drift.py +0 -0
  638. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_health_unit_enablement.py +0 -0
  639. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_hooks.py +0 -0
  640. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_human_attended_437.py +0 -0
  641. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_init.py +0 -0
  642. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_integration.py +0 -0
  643. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_briefing_echo.py +0 -0
  644. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_prefill_state.py +0 -0
  645. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_session_relaunch.py +0 -0
  646. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_test_verdict_backstop.py +0 -0
  647. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_token_attribution.py +0 -0
  648. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_interactive_worktree.py +0 -0
  649. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_issue_store_seam.py +0 -0
  650. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_liveness_auditor.py +0 -0
  651. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_liveness_notify.py +0 -0
  652. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_machine_pause.py +0 -0
  653. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_merge_queue.py +0 -0
  654. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_merge_verify.py +0 -0
  655. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_milestone_chat.py +0 -0
  656. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_milestone_dispatch.py +0 -0
  657. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_milestone_gate.py +0 -0
  658. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_milestone_order.py +0 -0
  659. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_milestone_seam.py +0 -0
  660. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_mock_author.py +0 -0
  661. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_model_tiering.py +0 -0
  662. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_models.py +0 -0
  663. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_models_config_labels.py +0 -0
  664. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_needs_attention.py +0 -0
  665. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_network.py +0 -0
  666. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_new_issue_chat.py +0 -0
  667. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_next_release_tag.py +0 -0
  668. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_no_direct_gh_calls.py +0 -0
  669. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_node_shim.py +0 -0
  670. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_baseline.py +0 -0
  671. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_cli.py +0 -0
  672. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_collect.py +0 -0
  673. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_config.py +0 -0
  674. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_drive_seam.py +0 -0
  675. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_isolation.py +0 -0
  676. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_predicate.py +0 -0
  677. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_quiet_hours.py +0 -0
  678. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notifier_service.py +0 -0
  679. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notify.py +0 -0
  680. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_notify_drain.py +0 -0
  681. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_openapi.py +0 -0
  682. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_operational_defaults.py +0 -0
  683. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_overlap_fence.py +0 -0
  684. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_packaged_deploy_units.py +0 -0
  685. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_parentage.py +0 -0
  686. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_paste_landed.py +0 -0
  687. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_pipeline.py +0 -0
  688. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_plan_followup_approve_plan_command.py +0 -0
  689. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_plan_followup_pr_command.py +0 -0
  690. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_plan_followup_review_command.py +0 -0
  691. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_plan_only.py +0 -0
  692. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_plan_parser.py +0 -0
  693. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_platform_paths.py +0 -0
  694. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_portal_bridge.py +0 -0
  695. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_portal_config.py +0 -0
  696. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_pr_body_lint.py +0 -0
  697. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_prereqs.py +0 -0
  698. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_production_db_guard.py +0 -0
  699. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_progress.py +0 -0
  700. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_provider_seam.py +0 -0
  701. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_providers.py +0 -0
  702. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_providers_config_labels.py +0 -0
  703. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_providers_pty.py +0 -0
  704. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_quiet_hours.py +0 -0
  705. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_quiet_hours_store_2146.py +0 -0
  706. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reap_merged_sessions.py +0 -0
  707. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reap_stale_interactive_tick.py +0 -0
  708. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reconcile_branch.py +0 -0
  709. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reconcile_completions.py +0 -0
  710. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reconcile_merges.py +0 -0
  711. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reconcile_usage_limit_done.py +0 -0
  712. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_refine_chat.py +0 -0
  713. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_release_cordon_2101.py +0 -0
  714. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_release_propagate.py +0 -0
  715. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_release_unified_1242.py +0 -0
  716. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_release_verify.py +0 -0
  717. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_release_window.py +0 -0
  718. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_remote_auto_prune.py +0 -0
  719. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_remote_interactive_reaper.py +0 -0
  720. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_report_result_push.py +0 -0
  721. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_reports.py +0 -0
  722. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_retry.py +0 -0
  723. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_retry_advisory_1606.py +0 -0
  724. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_retry_type_1636.py +0 -0
  725. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_revalidate.py +0 -0
  726. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review.py +0 -0
  727. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_end_review_without_verdict.py +0 -0
  728. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_parse_failure_diagnostic.py +0 -0
  729. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_reaffirm.py +0 -0
  730. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_state.py +0 -0
  731. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_verdict_backstop.py +0 -0
  732. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_verdict_override_audit.py +0 -0
  733. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_verdict_relay.py +0 -0
  734. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_review_zero_commits.py +0 -0
  735. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_scoped_review_wiring.py +0 -0
  736. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_scorecard.py +0 -0
  737. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_serve.py +0 -0
  738. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_serve_app_board_trim.py +0 -0
  739. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_session.py +0 -0
  740. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_slice_issue_attribution.py +0 -0
  741. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_smoke.py +0 -0
  742. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_smoke_live_checkout_restore.py +0 -0
  743. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_smoke_workflow.py +0 -0
  744. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_spend_ceiling.py +0 -0
  745. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_spend_ceiling_coordinator.py +0 -0
  746. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_split.py +0 -0
  747. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_split_work.py +0 -0
  748. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_stage_projection.py +0 -0
  749. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_stalled_pipeline.py +0 -0
  750. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_state.py +0 -0
  751. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_state_review_findings_daemon.py +0 -0
  752. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_status_fleet_footer.py +0 -0
  753. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_stop_1567.py +0 -0
  754. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_stuck.py +0 -0
  755. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_terminal_command.py +0 -0
  756. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_author.py +0 -0
  757. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_chat.py +0 -0
  758. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_orchestrator.py +0 -0
  759. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_report.py +0 -0
  760. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_verdict_parsing.py +0 -0
  761. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_test_verdict_transcript_floor.py +0 -0
  762. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_thin_client_board_audit.py +0 -0
  763. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_thin_client_config_load_1080.py +0 -0
  764. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_thin_client_daemon_routing_906.py +0 -0
  765. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_tmux_host.py +0 -0
  766. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_tmux_session.py +0 -0
  767. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_transcript_floor.py +0 -0
  768. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_usage.py +0 -0
  769. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_usage_limits.py +0 -0
  770. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_usage_rollup.py +0 -0
  771. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_venv_live_install_2121.py +0 -0
  772. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_version_single_source.py +0 -0
  773. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_watch.py +0 -0
  774. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worker_events.py +0 -0
  775. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worker_image_pin_sync.py +0 -0
  776. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worker_safety.py +0 -0
  777. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worker_test_scoping.py +0 -0
  778. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worktree.py +0 -0
  779. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  780. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/Cargo.lock +0 -0
  781. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/Cargo.toml +0 -0
  782. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/cargo-config-local-quadraui.toml.example +0 -0
  783. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/audit.rs +0 -0
  784. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/chat.rs +0 -0
  785. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/data.rs +0 -0
  786. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/dialogs.rs +0 -0
  787. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.69 → code_coordinator-0.5.71}/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.69
3
+ Version: 0.5.71
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.69
3
+ Version: 0.5.71
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.69",
2
+ "tag": "0.5.71",
3
3
  "distance": 0,
4
- "node": "g9207e64664c53099584e448cecb53206429b6a9c",
4
+ "node": "g61fe32cffef6c91f2bf3f8b2535b211f0c81996c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -1118,6 +1118,7 @@ def _worker_subprocess_env(
1118
1118
  prefix: str | None = None,
1119
1119
  base_prefix: str | None = None,
1120
1120
  cwd: "str | Path | None" = None,
1121
+ assignment_id: str | None = None,
1121
1122
  ) -> dict[str, str]:
1122
1123
  """Environment for worker `claude -p` subprocesses, with the agent's own
1123
1124
  venv removed (#402).
@@ -1150,6 +1151,21 @@ def _worker_subprocess_env(
1150
1151
  ``provider.env()`` on top of this result may still override ``PWD``
1151
1152
  deliberately; that ordering is preserved since we only set it here, not
1152
1153
  after.
1154
+
1155
+ #2217: ``assignment_id``, when given, is written to
1156
+ ``COORD_ASSIGNMENT_ID``. The headless worker prompt (built in
1157
+ ``review.py`` and elsewhere) tells every worker that if this variable is
1158
+ set it should call ``coord report-result --assignment
1159
+ "$COORD_ASSIGNMENT_ID" ...`` directly as the *authoritative* verdict
1160
+ path, with the transcript-parsed ``END_REVIEW`` block as a fallback only.
1161
+ Before this, nothing in the headless ``claude -p`` dispatch lane (this
1162
+ function is the only place that lane's subprocess environment is built)
1163
+ ever set the variable, so that "primary" path was dead on arrival for
1164
+ every headless review — the fragile transcript parse was silently the
1165
+ *only* path, not a backup. Both spawn call sites below pass
1166
+ ``assignment_id=assignment.id`` so it's set for every worker type (review,
1167
+ smoke, work), matching what ``coord/commands/review.py`` already reads as
1168
+ its ``--assignment`` default.
1153
1169
  """
1154
1170
  env = dict(os.environ if base_env is None else base_env)
1155
1171
  pfx = sys.prefix if prefix is None else prefix
@@ -1172,6 +1188,9 @@ def _worker_subprocess_env(
1172
1188
  if cwd is not None:
1173
1189
  env["PWD"] = str(cwd)
1174
1190
 
1191
+ if assignment_id is not None:
1192
+ env["COORD_ASSIGNMENT_ID"] = assignment_id
1193
+
1175
1194
  return env
1176
1195
 
1177
1196
 
@@ -6494,7 +6513,7 @@ class AgentServer:
6494
6513
  # daemon happened to start in — worktree confinement for those
6495
6514
  # providers must not depend on `bash_wrap_spawn` recomputing PWD as
6496
6515
  # a side effect (see `_maybe_bash_wrap`).
6497
- _spawn_env = _worker_subprocess_env(cwd=repo_path)
6516
+ _spawn_env = _worker_subprocess_env(cwd=repo_path, assignment_id=assignment.id)
6498
6517
  # #1402: shared per-repo cargo target dir (see coord.cargo_cache).
6499
6518
  # Must stay in sync with the PTY path in ``_spawn_pty``.
6500
6519
  _spawn_env.update(
@@ -6668,7 +6687,7 @@ class AgentServer:
6668
6687
  # docstring above), so unlike the headless path it never got an
6669
6688
  # incidental PWD correction — confinement here must not depend
6670
6689
  # on a provider trusting $PWD over getcwd() by accident.
6671
- env = _worker_subprocess_env(cwd=repo_path)
6690
+ env = _worker_subprocess_env(cwd=repo_path, assignment_id=assignment.id)
6672
6691
  env.setdefault("TERM", "xterm-256color")
6673
6692
  # #1402: point cargo at this machine's shared per-repo target dir
6674
6693
  # so the build cache survives worktree cleanup and is reused by
@@ -413,6 +413,10 @@ class AcceptanceGateChecker(Protocol):
413
413
  issue_labels: tuple[str, ...],
414
414
  ) -> bool: ...
415
415
 
416
+ def has_authored_slice(
417
+ self, repo_name: str, milestone_number: int, issue_number: int,
418
+ ) -> bool: ...
419
+
416
420
 
417
421
  @dataclass
418
422
  class GitHubAcceptanceGateChecker:
@@ -478,6 +482,35 @@ class GitHubAcceptanceGateChecker:
478
482
  )
479
483
  return readiness.exempt
480
484
 
485
+ def has_authored_slice(
486
+ self, repo_name: str, milestone_number: int, issue_number: int,
487
+ ) -> bool:
488
+ """#2061: the AUTHORITATIVE answer to "has this issue's JIT slice
489
+ landed?" — the manifest on the repo's default branch, read via the
490
+ identical ``test_ids_for_issue`` check the #1138 hard gate
491
+ (:func:`coord.milestone_dispatch.issue_oracle_ready`) already
492
+ performs, exposed here as ``OracleReadiness.has_slice``.
493
+
494
+ :func:`_decide_acceptance_author` calls this — instead of trusting
495
+ the `type="test-author"` assignment row alone — at every point
496
+ where the row is about to be read as "nothing was authored": no
497
+ row yet, or a terminal (``failed``/``cancelled``/``advisory``/
498
+ ``done``) status with no branch commits. The assignment row is a
499
+ PROXY for this question; it can be stale (a drive that died
500
+ mid-run, a retry, or a #2020-mangled row) while an EARLIER attempt
501
+ already merged the slice. The manifest cannot lie about that: if
502
+ the slice is there, it landed, whatever the row says.
503
+ """
504
+ from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
505
+
506
+ repo_cfg = self.config.repo(repo_name)
507
+ if repo_cfg is None:
508
+ return False
509
+ readiness = issue_oracle_ready(
510
+ repo_cfg, self.config, milestone_number, issue_number,
511
+ )
512
+ return readiness.has_slice
513
+
481
514
 
482
515
  @dataclass(frozen=True)
483
516
  class OracleDecision:
@@ -623,11 +656,47 @@ def _decide_acceptance_author(
623
656
  Landing that last step is what :func:`_decide_acceptance_landing` does,
624
657
  with the same bounded ``coord merge --only <aid>`` call
625
658
  :func:`_decide_merge` already makes for the work row.
659
+
660
+ **#2061 — the assignment row is a proxy, the manifest is the answer.**
661
+ Every branch below that would otherwise treat "no row" or "a terminal
662
+ row with no branch commits" as "nothing was authored" first asks
663
+ :func:`_slice_already_landed`, which reads the manifest on the repo's
664
+ default branch — the same ``test_ids_for_issue`` check the #1138 hard
665
+ gate performs. A drive retry re-dispatches this gate without knowing
666
+ whether an EARLIER attempt already merged the slice; the second author
667
+ then correctly does nothing (``DONE`` with zero commits, or a stale
668
+ row that never even started) and, pre-#2061, that correct no-op was
669
+ read as a terminal failure — killing a run whose slice was already
670
+ landed and whose real work was ready to dispatch (coord-portal#13).
626
671
  """
627
672
  aid = state.acceptance_author_aid
628
673
  status = state.acceptance_author_status
629
674
 
675
+ def _slice_already_landed() -> bool:
676
+ """#2061: the `type="test-author"` row above is a PROXY for "has
677
+ this issue's slice landed?" — a drive that died mid-run, a retry,
678
+ or a #2020-mangled row can leave it pointing at nothing (or at a
679
+ genuine failure) while an EARLIER attempt already merged the slice
680
+ from a previous run. Ask the AUTHORITATIVE question — the manifest
681
+ on the default branch, via :meth:`AcceptanceGateChecker.
682
+ has_authored_slice` — whenever the row is about to be read as
683
+ "nothing was authored": right before dispatching a fresh author,
684
+ and right before declaring a terminal, commit-less row a failure.
685
+ Never consulted for "" / "running" (still authoring — the slice
686
+ cannot be on the default branch yet) or "merged" (already the
687
+ strongest signal there is), so this costs one extra fetch at a
688
+ decision point, not one per poll tick.
689
+ """
690
+ return gate_checker.has_authored_slice(
691
+ state.repo, state.milestone_number, state.issue,
692
+ )
693
+
630
694
  if not aid:
695
+ # #2061: a retry (or a drive resuming after this run's own board
696
+ # row went missing/stale) must not re-dispatch an author for a
697
+ # slice that already landed from an earlier attempt.
698
+ if _slice_already_landed():
699
+ return None
631
700
  command = [
632
701
  "acceptance", "author", state.repo, str(oracle.tracking_issue),
633
702
  "--issue", str(state.issue),
@@ -671,6 +740,12 @@ def _decide_acceptance_author(
671
740
  return None
672
741
 
673
742
  if status == "failed":
743
+ # #2061: this row's FAILED status describes what happened to THIS
744
+ # author, not whether the issue's slice exists — a retry's row can
745
+ # fail (or simply be stale) while an earlier attempt already merged
746
+ # the slice it was about to re-author.
747
+ if _slice_already_landed():
748
+ return None
674
749
  return _die(
675
750
  f"acceptance author {aid} failed — inspect: coord log {aid} "
676
751
  f"--machine {state.acceptance_author_machine or machine}\n"
@@ -679,6 +754,8 @@ def _decide_acceptance_author(
679
754
  )
680
755
 
681
756
  if status == "cancelled":
757
+ if _slice_already_landed():
758
+ return None
682
759
  return _die(
683
760
  f"acceptance author {aid} was cancelled — re-dispatch by hand: "
684
761
  f"coord acceptance author {state.repo} {oracle.tracking_issue} "
@@ -700,6 +777,11 @@ def _decide_acceptance_author(
700
777
  branch = state.acceptance_author_branch
701
778
  probe = replace(state, work_branch=branch) if branch else state
702
779
  if not branch or not verifier.branch_has_commits(probe):
780
+ # #2061: a commit-less ADVISORY row IS what an earlier-landed
781
+ # slice's stale/retried author row looks like — check the
782
+ # manifest before declaring failure.
783
+ if _slice_already_landed():
784
+ return None
703
785
  return _die(
704
786
  f"acceptance author {aid} exited ADVISORY with no commits on "
705
787
  "its branch — nothing was authored, so there is no slice to "
@@ -741,6 +823,13 @@ def _decide_acceptance_author(
741
823
  branch = state.acceptance_author_branch
742
824
  probe = replace(state, work_branch=branch) if branch else state
743
825
  if not branch or not verifier.branch_has_commits(probe):
826
+ # #2061 (coord-portal#13): a re-dispatched author that lands in
827
+ # a world where the slice is ALREADY on the default branch
828
+ # correctly does nothing — DONE with zero commits — and that is
829
+ # not a failure to re-diagnose, it's the terminal case this
830
+ # whole gate exists to detect. Check the manifest before dying.
831
+ if _slice_already_landed():
832
+ return None
744
833
  branch_display = repr(branch) if branch else "(none)"
745
834
  return _die(
746
835
  f"acceptance author {aid} exited DONE, but its branch "
@@ -146,6 +146,36 @@ def test_worker_env_no_cwd_leaves_pwd_untouched() -> None:
146
146
  assert env["PWD"] == "/whatever"
147
147
 
148
148
 
149
+ def test_worker_env_sets_coord_assignment_id() -> None:
150
+ """#2217: the headless worker prompt (review.py) tells every worker that
151
+ if $COORD_ASSIGNMENT_ID is set, it must report its verdict straight to
152
+ the coordinator board via `coord report-result` as the *authoritative*
153
+ path — with the transcript-parsed END_REVIEW block as a fallback only.
154
+ Nothing set the variable for the headless `claude -p` dispatch lane, so
155
+ that "primary" instruction was dead on arrival for every review and the
156
+ fragile transcript parse was silently the only path. Both `_spawn` call
157
+ sites must pass assignment_id= so this is set for every worker type."""
158
+ env = _worker_subprocess_env(
159
+ {"PATH": "/usr/bin"},
160
+ prefix="/usr",
161
+ base_prefix="/usr",
162
+ assignment_id="abc123",
163
+ )
164
+ assert env["COORD_ASSIGNMENT_ID"] == "abc123"
165
+
166
+
167
+ def test_worker_env_no_assignment_id_leaves_var_unset() -> None:
168
+ """When assignment_id isn't passed, COORD_ASSIGNMENT_ID must not appear
169
+ at all (not even empty) — callers that don't have an assignment yet
170
+ (e.g. standalone helper use) shouldn't leak a stale/empty value."""
171
+ env = _worker_subprocess_env(
172
+ {"PATH": "/usr/bin"},
173
+ prefix="/usr",
174
+ base_prefix="/usr",
175
+ )
176
+ assert "COORD_ASSIGNMENT_ID" not in env
177
+
178
+
149
179
  def test_health_reports_machine(tmp_path: Path) -> None:
150
180
  server = _server(tmp_path)
151
181
  h = server.health()
@@ -431,6 +461,40 @@ def test_spawn_sets_pwd_to_worktree_bash_wrap_enabled(tmp_path: Path) -> None:
431
461
  server.shutdown()
432
462
 
433
463
 
464
+ def test_spawn_sets_coord_assignment_id(tmp_path: Path) -> None:
465
+ """#2217: the headless `_spawn` path must set COORD_ASSIGNMENT_ID to the
466
+ assignment's own id — this is the variable the review prompt tells every
467
+ worker to use for `coord report-result --assignment "$COORD_ASSIGNMENT_ID"
468
+ ...`, the "authoritative" primary verdict path. Before #2217 nothing set
469
+ it anywhere in this dispatch lane, so that instruction was silently
470
+ unreachable for every headless review; only the fragile transcript-parsed
471
+ END_REVIEW fallback ever ran. This test must fail against pre-#2217 code.
472
+ """
473
+ import coord.agent as agent_mod
474
+
475
+ repo = _init_repo(tmp_path / "repo")
476
+ server = _server(tmp_path, repo_path=repo)
477
+
478
+ captured_env: list[dict[str, str]] = []
479
+ real_popen = agent_mod.subprocess.Popen
480
+
481
+ def recording_popen(spawn_argv, *args, **kwargs):
482
+ if kwargs.get("start_new_session"):
483
+ captured_env.append(dict(kwargs.get("env") or {}))
484
+ return real_popen(spawn_argv, *args, **kwargs)
485
+
486
+ agent_mod.subprocess.Popen = recording_popen # type: ignore[assignment]
487
+ try:
488
+ a = server.assign(_spec(repo, type="review"))
489
+ final = server.wait_for(a.id)
490
+ finally:
491
+ agent_mod.subprocess.Popen = real_popen # type: ignore[assignment]
492
+
493
+ assert captured_env, "Popen was not called"
494
+ assert captured_env[0]["COORD_ASSIGNMENT_ID"] == final.id == a.id
495
+ server.shutdown()
496
+
497
+
434
498
  def test_pty_spawn_sets_pwd_to_repo_path(tmp_path: Path) -> None:
435
499
  """#1783: the PTY spawn path (_spawn_pty) gets the same explicit-PWD
436
500
  treatment as the headless path.
@@ -455,14 +455,17 @@ class FakeGateChecker:
455
455
  for_path: str | None = None,
456
456
  for_path_error: Exception | None = None,
457
457
  exempt: bool = False,
458
+ landed: bool = False,
458
459
  ) -> None:
459
460
  self._exists = exists
460
461
  self._for_path = for_path
461
462
  self._for_path_error = for_path_error
462
463
  self._exempt = exempt
464
+ self._landed = landed
463
465
  self.calls: list[tuple[str, int]] = []
464
466
  self.for_path_calls: list[tuple[str, int]] = []
465
467
  self.exempt_calls: list[tuple[str, int, int, tuple[str, ...]]] = []
468
+ self.landed_calls: list[tuple[str, int, int]] = []
466
469
 
467
470
  def contract_exists(self, repo_name: str, milestone_number: int) -> bool:
468
471
  self.calls.append((repo_name, milestone_number))
@@ -484,6 +487,12 @@ class FakeGateChecker:
484
487
  self.exempt_calls.append((repo_name, milestone_number, issue_number, issue_labels))
485
488
  return self._exempt
486
489
 
490
+ def has_authored_slice(
491
+ self, repo_name: str, milestone_number: int, issue_number: int,
492
+ ) -> bool:
493
+ self.landed_calls.append((repo_name, milestone_number, issue_number))
494
+ return self._landed
495
+
487
496
 
488
497
  def oracle_state(**kw) -> IssueState:
489
498
  base = dict(milestone_number=38, milestone_tracking_issue=1120)
@@ -607,6 +616,17 @@ def test_the_default_gate_checker_is_issue_exempt_reuses_the_1138_hard_gate():
607
616
  assert "issue_oracle_ready" in src
608
617
 
609
618
 
619
+ def test_the_default_gate_checker_has_authored_slice_reuses_the_1138_hard_gate():
620
+ """#2061: "has the slice landed?" must be answered from the SAME
621
+ manifest-vs-default-branch read the #1138 hard gate performs
622
+ (`issue_oracle_ready`'s `has_slice`), not a fresh re-derivation that
623
+ could drift from it."""
624
+ import inspect
625
+
626
+ src = inspect.getsource(GitHubAcceptanceGateChecker.has_authored_slice)
627
+ assert "issue_oracle_ready" in src
628
+
629
+
610
630
  def test_the_default_gate_checker_reuses_gate_a_status_not_a_reimplementation():
611
631
  """#1453: must not drift from tui's gate_a_contract_exists_for /
612
632
  coord.milestone_dispatch.gate_a_status — both keyed on
@@ -758,13 +778,34 @@ def test_oracle_active_authors_the_slice_before_dispatching_work():
758
778
  )
759
779
 
760
780
 
781
+ def test_oracle_active_skips_dispatching_a_new_author_when_the_slice_already_landed():
782
+ """#2061 (coord-portal#13): a retry must not re-author a slice that
783
+ already merged from an earlier attempt — ask the manifest, not just
784
+ the (possibly missing/stale) assignment row, before dispatching."""
785
+ oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
786
+ checker = FakeGateChecker(landed=True)
787
+ action = step(oracle_state(), oracle=oracle, gate_checker=checker)
788
+ assert action.kind == RUN
789
+ assert action.command == (
790
+ "assign", "precision", REPO, "1392",
791
+ "--driven-by", f"drive:{REPO}#1392",
792
+ )
793
+ assert checker.landed_calls == [(REPO, 38, 1392)]
794
+
795
+
761
796
  def test_oracle_active_waits_while_the_slice_is_still_authoring():
762
797
  oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
798
+ checker = FakeGateChecker()
763
799
  action = step(
764
800
  state(acceptance_author_aid="ta1", acceptance_author_status="running"),
765
801
  oracle=oracle,
802
+ gate_checker=checker,
766
803
  )
767
804
  assert action.kind == WAIT
805
+ # #2061: "still authoring" never needs the authoritative manifest read —
806
+ # the slice cannot possibly be on the default branch yet, so this must
807
+ # not pay a GitHub fetch on every poll tick.
808
+ assert checker.landed_calls == []
768
809
 
769
810
 
770
811
  def test_oracle_active_dispatches_work_once_the_slice_has_merged():
@@ -792,6 +833,24 @@ def test_oracle_active_is_terminal_when_the_slice_authoring_fails():
792
833
  assert "--no-acceptance" in action.message
793
834
 
794
835
 
836
+ def test_oracle_active_failed_row_is_not_terminal_when_the_slice_already_landed():
837
+ """#2061: a FAILED row describes what happened to THIS author, not
838
+ whether the issue's slice exists — a stale/retried row can fail (or
839
+ just be wrong) while an earlier attempt already merged the slice."""
840
+ oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
841
+ checker = FakeGateChecker(landed=True)
842
+ action = step(
843
+ oracle_state(acceptance_author_aid="ta1", acceptance_author_status="failed"),
844
+ oracle=oracle,
845
+ gate_checker=checker,
846
+ )
847
+ assert action.kind == RUN
848
+ assert action.command == (
849
+ "assign", "precision", REPO, "1392",
850
+ "--driven-by", f"drive:{REPO}#1392",
851
+ )
852
+
853
+
795
854
  def test_oracle_active_is_terminal_when_the_slice_authoring_is_cancelled():
796
855
  oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
797
856
  action = step(
@@ -803,6 +862,21 @@ def test_oracle_active_is_terminal_when_the_slice_authoring_is_cancelled():
803
862
  assert "cancelled" in action.message
804
863
 
805
864
 
865
+ def test_oracle_active_cancelled_row_is_not_terminal_when_the_slice_already_landed():
866
+ oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
867
+ checker = FakeGateChecker(landed=True)
868
+ action = step(
869
+ oracle_state(acceptance_author_aid="ta1", acceptance_author_status="cancelled"),
870
+ oracle=oracle,
871
+ gate_checker=checker,
872
+ )
873
+ assert action.kind == RUN
874
+ assert action.command == (
875
+ "assign", "precision", REPO, "1392",
876
+ "--driven-by", f"drive:{REPO}#1392",
877
+ )
878
+
879
+
806
880
  def test_oracle_active_still_honours_do_plan_after_the_slice_has_landed():
807
881
  oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
808
882
  action = step(
@@ -881,6 +955,30 @@ def test_oracle_active_advisory_with_no_commits_is_terminal():
881
955
  assert "no commits" in action.message
882
956
 
883
957
 
958
+ def test_oracle_active_advisory_with_no_commits_is_not_terminal_when_the_slice_already_landed():
959
+ """#2061: a commit-less ADVISORY row is exactly what a stale/retried
960
+ author's row looks like when an earlier attempt already merged the
961
+ slice — check the manifest before declaring failure."""
962
+ oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
963
+ verifier = FakeVerifier(has_commits=False)
964
+ checker = FakeGateChecker(landed=True)
965
+ action = step(
966
+ oracle_state(
967
+ acceptance_author_aid="ta1",
968
+ acceptance_author_status="advisory",
969
+ acceptance_author_branch="",
970
+ ),
971
+ oracle=oracle,
972
+ verifier=verifier,
973
+ gate_checker=checker,
974
+ )
975
+ assert action.kind == RUN
976
+ assert action.command == (
977
+ "assign", "precision", REPO, "1392",
978
+ "--driven-by", f"drive:{REPO}#1392",
979
+ )
980
+
981
+
884
982
  def test_oracle_active_advisory_with_commits_requires_accept_advisory():
885
983
  """The #1357 false-positive shape — real commits, downgraded to
886
984
  advisory anyway — must not be treated as "still landing"; it needs the
@@ -966,6 +1064,33 @@ def test_oracle_active_done_with_no_commits_is_terminal():
966
1064
  assert "ta1" in action.message
967
1065
 
968
1066
 
1067
+ def test_oracle_active_done_with_no_commits_is_not_terminal_when_the_slice_already_landed():
1068
+ """#2061 (coord-portal#13): the exact observed shape — a re-dispatched
1069
+ author lands in a world where the slice is already merged from an
1070
+ earlier attempt, correctly does nothing (DONE, zero commits), and
1071
+ drive must read that as "already done", not re-diagnose it as a
1072
+ failure and block the queue entry."""
1073
+ oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
1074
+ verifier = FakeVerifier(has_commits=False)
1075
+ checker = FakeGateChecker(landed=True)
1076
+ action = step(
1077
+ oracle_state(
1078
+ acceptance_author_aid="ta1",
1079
+ acceptance_author_status="done",
1080
+ acceptance_author_branch="test-author-ms-38-slice-1124",
1081
+ ),
1082
+ oracle=oracle,
1083
+ verifier=verifier,
1084
+ gate_checker=checker,
1085
+ )
1086
+ assert action.kind == RUN
1087
+ assert action.command == (
1088
+ "assign", "precision", REPO, "1392",
1089
+ "--driven-by", f"drive:{REPO}#1392",
1090
+ )
1091
+ assert checker.landed_calls == [(REPO, 38, 1392)]
1092
+
1093
+
969
1094
  def test_oracle_active_done_with_no_branch_is_terminal():
970
1095
  oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
971
1096
  verifier = FakeVerifier(has_commits=False)