code-coordinator 0.5.91__tar.gz → 0.5.93__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 (839) hide show
  1. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/plan_followup.py +23 -10
  7. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/release.py +32 -6
  8. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_cordon.py +110 -7
  9. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_propagate.py +8 -0
  10. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_fix_headless_review.py +23 -7
  11. code_coordinator-0.5.93/tests/test_release_cordon_daemon_leads_2176.py +313 -0
  12. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_cordon_deadlock_2240.py +10 -2
  13. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_verify.py +115 -0
  14. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.gitignore +0 -0
  29. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/GOAL.md +0 -0
  31. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/LICENSE +0 -0
  32. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/README.md +0 -0
  34. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_bool_guard.py +0 -0
  52. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/client.py +0 -0
  63. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/drive_queue.py +0 -0
  73. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/plans.py +0 -0
  80. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/portal.py +0 -0
  81. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/repo.py +0 -0
  82. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/report.py +0 -0
  83. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/review.py +0 -0
  84. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/scorecard.py +0 -0
  85. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/sessions.py +0 -0
  86. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/setup.py +0 -0
  87. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/status.py +0 -0
  88. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/terminal.py +0 -0
  89. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/test_gate.py +0 -0
  90. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/tui.py +0 -0
  91. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/comments.py +0 -0
  92. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/config.py +0 -0
  93. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/conflict_fix.py +0 -0
  94. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dao.py +0 -0
  95. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/__init__.py +0 -0
  96. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/fixture.py +0 -0
  97. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/index.html +0 -0
  98. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/server.py +0 -0
  99. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/terminal.py +0 -0
  100. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/.gitignore +0 -0
  101. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/components.json +0 -0
  102. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  103. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  104. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  105. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  106. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  107. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  108. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  109. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  110. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  111. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/index.html +0 -0
  112. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  113. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/sw.js +0 -0
  114. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  115. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  116. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  117. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  118. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  119. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  120. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  121. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  122. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  123. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  124. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/eslint.config.js +0 -0
  125. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/index.html +0 -0
  126. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  127. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/package-lock.json +0 -0
  128. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/package.json +0 -0
  129. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  130. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/playwright.config.ts +0 -0
  131. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/postcss.config.js +0 -0
  132. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  133. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  134. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  135. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/App.tsx +0 -0
  136. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/api/client.ts +0 -0
  137. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  138. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  139. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  140. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  141. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  142. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  143. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  144. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  145. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  146. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  147. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  148. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  149. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  150. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  151. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  152. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  153. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  154. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  155. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  156. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  157. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  158. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  159. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  160. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  161. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  162. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  163. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  164. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  165. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  166. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  167. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  168. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  169. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  170. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  171. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  172. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/index.css +0 -0
  173. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  174. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  175. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/main.tsx +0 -0
  176. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  177. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  178. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  179. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  180. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  181. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  182. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  183. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  184. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  185. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  186. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  187. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  188. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  189. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  190. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  191. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  192. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  193. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  194. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  195. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  196. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  197. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  198. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  199. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tailwind.config.js +0 -0
  200. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tsconfig.json +0 -0
  201. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  202. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/vite.config.ts +0 -0
  203. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/db.py +0 -0
  204. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dead_end.py +0 -0
  205. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/README.md +0 -0
  206. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-agent.service +0 -0
  207. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.service +0 -0
  208. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.sh +0 -0
  209. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.timer +0 -0
  210. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-drive-queue.service +0 -0
  211. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-drive-queue.timer +0 -0
  212. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-notify.service +0 -0
  213. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-notify.timer +0 -0
  214. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-propagate.service +0 -0
  215. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-propagate.timer +0 -0
  216. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-window.service +0 -0
  217. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-window.timer +0 -0
  218. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-serve.service +0 -0
  219. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web-dist-build.service +0 -0
  220. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web-dist-build.timer +0 -0
  221. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web.service +0 -0
  222. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy_manifest.py +0 -0
  223. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy_units.py +0 -0
  224. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deps.py +0 -0
  225. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/diagnose.py +0 -0
  226. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dispatch.py +0 -0
  227. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dist_name.py +0 -0
  228. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive.py +0 -0
  229. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive_queue.py +0 -0
  230. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive_state.py +0 -0
  231. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/events.py +0 -0
  232. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/failure_class.py +0 -0
  233. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/filelock.py +0 -0
  234. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/fleet_config_health.py +0 -0
  235. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/freshness.py +0 -0
  236. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_a.py +0 -0
  237. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_b.py +0 -0
  238. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_snapshot.py +0 -0
  239. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gates.py +0 -0
  240. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/github_ops.py +0 -0
  241. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/goal.py +0 -0
  242. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/graph_health.py +0 -0
  243. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/__init__.py +0 -0
  244. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/aggregate.py +0 -0
  245. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/__init__.py +0 -0
  246. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/agent_install.py +0 -0
  247. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/cargo_targets.py +0 -0
  248. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/claude_binary.py +0 -0
  249. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/deploy_lane_facts.py +0 -0
  250. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/disk.py +0 -0
  251. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_board.py +0 -0
  252. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  253. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_phantom.py +0 -0
  254. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_unit_drift.py +0 -0
  255. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/graph.py +0 -0
  256. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/graphify_cli.py +0 -0
  257. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/index_lock.py +0 -0
  258. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/plan_usage.py +0 -0
  259. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/repo_state.py +0 -0
  260. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/spawned_coord.py +0 -0
  261. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/timer_active.py +0 -0
  262. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/toolchain.py +0 -0
  263. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/unit_drift.py +0 -0
  264. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/unit_enablement.py +0 -0
  265. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/worktrees.py +0 -0
  266. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/cli.py +0 -0
  267. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/context.py +0 -0
  268. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/fleet_snapshot.py +0 -0
  269. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/models.py +0 -0
  270. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/pypi.py +0 -0
  271. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/registry.py +0 -0
  272. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/render.py +0 -0
  273. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/units.py +0 -0
  274. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/hooks.py +0 -0
  275. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/housekeeping.py +0 -0
  276. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/interactive.py +0 -0
  277. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/issue_store.py +0 -0
  278. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/liveness_auditor.py +0 -0
  279. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/machine_pause.py +0 -0
  280. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/merge_queue.py +0 -0
  281. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_chat.py +0 -0
  282. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_dispatch.py +0 -0
  283. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_gate.py +0 -0
  284. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_order.py +0 -0
  285. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/mock_author.py +0 -0
  286. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/models.py +0 -0
  287. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/network.py +0 -0
  288. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/new_issue_chat.py +0 -0
  289. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/__init__.py +0 -0
  290. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/baseline.py +0 -0
  291. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/cli.py +0 -0
  292. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/collect.py +0 -0
  293. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/digest.py +0 -0
  294. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/models.py +0 -0
  295. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/predicate.py +0 -0
  296. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/service.py +0 -0
  297. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/store.py +0 -0
  298. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/transport.py +0 -0
  299. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notify.py +0 -0
  300. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/openapi.py +0 -0
  301. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/overlap_fence.py +0 -0
  302. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/overlap_predict.py +0 -0
  303. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/parentage.py +0 -0
  304. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/parentage_github.py +0 -0
  305. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/pipeline.py +0 -0
  306. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/plan_parser.py +0 -0
  307. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/plans.py +0 -0
  308. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/platform_paths.py +0 -0
  309. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_bridge.py +0 -0
  310. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_store.py +0 -0
  311. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_sync.py +0 -0
  312. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/pr_body_lint.py +0 -0
  313. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/prereqs.py +0 -0
  314. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/progress.py +0 -0
  315. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/__init__.py +0 -0
  316. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/base.py +0 -0
  317. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/claude.py +0 -0
  318. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/claude_pty.py +0 -0
  319. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/opencode.py +0 -0
  320. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/reconcile.py +0 -0
  321. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/refine_chat.py +0 -0
  322. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_verify.py +0 -0
  323. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_window.py +0 -0
  324. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/repo_edit.py +0 -0
  325. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/repo_onboard.py +0 -0
  326. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/reports.py +0 -0
  327. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/revalidate.py +0 -0
  328. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/review.py +0 -0
  329. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/scorecard.py +0 -0
  330. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/serve_app.py +0 -0
  331. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/skills/update-issue/SKILL.md +0 -0
  332. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/smoke.py +0 -0
  333. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/spend_ceiling.py +0 -0
  334. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/split_work.py +0 -0
  335. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/stage_projection.py +0 -0
  336. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/state.py +0 -0
  337. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_author.py +0 -0
  338. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_chat.py +0 -0
  339. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_orchestrator.py +0 -0
  340. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_report.py +0 -0
  341. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/tui_release.py +0 -0
  342. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage.py +0 -0
  343. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage_limits.py +0 -0
  344. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage_rollup.py +0 -0
  345. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/worker_events.py +0 -0
  346. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coordinator.example.yml +0 -0
  347. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-agent.service +0 -0
  348. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.service +0 -0
  349. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.sh +0 -0
  350. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.timer +0 -0
  351. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-drive-queue.service +0 -0
  352. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-drive-queue.timer +0 -0
  353. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-notify.service +0 -0
  354. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-notify.timer +0 -0
  355. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-propagate.service +0 -0
  356. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-propagate.timer +0 -0
  357. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-window.service +0 -0
  358. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-window.timer +0 -0
  359. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-serve.service +0 -0
  360. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.service +0 -0
  361. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.sh +0 -0
  362. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.timer +0 -0
  363. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-rollback.sh +0 -0
  364. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web.service +0 -0
  365. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/node-shim.sh +0 -0
  366. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/AGENT_OPERATIONS.md +0 -0
  367. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ARCHITECTURE.md +0 -0
  368. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ARCH_SECURITY_GATES.md +0 -0
  369. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/COCKPIT.md +0 -0
  370. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CONTROL_CENTER.md +0 -0
  371. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/COST_DISCIPLINE.md +0 -0
  372. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CROSS_PLATFORM.md +0 -0
  373. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CUSTOMER_PORTAL.md +0 -0
  374. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/DRIVE_QUEUE.md +0 -0
  375. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/EPHEMERAL_WORKERS.md +0 -0
  376. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/FORGE_MIGRATION.md +0 -0
  377. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/GRAPHIFY_SETUP.md +0 -0
  378. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ISSUE_GUIDANCE.md +0 -0
  379. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/MAC_MINI.md +0 -0
  380. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  381. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/NOTIFIER.md +0 -0
  382. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/OPENCODE_VERIFICATION.md +0 -0
  383. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/OPERATING_GOTCHAS.md +0 -0
  384. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ORACLE_LOOP.md +0 -0
  385. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PHONE_WEBAPP.md +0 -0
  386. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PIPELINE_V2.md +0 -0
  387. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PLATFORM_EVOLUTION.md +0 -0
  388. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/SECOND_BACKEND.md +0 -0
  389. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/STORE_SERVICE.md +0 -0
  390. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  391. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/WEB_CONTROL_CENTER.md +0 -0
  392. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/README.md +0 -0
  393. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/_tokens.css +0 -0
  394. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/issue-detail.html +0 -0
  395. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/pipeline-narrow.html +0 -0
  396. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/pipeline-wide.html +0 -0
  397. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/graphify-out/.gitignore +0 -0
  398. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/install-agent.sh +0 -0
  399. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/pyproject.toml +0 -0
  400. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/audit_review_verdict_overrides.py +0 -0
  401. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  402. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/build-worker-image.sh +0 -0
  403. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/coordinator-machine.py +0 -0
  404. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/epic-down.sh +0 -0
  405. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/epic-up.sh +0 -0
  406. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/preflight.sh +0 -0
  407. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/provision-worker.sh +0 -0
  408. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  409. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  410. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/verify-github-token.sh +0 -0
  411. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/codegen.py +0 -0
  412. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/coord-test-runner.sh +0 -0
  413. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/drive-batch.sh +0 -0
  414. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/gen_board_fixture.py +0 -0
  415. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/next_release_tag.py +0 -0
  416. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/run_tests_in_populated_home.sh +0 -0
  417. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/run_tests_without_gh.sh +0 -0
  418. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/smoke_437_interactive.py +0 -0
  419. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_878_review_capture.py +0 -0
  420. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_release_published.py +0 -0
  421. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_release_wheel.py +0 -0
  422. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/setup.cfg +0 -0
  423. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/SMOKE_SET.md +0 -0
  424. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/__init__.py +0 -0
  425. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  426. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/contract.md +0 -0
  427. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/manifest.yml +0 -0
  428. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  429. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  430. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  431. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  432. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/conftest.py +0 -0
  433. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/contract.md +0 -0
  434. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/manifest.yml +0 -0
  435. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  436. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  437. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/contract.md +0 -0
  438. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/manifest.yml +0 -0
  439. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  440. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  441. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  442. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  443. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  444. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  445. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  446. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  447. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  448. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  449. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/contract.md +0 -0
  450. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  451. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  452. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/manifest.yml +0 -0
  453. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  454. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/tsconfig.json +0 -0
  455. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  456. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/conftest.py +0 -0
  457. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/board-pipeline-basic.json +0 -0
  458. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  459. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  460. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  461. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/all_pass.json +0 -0
  462. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  463. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/mixed_fail.json +0 -0
  464. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  465. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  466. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/skip.json +0 -0
  467. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/truncated.json +0 -0
  468. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  469. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  470. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  471. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  472. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  473. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  474. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  475. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  476. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_acceptance.py +0 -0
  477. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_acceptance_drivers.py +0 -0
  478. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent.py +0 -0
  479. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_api_error.py +0 -0
  480. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_app.py +0 -0
  481. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_branch_base.py +0 -0
  482. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_branch_capture.py +0 -0
  483. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_config_free_1712.py +0 -0
  484. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_deploy_units_endpoint.py +0 -0
  485. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_dirty_worktree.py +0 -0
  486. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_graph_self_heal.py +0 -0
  487. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_health_h3.py +0 -0
  488. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_idle_restart.py +0 -0
  489. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_push_failure.py +0 -0
  490. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_reap.py +0 -0
  491. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_repos_and_pull.py +0 -0
  492. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_restart_services_endpoint.py +0 -0
  493. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_startup_diagnostics.py +0 -0
  494. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_update.py +0 -0
  495. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_update_bluegreen.py +0 -0
  496. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_usage_limit.py +0 -0
  497. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_zero_commit.py +0 -0
  498. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ambient_home_isolation.py +0 -0
  499. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_approve_reject_plan.py +0 -0
  500. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_approve_usage_gate.py +0 -0
  501. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_assignment_already_recorded_daemon.py +0 -0
  502. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_log.py +0 -0
  503. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_outcome.py +0 -0
  504. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_query.py +0 -0
  505. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_auto_loop.py +0 -0
  506. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_auto_release_publish_2035.py +0 -0
  507. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_block_log.py +0 -0
  509. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_cap_762.py +0 -0
  510. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_fixture.py +0 -0
  511. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_read_path.py +0 -0
  512. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_service.py +0 -0
  513. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_state.py +0 -0
  514. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_wire.py +0 -0
  515. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_brain.py +0 -0
  516. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_branch_model.py +0 -0
  517. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_bug_intake.py +0 -0
  518. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_parity_2091.py +0 -0
  522. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_store.py +0 -0
  523. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_claim.py +0 -0
  524. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_acceptance.py +0 -0
  525. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign.py +0 -0
  526. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  527. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_interactive_remote.py +0 -0
  528. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_provider.py +0 -0
  529. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  530. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_audit.py +0 -0
  531. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_chat_continue.py +0 -0
  532. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor.py +0 -0
  535. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor_config_free_1801.py +0 -0
  536. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  537. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_gate_a.py +0 -0
  541. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_install_drift.py +0 -0
  542. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_install_skills.py +0 -0
  543. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_issue_create_label.py +0 -0
  544. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_issue_reopen.py +0 -0
  545. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_merge.py +0 -0
  546. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_assign.py +0 -0
  547. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_capture.py +0 -0
  548. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_chat_add_child.py +0 -0
  549. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_dispatch.py +0 -0
  550. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_gate_b.py +0 -0
  551. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_gate_c.py +0 -0
  552. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_order.py +0 -0
  553. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  554. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_ship.py +0 -0
  555. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_network.py +0 -0
  556. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_new_issue_chat.py +0 -0
  557. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_plans.py +0 -0
  558. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_portal.py +0 -0
  559. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_pull_artifact.py +0 -0
  560. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_queue.py +0 -0
  561. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_reattach_sessions.py +0 -0
  562. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_refine_board.py +0 -0
  563. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_preflight.py +0 -0
  564. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_propagate.py +0 -0
  565. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_window.py +0 -0
  566. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_repo_2220.py +0 -0
  567. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_scorecard.py +0 -0
  568. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_set_review_findings.py +0 -0
  569. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_advisory_terminal.py +0 -0
  570. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_merge_queue.py +0 -0
  571. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_provider.py +0 -0
  572. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_review_finalizing.py +0 -0
  573. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_test_failed_tag.py +0 -0
  574. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_usage_limit.py +0 -0
  575. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_sync_comments_873.py +0 -0
  576. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_test_plan.py +0 -0
  577. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_track.py +0 -0
  578. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_tui_update.py +0 -0
  579. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_wait.py +0 -0
  580. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_client_base_install.py +0 -0
  581. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_comments.py +0 -0
  582. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_completion_summary.py +0 -0
  583. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config.py +0 -0
  584. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_acceptance.py +0 -0
  585. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_audit.py +0 -0
  586. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_pricing.py +0 -0
  587. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_usage_gate.py +0 -0
  588. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_conflict_fix.py +0 -0
  589. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_conflict_fix_semantic.py +0 -0
  590. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test.py +0 -0
  591. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_baseline.py +0 -0
  592. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_routing.py +0 -0
  593. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_toolchain.py +0 -0
  594. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_web_sse_restart_live.py +0 -0
  595. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coordinator_machine.py +0 -0
  596. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cross_platform_imports.py +0 -0
  597. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard.py +0 -0
  598. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_fixture.py +0 -0
  599. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_terminal.py +0 -0
  600. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_terminal_live.py +0 -0
  601. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_db.py +0 -0
  602. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dead_end.py +0 -0
  603. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_db_backup.py +0 -0
  604. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_web_dist.py +0 -0
  605. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_web_rollback.py +0 -0
  606. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_drive_queue_unit.py +0 -0
  607. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_manifest.py +0 -0
  608. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_units_lane.py +0 -0
  609. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_web_unit.py +0 -0
  610. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deps.py +0 -0
  611. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_diagnose.py +0 -0
  612. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dispatch.py +0 -0
  613. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dispatch_target_validation.py +0 -0
  614. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dist_name.py +0 -0
  615. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_done_housekeeping.py +0 -0
  616. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive.py +0 -0
  617. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_queue.py +0 -0
  618. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_state.py +0 -0
  619. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_tmux.py +0 -0
  620. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_capability_detection.py +0 -0
  621. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  622. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_image_provenance.py +0 -0
  623. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_errors.py +0 -0
  624. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_events.py +0 -0
  625. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_failure_class.py +0 -0
  626. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_filelock.py +0 -0
  627. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  628. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fix_of_force_override.py +0 -0
  629. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_config_health.py +0 -0
  630. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_health_probes.py +0 -0
  631. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_health_snapshot.py +0 -0
  632. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_freshness.py +0 -0
  633. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_a.py +0 -0
  634. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_b.py +0 -0
  635. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_snapshot_staleness.py +0 -0
  636. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gates.py +0 -0
  637. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  638. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_generated_types_fixture.py +0 -0
  639. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_github_ops.py +0 -0
  640. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_goal.py +0 -0
  641. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_graph_health.py +0 -0
  642. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_graph_selfheal_absent_2237.py +0 -0
  643. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_handoff.py +0 -0
  644. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_checks.py +0 -0
  645. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_cli.py +0 -0
  646. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_cli_graph.py +0 -0
  647. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_config.py +0 -0
  648. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_context.py +0 -0
  649. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_deploy_lane_facts.py +0 -0
  650. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_incident_regression.py +0 -0
  651. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_pypi.py +0 -0
  652. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_registry.py +0 -0
  653. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_timer_active.py +0 -0
  654. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_toolchain.py +0 -0
  655. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_unit_drift.py +0 -0
  656. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_unit_enablement.py +0 -0
  657. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_hooks.py +0 -0
  658. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_human_attended_437.py +0 -0
  659. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_init.py +0 -0
  660. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_integration.py +0 -0
  661. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_briefing_echo.py +0 -0
  662. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_prefill_state.py +0 -0
  663. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_session_relaunch.py +0 -0
  664. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_test_verdict_backstop.py +0 -0
  665. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_token_attribution.py +0 -0
  666. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_worktree.py +0 -0
  667. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_issue_store_seam.py +0 -0
  668. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_liveness_auditor.py +0 -0
  669. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_liveness_notify.py +0 -0
  670. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_machine_pause.py +0 -0
  671. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_merge_queue.py +0 -0
  672. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_merge_verify.py +0 -0
  673. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_chat.py +0 -0
  674. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_dispatch.py +0 -0
  675. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_gate.py +0 -0
  676. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_order.py +0 -0
  677. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_seam.py +0 -0
  678. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_mock_author.py +0 -0
  679. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_model_tiering.py +0 -0
  680. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_models.py +0 -0
  681. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_models_config_labels.py +0 -0
  682. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_needs_attention.py +0 -0
  683. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_network.py +0 -0
  684. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_new_issue_chat.py +0 -0
  685. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_next_release_tag.py +0 -0
  686. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_no_direct_gh_calls.py +0 -0
  687. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_node_shim.py +0 -0
  688. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_baseline.py +0 -0
  689. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_cli.py +0 -0
  690. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_collect.py +0 -0
  691. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_config.py +0 -0
  692. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_drive_seam.py +0 -0
  693. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_isolation.py +0 -0
  694. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_predicate.py +0 -0
  695. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_quiet_hours.py +0 -0
  696. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_service.py +0 -0
  697. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notify.py +0 -0
  698. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notify_drain.py +0 -0
  699. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_openapi.py +0 -0
  700. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_operational_defaults.py +0 -0
  701. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_overlap_fence.py +0 -0
  702. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_overlap_predict.py +0 -0
  703. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_packaged_deploy_units.py +0 -0
  704. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_parentage.py +0 -0
  705. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_paste_landed.py +0 -0
  706. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_pipeline.py +0 -0
  707. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_approve_plan_command.py +0 -0
  708. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_pr_command.py +0 -0
  709. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_review_command.py +0 -0
  710. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_only.py +0 -0
  711. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_parser.py +0 -0
  712. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_platform_paths.py +0 -0
  713. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_bridge.py +0 -0
  714. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_config.py +0 -0
  715. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_sync.py +0 -0
  716. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_pr_body_lint.py +0 -0
  717. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_prereqs.py +0 -0
  718. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_production_db_guard.py +0 -0
  719. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_progress.py +0 -0
  720. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_provider_seam.py +0 -0
  721. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers.py +0 -0
  722. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers_config_labels.py +0 -0
  723. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers_pty.py +0 -0
  724. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_quiet_hours.py +0 -0
  725. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_quiet_hours_store_2146.py +0 -0
  726. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reap_merged_sessions.py +0 -0
  727. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reap_stale_interactive_tick.py +0 -0
  728. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_branch.py +0 -0
  729. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_completions.py +0 -0
  730. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_merges.py +0 -0
  731. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_usage_limit_done.py +0 -0
  732. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_refine_chat.py +0 -0
  733. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_cordon_2101.py +0 -0
  734. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_propagate.py +0 -0
  735. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_unified_1242.py +0 -0
  736. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_window.py +0 -0
  737. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_remote_auto_prune.py +0 -0
  738. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_remote_interactive_reaper.py +0 -0
  739. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_edit_2220.py +0 -0
  740. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_graph_fleet_2237.py +0 -0
  741. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_onboard_2220.py +0 -0
  742. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_report_result_push.py +0 -0
  743. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reports.py +0 -0
  744. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry.py +0 -0
  745. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry_advisory_1606.py +0 -0
  746. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry_type_1636.py +0 -0
  747. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_revalidate.py +0 -0
  748. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review.py +0 -0
  749. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_end_review_without_verdict.py +0 -0
  750. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_parse_failure_diagnostic.py +0 -0
  751. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_reaffirm.py +0 -0
  752. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_state.py +0 -0
  753. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_backstop.py +0 -0
  754. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_override_audit.py +0 -0
  755. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_relay.py +0 -0
  756. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_zero_commits.py +0 -0
  757. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_scoped_review_wiring.py +0 -0
  758. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_scorecard.py +0 -0
  759. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_serve.py +0 -0
  760. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_serve_app_board_trim.py +0 -0
  761. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_session.py +0 -0
  762. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_slice_issue_attribution.py +0 -0
  763. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke.py +0 -0
  764. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke_live_checkout_restore.py +0 -0
  765. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke_workflow.py +0 -0
  766. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_spend_ceiling.py +0 -0
  767. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_spend_ceiling_coordinator.py +0 -0
  768. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_split.py +0 -0
  769. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_split_work.py +0 -0
  770. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stage_projection.py +0 -0
  771. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stalled_pipeline.py +0 -0
  772. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_state.py +0 -0
  773. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_state_review_findings_daemon.py +0 -0
  774. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_status_fleet_footer.py +0 -0
  775. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stop_1567.py +0 -0
  776. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stuck.py +0 -0
  777. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_terminal_command.py +0 -0
  778. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_author.py +0 -0
  779. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_chat.py +0 -0
  780. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_orchestrator.py +0 -0
  781. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_report.py +0 -0
  782. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_verdict_parsing.py +0 -0
  783. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_verdict_transcript_floor.py +0 -0
  784. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_board_audit.py +0 -0
  785. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_config_load_1080.py +0 -0
  786. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_daemon_routing_906.py +0 -0
  787. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_tmux_host.py +0 -0
  788. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_tmux_session.py +0 -0
  789. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage.py +0 -0
  791. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage_limits.py +0 -0
  792. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage_rollup.py +0 -0
  793. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_venv_live_install_2121.py +0 -0
  794. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_version_single_source.py +0 -0
  795. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_watch.py +0 -0
  796. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_events.py +0 -0
  797. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_image_pin_sync.py +0 -0
  798. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_safety.py +0 -0
  799. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_test_scoping.py +0 -0
  800. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worktree.py +0 -0
  801. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  802. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/Cargo.lock +0 -0
  803. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/Cargo.toml +0 -0
  804. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/cargo-config-local-quadraui.toml.example +0 -0
  805. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/audit.rs +0 -0
  806. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/chat.rs +0 -0
  807. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/data.rs +0 -0
  808. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/dialogs.rs +0 -0
  809. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/drive.rs +0 -0
  810. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/drive_queue.rs +0 -0
  811. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/escalation.rs +0 -0
  812. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/events.rs +0 -0
  813. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fixtures.rs +0 -0
  814. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_health.rs +0 -0
  815. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_sessions.rs +0 -0
  816. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_terminals.rs +0 -0
  817. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/format.rs +0 -0
  818. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/milestone_dag.rs +0 -0
  819. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/mod.rs +0 -0
  820. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/msv.rs +0 -0
  821. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/pipeline.rs +0 -0
  822. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/plans.rs +0 -0
  823. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/render.rs +0 -0
  824. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/reports.rs +0 -0
  825. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/sessions.rs +0 -0
  826. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/settings_ui.rs +0 -0
  827. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/sidebar.rs +0 -0
  828. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/terminal.rs +0 -0
  829. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/tests.rs +0 -0
  830. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/types.rs +0 -0
  831. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/workspace.rs +0 -0
  832. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/bin/gtk.rs +0 -0
  833. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/commands.rs +0 -0
  834. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/lib.rs +0 -0
  835. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/main.rs +0 -0
  836. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/settings.rs +0 -0
  837. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/tests/acceptance.rs +0 -0
  838. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/tests/cli.rs +0 -0
  839. {code_coordinator-0.5.91 → code_coordinator-0.5.93}/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.91
3
+ Version: 0.5.93
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.91
3
+ Version: 0.5.93
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
@@ -676,6 +676,7 @@ tests/test_reconcile_merges.py
676
676
  tests/test_reconcile_usage_limit_done.py
677
677
  tests/test_refine_chat.py
678
678
  tests/test_release_cordon_2101.py
679
+ tests/test_release_cordon_daemon_leads_2176.py
679
680
  tests/test_release_cordon_deadlock_2240.py
680
681
  tests/test_release_propagate.py
681
682
  tests/test_release_unified_1242.py
@@ -706,6 +706,7 @@
706
706
  "tests/test_reconcile_usage_limit_done.py",
707
707
  "tests/test_refine_chat.py",
708
708
  "tests/test_release_cordon_2101.py",
709
+ "tests/test_release_cordon_daemon_leads_2176.py",
709
710
  "tests/test_release_cordon_deadlock_2240.py",
710
711
  "tests/test_release_propagate.py",
711
712
  "tests/test_release_unified_1242.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.91",
2
+ "tag": "0.5.93",
3
3
  "distance": 0,
4
- "node": "g39a4e989b2e78a6c7a1571c5f488f9fa1f70ca4f",
4
+ "node": "g827590698265fe1d05e3d77e84c364f63d767405",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-15"
@@ -655,16 +655,7 @@ def _fix_from_review(
655
655
  """
656
656
  from coord import auto_loop
657
657
  from coord.board_service import write_board
658
- from coord.state import COORD_DIR
659
-
660
- if guidance:
661
- click.echo(
662
- "warning: --guidance is ignored for a review id — the reviewer's "
663
- "findings ARE the fix briefing. To brief a fix in your own words "
664
- f"use `coord assign <machine> <repo> <issue> --fix-of "
665
- f"{review.assignment_id} --interactive --briefing ...`.",
666
- err=True,
667
- )
658
+ from coord.state import COORD_DIR, add_issue_context_entry
668
659
 
669
660
  work = None
670
661
  if review.review_of_assignment_id:
@@ -678,6 +669,28 @@ def _fix_from_review(
678
669
  )
679
670
  sys.exit(1)
680
671
 
672
+ # #2092: --guidance used to be silently discarded here — a warning was
673
+ # printed immediately above a success line the operator often doesn't
674
+ # read past the tail of, so a maintainer decision could be lost with no
675
+ # visible trace. Route it through the #603 pinned per-issue context store
676
+ # instead of dropping it OR bolting a second implementation of fix-
677
+ # briefing assembly onto this CLI door: `_dispatch_fix_for_review`
678
+ # already prepends `issue_context_block(...)` to the TOP of every fix
679
+ # briefing it builds, ABOVE the reviewer's findings, so a pinned entry
680
+ # written here lands exactly where the operator's guidance belongs — and
681
+ # (unlike a one-shot parameter) it also survives into every later
682
+ # briefing for this issue, not just this one dispatch.
683
+ if guidance:
684
+ add_issue_context_entry(
685
+ work.repo_name, work.issue_number, guidance,
686
+ pinned=True, source="coord fix --guidance",
687
+ )
688
+ click.echo(
689
+ f"guidance pinned to issue #{work.issue_number} context (#603) — "
690
+ "it will be prepended above the reviewer's findings in the fix "
691
+ "briefing.",
692
+ )
693
+
681
694
  # #555: an INTERACTIVE work completion must never be silently followed by a
682
695
  # headless fix. The human at the tmux pane owns that branch and may still
683
696
  # be mid-edit; a `claude -p` worker pushing over them is the incident that
@@ -694,11 +694,25 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
694
694
  )
695
695
  current = rp.hosts_already_current(_lane_versions_by_host(before), record.target_version)
696
696
 
697
+ # #2176: resolved here, ahead of cordoning, so the cordon plan can honour
698
+ # the same daemon-leads invariant the roll itself is bound by (see below).
699
+ # Purely a derivation from data already in hand (`machine_health`) — this
700
+ # does not move the "unorderable fleet" REFUSAL, which stays below the
701
+ # deferral branch on purpose (see its own comment).
702
+ daemon_name = _daemon_machine_name(config, daemon_host_override, machine_health)
703
+
697
704
  # ── 3b. cordon the hosts that are behind, so they DRAIN (#2101) ──────
698
705
  #
699
706
  # Before the deferral return below, on purpose: cordoning is the thing
700
707
  # that turns "no window" into "a window in a few minutes". A run that
701
708
  # defers without cordoning has changed nothing about why it deferred.
709
+ #
710
+ # #2176: a non-daemon host with no busy signal of its own is exempted
711
+ # while the daemon host is itself busy and behind — see `plan_cordons`'s
712
+ # `daemon_host` handling. It cannot roll ahead of a busy daemon host
713
+ # regardless of its own drain state (the daemon-leads invariant below),
714
+ # so cordoning it protects nothing and just spends fleet capacity for an
715
+ # unbounded wait.
702
716
  record.cordons = _apply_cordons(
703
717
  hosts=hosts,
704
718
  report=before,
@@ -712,6 +726,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
712
726
  state_dir=state_dir,
713
727
  max_deferrals=cordon_max_deferrals,
714
728
  release_cooldown=cordon_cooldown,
729
+ daemon_host=daemon_name,
715
730
  )
716
731
 
717
732
  if fully_busy and not force:
@@ -722,12 +737,12 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
722
737
  # meets a fleet that is actually draining.
723
738
  _finish(rp.STATUS_DEFERRED, 0)
724
739
 
725
- # #2101: resolved AFTER the deferral above, deliberately. This refusal is
726
- # about the ORDER a roll happens in; a run that is going to roll nothing
727
- # has no order to get wrong, and turning "the fleet is busy" into a
728
- # `failed` record (exit 1, systemd marks the unit failed) would teach an
729
- # operator to ignore the one signal that matters.
730
- daemon_name = _daemon_machine_name(config, daemon_host_override, machine_health)
740
+ # #2101: this refusal is checked AFTER the deferral above, deliberately.
741
+ # This refusal is about the ORDER a roll happens in; a run that is going
742
+ # to roll nothing has no order to get wrong, and turning "the fleet is
743
+ # busy" into a `failed` record (exit 1, systemd marks the unit failed)
744
+ # would teach an operator to ignore the one signal that matters.
745
+ # (`daemon_name` itself was resolved earlier, before cordoning — #2176.)
731
746
  if daemon_name is None and len(hosts) > 1:
732
747
  # #2052 fault 2: this used to warn and roll in coordinator.yml order.
733
748
  # It then briefly put the daemon host BEHIND both its callers during a
@@ -1082,6 +1097,7 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1082
1097
  state_dir: Path | None = None,
1083
1098
  max_deferrals: int | None = None,
1084
1099
  release_cooldown: float | None = None,
1100
+ daemon_host: str | None = None,
1085
1101
  ) -> dict:
1086
1102
  """Plan and apply this run's cordons. Returns the journal fragment.
1087
1103
 
@@ -1090,6 +1106,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1090
1106
  Failing the whole propagation because the cordon could not be renewed
1091
1107
  would make #2101's fix strictly worse than not having it.
1092
1108
 
1109
+ *daemon_host* (#2176) lets :func:`~coord.release_cordon.plan_cordons`
1110
+ exempt a non-daemon host with no busy signal of its own from cordoning
1111
+ while the daemon host is itself busy and behind — see that function's
1112
+ docstring for the reasoning. ``None`` (an unorderable fleet) disables
1113
+ the exemption and falls back to cordoning every behind host, same as
1114
+ before #2176.
1115
+
1093
1116
  #2240: *state_dir* is where the propagation journal lives, and the journal
1094
1117
  is where "how many runs in a row has this cordon now deferred?" is stored
1095
1118
  — the process holding the answer in memory is restarted by the roll it is
@@ -1162,10 +1185,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1162
1185
  if release_cooldown is None
1163
1186
  else release_cooldown
1164
1187
  ),
1188
+ daemon_host=daemon_host,
1165
1189
  )
1166
1190
  for line in plan.render():
1167
1191
  click.echo(line)
1168
1192
  outcome.cooling_seconds = plan.cooling_seconds
1193
+ outcome.collateral_spared = list(plan.collateral_spared)
1194
+ outcome.blocked_behind = plan.blocked_behind
1169
1195
  if plan.released is not None:
1170
1196
  outcome.released = plan.released.to_dict()
1171
1197
  # stderr as well as stdout: on the timer host this line IS the
@@ -142,6 +142,35 @@ and #2082 is the cost of tolerating that. The threshold is a knob
142
142
  (``coord release propagate --cordon-after N``) precisely so a future cadence
143
143
  change does not need a code change. Trap F.
144
144
 
145
+ CORDON-EVERY-BEHIND-HOST DOES NOT COVER A HOST THAT CANNOT ROLL EITHER WAY
146
+ ----------------------------------------------------------------------------
147
+ Observed 2026-08-13 00:18 UTC: one busy signal, on dellserver, and the fleet
148
+ cordoned all three machines anyway. elitebook and precision reported
149
+ ``online • idle`` throughout and stayed cordoned — launch-blocked — for
150
+ 34+ minutes, unable to accept the very review dispatch #2240 needed.
151
+
152
+ The cordon-every-behind-host rule above is correct for a host whose OWN
153
+ draining is what a run is waiting on: skip it and it never drains, and a run
154
+ that defers without cordoning defers again in 20 minutes for the same
155
+ reason. It does not cover a host that has no busy signal against it AND is
156
+ blocked from rolling by the daemon-leads invariant (see
157
+ :mod:`coord.release_propagate`'s LANE ORDER section) rather than by its own
158
+ work — nothing may roll ahead of a busy daemon host, so such a host cannot
159
+ roll regardless of how drained it gets. Cordoning it protects nothing: its
160
+ drained state cannot be consumed until the daemon host rolls first, which
161
+ may be unbounded (any drive on the daemon host reproduces this, not just a
162
+ wedged one).
163
+
164
+ :func:`plan_cordons`'s *daemon_host* parameter is the fix: while the daemon
165
+ host is itself busy and behind, only it (and any host with its own busy
166
+ signal) is cordoned. Everyone else stays uncordoned and dispatchable —
167
+ released immediately if a previous run already cordoned them — until the
168
+ daemon host becomes rollable, at which point ordinary drain-everyone-behind
169
+ resumes. :attr:`CordonPlan.collateral_spared` /
170
+ :attr:`CordonPlan.blocked_behind` name exactly who was spared and why, so
171
+ the next puzzle like this one is one line of output, not a 40-minute read of
172
+ `/board`.
173
+
145
174
  PURITY
146
175
  ------
147
176
  Nothing here reads the clock, the filesystem, the network or the DB — same
@@ -618,6 +647,17 @@ class CordonPlan:
618
647
  #: recorded rather than silent, because "no cordons planned" and "cordons
619
648
  #: suppressed on purpose" are the same output otherwise.
620
649
  cooling_seconds: float = 0.0
650
+ #: #2176: behind hosts this run deliberately did NOT cordon (and, if
651
+ #: already cordoned, released) because they have no busy signal of their
652
+ #: own and cannot roll ahead of `blocked_behind` anyway. Reported
653
+ #: separately from `uncordon` (which is "proven current") so the journal
654
+ #: and CLI output can name them as collateral rather than as a drain that
655
+ #: completed.
656
+ collateral_spared: tuple[str, ...] = ()
657
+ #: #2176: the daemon host these hosts are spared on account of — set
658
+ #: exactly when `collateral_spared` is non-empty. The single fact that
659
+ #: would have turned a 40-minute puzzle into one line of output.
660
+ blocked_behind: str | None = None
621
661
 
622
662
  @property
623
663
  def empty(self) -> bool:
@@ -627,6 +667,7 @@ class CordonPlan:
627
667
  or self.escalations
628
668
  or self.expired
629
669
  or self.released
670
+ or self.collateral_spared
630
671
  )
631
672
 
632
673
  def to_dict(self) -> dict:
@@ -638,6 +679,8 @@ class CordonPlan:
638
679
  "unknown": list(self.unknown),
639
680
  "released": self.released.to_dict() if self.released else None,
640
681
  "cooling_seconds": self.cooling_seconds,
682
+ "collateral_spared": list(self.collateral_spared),
683
+ "blocked_behind": self.blocked_behind,
641
684
  }
642
685
 
643
686
  def render(self) -> list[str]:
@@ -645,6 +688,14 @@ class CordonPlan:
645
688
  lines: list[str] = []
646
689
  for item in self.cordon:
647
690
  lines.append(f" ⊘ cordon {item.machine}: {item.describe()}")
691
+ if self.collateral_spared:
692
+ lines.append(
693
+ " · "
694
+ + ", ".join(sorted(self.collateral_spared))
695
+ + f": left uncordoned — blocked behind daemon host "
696
+ f"{self.blocked_behind} either way, cordoning would not help "
697
+ "(#2176)"
698
+ )
648
699
  for name in self.uncordon:
649
700
  lines.append(f" ✓ uncordon {name}: up to date, work may resume")
650
701
  for name in self.expired:
@@ -748,12 +799,15 @@ def plan_cordons(
748
799
  pressure: DeferralPressure | None = None,
749
800
  max_deferrals: int = DEFAULT_MAX_DEFERRALS,
750
801
  release_cooldown: float = DEFAULT_RELEASE_COOLDOWN_SECONDS,
802
+ daemon_host: str | None = None,
751
803
  ) -> CordonPlan:
752
804
  """Decide this run's cordon writes. Pure.
753
805
 
754
806
  *existing* is the store as read (expired records included — this function
755
807
  is what notices they lapsed). *busy_reasons* maps a host to why it is not
756
- yet drained, purely so an escalation can say what is holding it.
808
+ yet drained, purely so an escalation can say what is holding it — and
809
+ (#2176) so this function can tell a genuinely busy host from an idle one
810
+ when deciding who is collateral.
757
811
 
758
812
  ``enabled=False`` (``coord release propagate --no-cordon``) plans no new
759
813
  cordons but STILL clears the ones this owner already set: turning the
@@ -772,6 +826,21 @@ def plan_cordons(
772
826
  Proven-current hosts are uncordoned in every one of these branches: that
773
827
  is never the wrong move, and skipping it during a cooldown would leave a
774
828
  rolled host cordoned for the length of the cooldown.
829
+
830
+ *daemon_host* (#2176) is the machine `coord release propagate` will roll
831
+ first (see `coord.release_propagate`'s LANE ORDER section) — the
832
+ daemon-leads invariant means no OTHER host's python lane may roll ahead
833
+ of it while it is itself busy and behind. A behind host with no busy
834
+ signal of its own is therefore collateral, not protected, by a cordon
835
+ while that holds: it cannot roll either way, so draining it buys nothing
836
+ and just spends fleet capacity for a wait that is unbounded from its own
837
+ perspective (#2067 made quiescence per-host; this closes the cordon's
838
+ matching gap). Such a host is left uncordoned — and released immediately
839
+ if a previous run already cordoned it — until the daemon host is
840
+ rollable (quiescent, or already on the target), at which point ordinary
841
+ drain-everyone-behind resumes exactly as before #2176. A host that is
842
+ itself busy is cordoned regardless: its own drain is still the thing
843
+ being waited on, whatever the daemon host is doing.
775
844
  """
776
845
  records = _as_records(existing)
777
846
  live = {name: c for name, c in records.items() if c.active(now)}
@@ -782,11 +851,30 @@ def plan_cordons(
782
851
  if not enabled:
783
852
  return CordonPlan(uncordon=tuple(sorted(live)), expired=expired)
784
853
 
785
- # Uncordon: PROVEN current, and nothing else. A host whose version could
786
- # not be read keeps whatever cordon it has until that cordon EXPIRES —
787
- # clearing on "we couldn't read the version" would open the fleet up
788
- # mid-roll on the strength of one failed HTTP call.
789
- to_uncordon = tuple(sorted(name for name in live if name in drift.current))
854
+ # ── #2176: who is collateral to a busy, behind daemon host ────────────
855
+ daemon_blocked = bool(
856
+ daemon_host
857
+ and (busy_reasons or {}).get(daemon_host)
858
+ and daemon_host not in drift.current
859
+ )
860
+ collateral = frozenset(
861
+ host
862
+ for host in drift.behind
863
+ if daemon_blocked and host != daemon_host and not (busy_reasons or {}).get(host)
864
+ )
865
+ blocked_behind = daemon_host if collateral else None
866
+
867
+ # Uncordon: PROVEN current, plus (#2176) any collateral host a previous
868
+ # run already cordoned — "spared" means dispatchable now, not "merely not
869
+ # renewed". A host whose version could not be read otherwise keeps
870
+ # whatever cordon it has until that cordon EXPIRES — clearing on "we
871
+ # couldn't read the version" would open the fleet up mid-roll on the
872
+ # strength of one failed HTTP call.
873
+ to_uncordon = tuple(
874
+ sorted(
875
+ {name for name in live if name in drift.current} | (collateral & set(live))
876
+ )
877
+ )
790
878
 
791
879
  # ── #2240: the deadlock bound ────────────────────────────────────────
792
880
  pressure = pressure or DeferralPressure()
@@ -797,6 +885,8 @@ def plan_cordons(
797
885
  expired=expired,
798
886
  cooling_seconds=cooling,
799
887
  unknown=tuple(sorted(drift.undecided & set(live))),
888
+ collateral_spared=tuple(sorted(collateral)),
889
+ blocked_behind=blocked_behind,
800
890
  )
801
891
  if max_deferrals > 0 and pressure.consecutive >= max_deferrals:
802
892
  return CordonPlan(
@@ -809,11 +899,13 @@ def plan_cordons(
809
899
  cooldown_seconds=release_cooldown,
810
900
  target_version=target_version,
811
901
  ),
902
+ collateral_spared=tuple(sorted(collateral)),
903
+ blocked_behind=blocked_behind,
812
904
  )
813
905
 
814
906
  to_cordon: list[Cordon] = []
815
907
  escalations: list[DrainEscalation] = []
816
- for host in sorted(drift.behind):
908
+ for host in sorted(drift.behind - collateral):
817
909
  previous = live.get(host)
818
910
  created = previous.created_at if previous and previous.created_at else now
819
911
  to_cordon.append(
@@ -844,6 +936,8 @@ def plan_cordons(
844
936
  escalations=tuple(escalations),
845
937
  expired=expired,
846
938
  unknown=tuple(sorted(drift.undecided & set(live))),
939
+ collateral_spared=tuple(sorted(collateral)),
940
+ blocked_behind=blocked_behind,
847
941
  )
848
942
 
849
943
 
@@ -883,6 +977,13 @@ class CordonOutcome:
883
977
  #: out of the newest record instead of every caller of
884
978
  #: :func:`describe_deferral_pressure` assuming the default.
885
979
  max_deferrals: int = DEFAULT_MAX_DEFERRALS
980
+ #: #2176: behind hosts this run spared (or actively released) because
981
+ #: they have no busy signal of their own and cannot roll ahead of a busy,
982
+ #: behind daemon host anyway. Mirrors `CordonPlan.collateral_spared`.
983
+ collateral_spared: list[str] = field(default_factory=list)
984
+ #: #2176: the daemon host `collateral_spared` was spared on account of.
985
+ #: Mirrors `CordonPlan.blocked_behind`.
986
+ blocked_behind: str | None = None
886
987
 
887
988
  def to_dict(self) -> dict:
888
989
  return {
@@ -896,4 +997,6 @@ class CordonOutcome:
896
997
  "cooling_seconds": self.cooling_seconds,
897
998
  "pressure": dict(self.pressure),
898
999
  "max_deferrals": self.max_deferrals,
1000
+ "collateral_spared": list(self.collateral_spared),
1001
+ "blocked_behind": self.blocked_behind,
899
1002
  }
@@ -1247,6 +1247,14 @@ def render_record(record: PropagationRecord | Mapping[str, Any]) -> list[str]:
1247
1247
  )
1248
1248
  if cordons.get("uncordoned"):
1249
1249
  lines.append(" uncordoned: " + ", ".join(cordons["uncordoned"]))
1250
+ # #2176: name the collateral hosts AND the single host they're collateral
1251
+ # to — the fact that would have turned a 40-minute puzzle into one line.
1252
+ if cordons.get("collateral_spared"):
1253
+ lines.append(
1254
+ " spared (blocked behind daemon host "
1255
+ f"{cordons.get('blocked_behind')} anyway): "
1256
+ + ", ".join(cordons["collateral_spared"])
1257
+ )
1250
1258
  if cordons.get("expired"):
1251
1259
  lines.append(
1252
1260
  " cordons that lapsed on their own: " + ", ".join(cordons["expired"])
@@ -363,22 +363,38 @@ class TestGuardsSurviveTheCliDoor:
363
363
  assert "no structured review findings" in result.output
364
364
  http.post.assert_not_called()
365
365
 
366
- def test_guidance_on_a_review_id_warns(
366
+ def test_guidance_on_a_review_id_is_pinned_above_the_findings(
367
367
  self, config_file: Path, coord_dir: Path
368
368
  ) -> None:
369
- """The reviewer's findings are the briefing say so rather than
370
- silently dropping the operator's text."""
371
- _seed(_work(), _review())
369
+ """#2092: the reviewer's findings are the briefing, but the operator's
370
+ guidance is the only source of maintainer decisions the reviewer
371
+ cannot have — it must reach the worker, not vanish behind a warning.
372
+ Routed through the #603 pinned per-issue context store, it lands
373
+ ABOVE the reviewer's findings in the fix briefing."""
374
+ _seed(_work(), _review(), body="## Blocking\n- 1. GET /outbox is undocumented\n")
372
375
  http = _http_mock()
373
376
 
374
377
  with patch("coord.auto_loop.httpx", http), \
375
378
  patch("coord.auto_loop.record_dispatched_assignment"), \
376
379
  patch("coord.github_ops.post_issue_comment"):
377
- result = _run(config_file, "review-xyz", "--guidance", "try harder")
380
+ result = _run(
381
+ config_file, "review-xyz",
382
+ "--guidance", "MAINTAINER DECISION: keep GET /outbox.",
383
+ )
378
384
 
379
385
  assert result.exit_code == 0, result.output
380
- assert "--guidance is ignored" in result.output
381
- assert "try harder" not in http.post.call_args.kwargs["json"]["briefing"]
386
+ assert "pinned to issue #42 context" in result.output
387
+
388
+ briefing = http.post.call_args.kwargs["json"]["briefing"]
389
+ assert "MAINTAINER DECISION: keep GET /outbox." in briefing
390
+ assert briefing.index("MAINTAINER DECISION") < briefing.index(
391
+ "GET /outbox is undocumented"
392
+ )
393
+
394
+ # It also outlives this one dispatch — it's a durable per-issue entry.
395
+ from coord.state import issue_context_block
396
+
397
+ assert "MAINTAINER DECISION: keep GET /outbox." in issue_context_block("api", 42)
382
398
 
383
399
 
384
400
  # ── Part 3: red CI as the third trigger ──────────────────────────────────────