code-coordinator 0.5.95__tar.gz → 0.5.96__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 (840) hide show
  1. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/release.py +82 -8
  5. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_propagate.py +23 -1
  6. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_propagate.py +161 -0
  7. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_window.py +52 -0
  8. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/cargo-test.yml +0 -0
  19. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/release-tui.yml +0 -0
  21. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.gitignore +0 -0
  23. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/GOAL.md +0 -0
  25. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/LICENSE +0 -0
  26. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/README.md +0 -0
  28. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/client.py +0 -0
  59. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/merge.py +0 -0
  74. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/milestone.py +0 -0
  75. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/plan_followup.py +0 -0
  76. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/plans.py +0 -0
  77. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/portal.py +0 -0
  78. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/repo.py +0 -0
  79. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/report.py +0 -0
  80. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/review.py +0 -0
  81. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/scorecard.py +0 -0
  82. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/sessions.py +0 -0
  83. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/setup.py +0 -0
  84. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/status.py +0 -0
  85. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/terminal.py +0 -0
  86. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/test_gate.py +0 -0
  87. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/tui.py +0 -0
  88. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/comments.py +0 -0
  89. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/config.py +0 -0
  90. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/conflict_fix.py +0 -0
  91. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dao.py +0 -0
  92. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/__init__.py +0 -0
  93. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/fixture.py +0 -0
  94. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/index.html +0 -0
  95. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/server.py +0 -0
  96. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/terminal.py +0 -0
  97. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/.gitignore +0 -0
  98. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/components.json +0 -0
  99. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  100. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  101. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  102. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  103. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  104. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  105. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  106. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  107. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  108. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/index.html +0 -0
  109. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  110. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/sw.js +0 -0
  111. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  112. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  113. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  114. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  115. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  116. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  117. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  118. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  119. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  120. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  121. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/eslint.config.js +0 -0
  122. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/index.html +0 -0
  123. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  124. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/package-lock.json +0 -0
  125. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/package.json +0 -0
  126. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  127. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.config.ts +0 -0
  128. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/postcss.config.js +0 -0
  129. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  130. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  131. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  132. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/App.tsx +0 -0
  133. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/client.ts +0 -0
  134. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  135. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  136. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  137. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  138. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  139. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  140. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  141. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  142. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  143. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  144. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  145. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  146. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  147. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  148. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  149. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  150. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  151. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  152. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  153. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  154. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  155. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  156. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  157. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  158. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  159. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  160. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  161. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  162. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  163. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  164. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  165. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  166. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  167. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  168. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  169. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/index.css +0 -0
  170. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  171. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  172. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/main.tsx +0 -0
  173. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  174. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  175. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  176. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  177. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  178. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  179. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  180. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  181. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  182. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  183. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  184. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  185. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  186. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  187. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  188. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  189. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  190. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  191. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  192. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  193. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  194. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  195. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  196. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tailwind.config.js +0 -0
  197. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.json +0 -0
  198. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  199. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/vite.config.ts +0 -0
  200. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/db.py +0 -0
  201. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dead_end.py +0 -0
  202. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/README.md +0 -0
  203. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-agent.service +0 -0
  204. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.service +0 -0
  205. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.sh +0 -0
  206. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.timer +0 -0
  207. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.service +0 -0
  208. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.timer +0 -0
  209. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-notify.service +0 -0
  210. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-notify.timer +0 -0
  211. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.service +0 -0
  212. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.timer +0 -0
  213. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.service +0 -0
  214. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.timer +0 -0
  215. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-serve.service +0 -0
  216. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.service +0 -0
  217. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.timer +0 -0
  218. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web.service +0 -0
  219. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy_manifest.py +0 -0
  220. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy_units.py +0 -0
  221. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deps.py +0 -0
  222. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/diagnose.py +0 -0
  223. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dispatch.py +0 -0
  224. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dist_name.py +0 -0
  225. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive.py +0 -0
  226. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive_queue.py +0 -0
  227. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive_state.py +0 -0
  228. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/events.py +0 -0
  229. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/failure_class.py +0 -0
  230. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/filelock.py +0 -0
  231. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/fleet_config_health.py +0 -0
  232. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/freshness.py +0 -0
  233. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_a.py +0 -0
  234. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_b.py +0 -0
  235. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_snapshot.py +0 -0
  236. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gates.py +0 -0
  237. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/github_ops.py +0 -0
  238. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/goal.py +0 -0
  239. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/graph_health.py +0 -0
  240. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/__init__.py +0 -0
  241. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/aggregate.py +0 -0
  242. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/__init__.py +0 -0
  243. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/agent_install.py +0 -0
  244. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/cargo_targets.py +0 -0
  245. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/claude_binary.py +0 -0
  246. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/deploy_lane_facts.py +0 -0
  247. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/disk.py +0 -0
  248. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_board.py +0 -0
  249. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  250. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_phantom.py +0 -0
  251. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_unit_drift.py +0 -0
  252. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/graph.py +0 -0
  253. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/graphify_cli.py +0 -0
  254. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/index_lock.py +0 -0
  255. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/plan_usage.py +0 -0
  256. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/repo_state.py +0 -0
  257. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/spawned_coord.py +0 -0
  258. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/timer_active.py +0 -0
  259. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/toolchain.py +0 -0
  260. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/unit_drift.py +0 -0
  261. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/unit_enablement.py +0 -0
  262. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/worktrees.py +0 -0
  263. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/cli.py +0 -0
  264. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/context.py +0 -0
  265. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/fleet_snapshot.py +0 -0
  266. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/models.py +0 -0
  267. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/pypi.py +0 -0
  268. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/registry.py +0 -0
  269. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/render.py +0 -0
  270. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/units.py +0 -0
  271. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/hooks.py +0 -0
  272. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/housekeeping.py +0 -0
  273. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/interactive.py +0 -0
  274. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/issue_store.py +0 -0
  275. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/liveness_auditor.py +0 -0
  276. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/machine_pause.py +0 -0
  277. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/merge_queue.py +0 -0
  278. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_chat.py +0 -0
  279. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_dispatch.py +0 -0
  280. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_gate.py +0 -0
  281. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_order.py +0 -0
  282. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/mock_author.py +0 -0
  283. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/models.py +0 -0
  284. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/network.py +0 -0
  285. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/new_issue_chat.py +0 -0
  286. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/__init__.py +0 -0
  287. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/baseline.py +0 -0
  288. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/cli.py +0 -0
  289. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/collect.py +0 -0
  290. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/digest.py +0 -0
  291. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/models.py +0 -0
  292. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/predicate.py +0 -0
  293. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/service.py +0 -0
  294. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/store.py +0 -0
  295. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/transport.py +0 -0
  296. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notify.py +0 -0
  297. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/openapi.py +0 -0
  298. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/overlap_fence.py +0 -0
  299. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/overlap_predict.py +0 -0
  300. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/parentage.py +0 -0
  301. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/parentage_github.py +0 -0
  302. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/pipeline.py +0 -0
  303. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/plan_parser.py +0 -0
  304. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/plans.py +0 -0
  305. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/platform_paths.py +0 -0
  306. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_bridge.py +0 -0
  307. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_store.py +0 -0
  308. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_sync.py +0 -0
  309. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/pr_body_lint.py +0 -0
  310. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/prereqs.py +0 -0
  311. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/progress.py +0 -0
  312. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/__init__.py +0 -0
  313. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/base.py +0 -0
  314. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/claude.py +0 -0
  315. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/claude_pty.py +0 -0
  316. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/opencode.py +0 -0
  317. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/reconcile.py +0 -0
  318. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/refine_chat.py +0 -0
  319. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_cordon.py +0 -0
  320. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_verify.py +0 -0
  321. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_window.py +0 -0
  322. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/repo_edit.py +0 -0
  323. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/repo_onboard.py +0 -0
  324. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/reports.py +0 -0
  325. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/revalidate.py +0 -0
  326. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/review.py +0 -0
  327. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/scorecard.py +0 -0
  328. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/serve_app.py +0 -0
  329. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/skills/update-issue/SKILL.md +0 -0
  330. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/smoke.py +0 -0
  331. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/spend_ceiling.py +0 -0
  332. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/split_work.py +0 -0
  333. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/stage_projection.py +0 -0
  334. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/state.py +0 -0
  335. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_author.py +0 -0
  336. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_chat.py +0 -0
  337. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_orchestrator.py +0 -0
  338. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_report.py +0 -0
  339. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/tui_release.py +0 -0
  340. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage.py +0 -0
  341. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage_limits.py +0 -0
  342. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage_rollup.py +0 -0
  343. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/worker_events.py +0 -0
  344. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coordinator.example.yml +0 -0
  345. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-agent.service +0 -0
  346. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.service +0 -0
  347. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.sh +0 -0
  348. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.timer +0 -0
  349. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-drive-queue.service +0 -0
  350. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-drive-queue.timer +0 -0
  351. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-notify.service +0 -0
  352. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-notify.timer +0 -0
  353. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-propagate.service +0 -0
  354. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-propagate.timer +0 -0
  355. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-window.service +0 -0
  356. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-window.timer +0 -0
  357. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-serve.service +0 -0
  358. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.service +0 -0
  359. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.sh +0 -0
  360. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.timer +0 -0
  361. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-rollback.sh +0 -0
  362. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web.service +0 -0
  363. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/node-shim.sh +0 -0
  364. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/AGENT_OPERATIONS.md +0 -0
  365. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ARCHITECTURE.md +0 -0
  366. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ARCH_SECURITY_GATES.md +0 -0
  367. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/COCKPIT.md +0 -0
  368. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CONTROL_CENTER.md +0 -0
  369. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/COST_DISCIPLINE.md +0 -0
  370. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CROSS_PLATFORM.md +0 -0
  371. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CUSTOMER_PORTAL.md +0 -0
  372. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/DRIVE_QUEUE.md +0 -0
  373. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/EPHEMERAL_WORKERS.md +0 -0
  374. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/FORGE_MIGRATION.md +0 -0
  375. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/GRAPHIFY_SETUP.md +0 -0
  376. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ISSUE_GUIDANCE.md +0 -0
  377. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/MAC_MINI.md +0 -0
  378. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  379. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/NOTIFIER.md +0 -0
  380. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/OPENCODE_VERIFICATION.md +0 -0
  381. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/OPERATING_GOTCHAS.md +0 -0
  382. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ORACLE_LOOP.md +0 -0
  383. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PHONE_WEBAPP.md +0 -0
  384. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PIPELINE_V2.md +0 -0
  385. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PLATFORM_EVOLUTION.md +0 -0
  386. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/SECOND_BACKEND.md +0 -0
  387. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/STORE_SERVICE.md +0 -0
  388. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  389. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/WEB_CONTROL_CENTER.md +0 -0
  390. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/README.md +0 -0
  391. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/_tokens.css +0 -0
  392. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/issue-detail.html +0 -0
  393. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-narrow.html +0 -0
  394. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-wide.html +0 -0
  395. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/graphify-out/.gitignore +0 -0
  396. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/install-agent.sh +0 -0
  397. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/pyproject.toml +0 -0
  398. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/audit_review_verdict_overrides.py +0 -0
  399. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  400. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/build-worker-image.sh +0 -0
  401. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/coordinator-machine.py +0 -0
  402. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/epic-down.sh +0 -0
  403. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/epic-up.sh +0 -0
  404. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/preflight.sh +0 -0
  405. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/provision-worker.sh +0 -0
  406. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  407. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  408. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/verify-github-token.sh +0 -0
  409. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/codegen.py +0 -0
  410. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/coord-test-runner.sh +0 -0
  411. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/drive-batch.sh +0 -0
  412. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/gen_board_fixture.py +0 -0
  413. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/next_release_tag.py +0 -0
  414. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/run_tests_in_populated_home.sh +0 -0
  415. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/run_tests_without_gh.sh +0 -0
  416. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/smoke_437_interactive.py +0 -0
  417. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_878_review_capture.py +0 -0
  418. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_release_published.py +0 -0
  419. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_release_wheel.py +0 -0
  420. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/setup.cfg +0 -0
  421. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/SMOKE_SET.md +0 -0
  422. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/__init__.py +0 -0
  423. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  424. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/contract.md +0 -0
  425. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/manifest.yml +0 -0
  426. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  427. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  428. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  429. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  430. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/conftest.py +0 -0
  431. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/contract.md +0 -0
  432. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/manifest.yml +0 -0
  433. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  434. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  435. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/contract.md +0 -0
  436. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/manifest.yml +0 -0
  437. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  438. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  439. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  440. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  441. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  442. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  443. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  444. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  445. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  446. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  447. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/contract.md +0 -0
  448. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  449. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  450. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/manifest.yml +0 -0
  451. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  452. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/tsconfig.json +0 -0
  453. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  454. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/conftest.py +0 -0
  455. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-basic.json +0 -0
  456. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  457. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  458. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  459. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/all_pass.json +0 -0
  460. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  461. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/mixed_fail.json +0 -0
  462. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  463. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  464. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/skip.json +0 -0
  465. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/truncated.json +0 -0
  466. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  467. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  468. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  470. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  471. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  472. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  473. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  474. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_acceptance.py +0 -0
  475. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_acceptance_drivers.py +0 -0
  476. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent.py +0 -0
  477. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_api_error.py +0 -0
  478. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_app.py +0 -0
  479. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_branch_base.py +0 -0
  480. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_branch_capture.py +0 -0
  481. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_config_free_1712.py +0 -0
  482. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_deploy_units_endpoint.py +0 -0
  483. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_dirty_worktree.py +0 -0
  484. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_graph_self_heal.py +0 -0
  485. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_health_h3.py +0 -0
  486. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_idle_restart.py +0 -0
  487. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_push_failure.py +0 -0
  488. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_reap.py +0 -0
  489. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_repos_and_pull.py +0 -0
  490. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_restart_services_endpoint.py +0 -0
  491. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_startup_diagnostics.py +0 -0
  492. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_update.py +0 -0
  493. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_update_bluegreen.py +0 -0
  494. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_usage_limit.py +0 -0
  495. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_zero_commit.py +0 -0
  496. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ambient_home_isolation.py +0 -0
  497. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_approve_reject_plan.py +0 -0
  498. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_approve_usage_gate.py +0 -0
  499. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_assignment_already_recorded_daemon.py +0 -0
  500. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_log.py +0 -0
  501. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_outcome.py +0 -0
  502. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_query.py +0 -0
  503. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_auto_loop.py +0 -0
  504. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_auto_release_publish_2035.py +0 -0
  505. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_service.py +0 -0
  511. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_state.py +0 -0
  512. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_wire.py +0 -0
  513. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_brain.py +0 -0
  514. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_branch_model.py +0 -0
  515. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_bug_intake.py +0 -0
  516. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_build_worker_image_env_update.py +0 -0
  517. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cargo_cache.py +0 -0
  518. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_acceptance_gate_1950.py +0 -0
  519. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_parity_2091.py +0 -0
  520. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_store.py +0 -0
  521. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_claim.py +0 -0
  522. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_acceptance.py +0 -0
  523. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign.py +0 -0
  524. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  525. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_remote.py +0 -0
  526. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_provider.py +0 -0
  527. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  528. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_audit.py +0 -0
  529. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_chat_continue.py +0 -0
  530. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_diagnose_config_provenance.py +0 -0
  531. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_diagnose_graph.py +0 -0
  532. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor.py +0 -0
  533. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_free_1801.py +0 -0
  534. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  535. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_drive.py +0 -0
  536. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_drive_queue.py +0 -0
  537. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_escalate.py +0 -0
  538. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_fix_headless_review.py +0 -0
  539. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_gate_a.py +0 -0
  540. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_install_drift.py +0 -0
  541. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_install_skills.py +0 -0
  542. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_issue_create_label.py +0 -0
  543. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_issue_reopen.py +0 -0
  544. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_merge.py +0 -0
  545. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_assign.py +0 -0
  546. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_capture.py +0 -0
  547. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_chat_add_child.py +0 -0
  548. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_dispatch.py +0 -0
  549. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_b.py +0 -0
  550. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_c.py +0 -0
  551. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_order.py +0 -0
  552. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  553. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_ship.py +0 -0
  554. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_network.py +0 -0
  555. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_new_issue_chat.py +0 -0
  556. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_plans.py +0 -0
  557. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_portal.py +0 -0
  558. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_pull_artifact.py +0 -0
  559. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_queue.py +0 -0
  560. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_reattach_sessions.py +0 -0
  561. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_refine_board.py +0 -0
  562. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_preflight.py +0 -0
  563. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_repo_2220.py +0 -0
  564. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_scorecard.py +0 -0
  565. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_set_review_findings.py +0 -0
  566. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_advisory_terminal.py +0 -0
  567. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_merge_queue.py +0 -0
  568. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_provider.py +0 -0
  569. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_review_finalizing.py +0 -0
  570. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_test_failed_tag.py +0 -0
  571. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_usage_limit.py +0 -0
  572. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_sync_comments_873.py +0 -0
  573. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_test_plan.py +0 -0
  574. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_track.py +0 -0
  575. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_tui_update.py +0 -0
  576. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_wait.py +0 -0
  577. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_client_base_install.py +0 -0
  578. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_comments.py +0 -0
  579. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_completion_summary.py +0 -0
  580. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config.py +0 -0
  581. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_acceptance.py +0 -0
  582. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_audit.py +0 -0
  583. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_pricing.py +0 -0
  584. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  585. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_usage_gate.py +0 -0
  586. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_conflict_fix.py +0 -0
  587. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_conflict_fix_semantic.py +0 -0
  588. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test.py +0 -0
  589. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_baseline.py +0 -0
  590. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_routing.py +0 -0
  591. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_toolchain.py +0 -0
  592. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_web_sse_restart_live.py +0 -0
  593. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coordinator_machine.py +0 -0
  594. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cross_platform_imports.py +0 -0
  595. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard.py +0 -0
  596. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_fixture.py +0 -0
  597. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_terminal.py +0 -0
  598. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_terminal_live.py +0 -0
  599. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_db.py +0 -0
  600. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dead_end.py +0 -0
  601. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_db_backup.py +0 -0
  602. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_dist.py +0 -0
  603. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_rollback.py +0 -0
  604. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_drive_queue_unit.py +0 -0
  605. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_manifest.py +0 -0
  606. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_units_lane.py +0 -0
  607. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_web_unit.py +0 -0
  608. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deps.py +0 -0
  609. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_diagnose.py +0 -0
  610. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dispatch.py +0 -0
  611. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dispatch_target_validation.py +0 -0
  612. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dist_name.py +0 -0
  613. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_done_housekeeping.py +0 -0
  614. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive.py +0 -0
  615. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_queue.py +0 -0
  616. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_state.py +0 -0
  617. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_tmux.py +0 -0
  618. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_capability_detection.py +0 -0
  619. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  620. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_image_provenance.py +0 -0
  621. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_errors.py +0 -0
  622. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_events.py +0 -0
  623. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_failure_class.py +0 -0
  624. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_filelock.py +0 -0
  625. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  626. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fix_of_force_override.py +0 -0
  627. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_config_health.py +0 -0
  628. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_health_probes.py +0 -0
  629. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_health_snapshot.py +0 -0
  630. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_freshness.py +0 -0
  631. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_a.py +0 -0
  632. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_b.py +0 -0
  633. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_snapshot_staleness.py +0 -0
  634. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gates.py +0 -0
  635. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  636. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_generated_types_fixture.py +0 -0
  637. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_github_ops.py +0 -0
  638. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_goal.py +0 -0
  639. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_graph_health.py +0 -0
  640. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_graph_selfheal_absent_2237.py +0 -0
  641. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_handoff.py +0 -0
  642. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_checks.py +0 -0
  643. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_cli.py +0 -0
  644. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_cli_graph.py +0 -0
  645. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_config.py +0 -0
  646. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_context.py +0 -0
  647. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_deploy_lane_facts.py +0 -0
  648. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_incident_regression.py +0 -0
  649. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_pypi.py +0 -0
  650. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_registry.py +0 -0
  651. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_timer_active.py +0 -0
  652. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_toolchain.py +0 -0
  653. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_unit_drift.py +0 -0
  654. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_unit_enablement.py +0 -0
  655. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_hooks.py +0 -0
  656. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_human_attended_437.py +0 -0
  657. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_init.py +0 -0
  658. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_integration.py +0 -0
  659. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_briefing_echo.py +0 -0
  660. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_prefill_state.py +0 -0
  661. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_session_relaunch.py +0 -0
  662. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_test_verdict_backstop.py +0 -0
  663. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_token_attribution.py +0 -0
  664. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_worktree.py +0 -0
  665. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_issue_store_seam.py +0 -0
  666. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_liveness_auditor.py +0 -0
  667. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_liveness_notify.py +0 -0
  668. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_machine_pause.py +0 -0
  669. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_merge_queue.py +0 -0
  670. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_merge_verify.py +0 -0
  671. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_chat.py +0 -0
  672. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_dispatch.py +0 -0
  673. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_gate.py +0 -0
  674. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_order.py +0 -0
  675. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_seam.py +0 -0
  676. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_mock_author.py +0 -0
  677. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_model_tiering.py +0 -0
  678. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_models.py +0 -0
  679. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_models_config_labels.py +0 -0
  680. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_needs_attention.py +0 -0
  681. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_network.py +0 -0
  682. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_new_issue_chat.py +0 -0
  683. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_next_release_tag.py +0 -0
  684. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_no_direct_gh_calls.py +0 -0
  685. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_node_shim.py +0 -0
  686. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_baseline.py +0 -0
  687. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_cli.py +0 -0
  688. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_collect.py +0 -0
  689. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_config.py +0 -0
  690. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_drive_seam.py +0 -0
  691. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_isolation.py +0 -0
  692. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_predicate.py +0 -0
  693. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_quiet_hours.py +0 -0
  694. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_service.py +0 -0
  695. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notify.py +0 -0
  696. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notify_drain.py +0 -0
  697. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_openapi.py +0 -0
  698. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_operational_defaults.py +0 -0
  699. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_overlap_fence.py +0 -0
  700. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_overlap_predict.py +0 -0
  701. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_packaged_deploy_units.py +0 -0
  702. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_parentage.py +0 -0
  703. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_paste_landed.py +0 -0
  704. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_pipeline.py +0 -0
  705. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_approve_plan_command.py +0 -0
  706. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_pr_command.py +0 -0
  707. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_review_command.py +0 -0
  708. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_only.py +0 -0
  709. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_parser.py +0 -0
  710. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_platform_paths.py +0 -0
  711. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_bridge.py +0 -0
  712. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_config.py +0 -0
  713. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_sync.py +0 -0
  714. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_pr_body_lint.py +0 -0
  715. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_prereqs.py +0 -0
  716. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_production_db_guard.py +0 -0
  717. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_progress.py +0 -0
  718. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_provider_seam.py +0 -0
  719. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers.py +0 -0
  720. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers_config_labels.py +0 -0
  721. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers_pty.py +0 -0
  722. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_quiet_hours.py +0 -0
  723. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_quiet_hours_store_2146.py +0 -0
  724. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reap_merged_sessions.py +0 -0
  725. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reap_stale_interactive_tick.py +0 -0
  726. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_branch.py +0 -0
  727. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_completions.py +0 -0
  728. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_merges.py +0 -0
  729. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_usage_limit_done.py +0 -0
  730. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_refine_chat.py +0 -0
  731. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_2101.py +0 -0
  732. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  733. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_deadlock_2240.py +0 -0
  734. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_propagate.py +0 -0
  735. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_unified_1242.py +0 -0
  736. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_verify.py +0 -0
  737. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_window.py +0 -0
  738. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_remote_auto_prune.py +0 -0
  739. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_remote_interactive_reaper.py +0 -0
  740. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_edit_2220.py +0 -0
  741. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_graph_fleet_2237.py +0 -0
  742. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_onboard_2220.py +0 -0
  743. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_report_result_push.py +0 -0
  744. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reports.py +0 -0
  745. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry.py +0 -0
  746. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry_advisory_1606.py +0 -0
  747. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry_type_1636.py +0 -0
  748. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_revalidate.py +0 -0
  749. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review.py +0 -0
  750. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_end_review_without_verdict.py +0 -0
  751. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_parse_failure_diagnostic.py +0 -0
  752. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_reaffirm.py +0 -0
  753. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_state.py +0 -0
  754. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_backstop.py +0 -0
  755. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_override_audit.py +0 -0
  756. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_relay.py +0 -0
  757. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_zero_commits.py +0 -0
  758. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_scoped_review_wiring.py +0 -0
  759. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_scorecard.py +0 -0
  760. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_serve.py +0 -0
  761. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_serve_app_board_trim.py +0 -0
  762. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_session.py +0 -0
  763. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_slice_issue_attribution.py +0 -0
  764. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke.py +0 -0
  765. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke_live_checkout_restore.py +0 -0
  766. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke_workflow.py +0 -0
  767. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_spend_ceiling.py +0 -0
  768. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_spend_ceiling_coordinator.py +0 -0
  769. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_split.py +0 -0
  770. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_split_work.py +0 -0
  771. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stage_projection.py +0 -0
  772. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stalled_pipeline.py +0 -0
  773. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_state.py +0 -0
  774. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_state_review_findings_daemon.py +0 -0
  775. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_status_fleet_footer.py +0 -0
  776. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stop_1567.py +0 -0
  777. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stuck.py +0 -0
  778. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_terminal_command.py +0 -0
  779. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_author.py +0 -0
  780. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_chat.py +0 -0
  781. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_orchestrator.py +0 -0
  782. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_report.py +0 -0
  783. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_verdict_parsing.py +0 -0
  784. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_verdict_transcript_floor.py +0 -0
  785. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_board_audit.py +0 -0
  786. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_config_load_1080.py +0 -0
  787. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_daemon_routing_906.py +0 -0
  788. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_tmux_host.py +0 -0
  789. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_tmux_session.py +0 -0
  790. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_transcript_floor.py +0 -0
  791. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage.py +0 -0
  792. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage_limits.py +0 -0
  793. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage_rollup.py +0 -0
  794. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_venv_live_install_2121.py +0 -0
  795. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_version_single_source.py +0 -0
  796. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_watch.py +0 -0
  797. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_events.py +0 -0
  798. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_image_pin_sync.py +0 -0
  799. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_safety.py +0 -0
  800. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_test_scoping.py +0 -0
  801. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worktree.py +0 -0
  802. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  803. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/Cargo.lock +0 -0
  804. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/Cargo.toml +0 -0
  805. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/cargo-config-local-quadraui.toml.example +0 -0
  806. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/audit.rs +0 -0
  807. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/chat.rs +0 -0
  808. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/data.rs +0 -0
  809. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/dialogs.rs +0 -0
  810. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/drive.rs +0 -0
  811. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/drive_queue.rs +0 -0
  812. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/escalation.rs +0 -0
  813. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/events.rs +0 -0
  814. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fixtures.rs +0 -0
  815. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_health.rs +0 -0
  816. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_sessions.rs +0 -0
  817. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_terminals.rs +0 -0
  818. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/format.rs +0 -0
  819. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/milestone_dag.rs +0 -0
  820. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/mod.rs +0 -0
  821. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/msv.rs +0 -0
  822. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/pipeline.rs +0 -0
  823. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/plans.rs +0 -0
  824. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/render.rs +0 -0
  825. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/reports.rs +0 -0
  826. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/sessions.rs +0 -0
  827. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/settings_ui.rs +0 -0
  828. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/sidebar.rs +0 -0
  829. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/terminal.rs +0 -0
  830. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/tests.rs +0 -0
  831. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/types.rs +0 -0
  832. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/workspace.rs +0 -0
  833. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/bin/gtk.rs +0 -0
  834. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/commands.rs +0 -0
  835. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/lib.rs +0 -0
  836. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/main.rs +0 -0
  837. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/settings.rs +0 -0
  838. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/tests/acceptance.rs +0 -0
  839. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/tests/cli.rs +0 -0
  840. {code_coordinator-0.5.95 → code_coordinator-0.5.96}/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.95
3
+ Version: 0.5.96
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.95
3
+ Version: 0.5.96
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.95",
2
+ "tag": "0.5.96",
3
3
  "distance": 0,
4
- "node": "g100d9f74dd79bd61b86812c4dd3930e4cc7079ce",
4
+ "node": "g312293364325c98de0888c4de55e3f5f168662dd",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-15"
@@ -371,6 +371,66 @@ def _interactive_session_busy(config) -> list:
371
371
  return busy
372
372
 
373
373
 
374
+ def _paused_machine_busy(config) -> list:
375
+ """Operator pause / quiet-hours state as host-pinned `Busy` signals (#2174).
376
+
377
+ `release_propagate.assess_quiescence`'s ``extra_busy`` docstring has
378
+ named "a machine paused by an operator" as a seam producer since
379
+ #1835, but until now nothing fed it one: `coord pause <machine>` said
380
+ "leave this box alone" and `coord release propagate` read the machine
381
+ as quiescent anyway, restarting `coord-agent` (and, on the daemon
382
+ host, `coord-serve`) on it regardless.
383
+
384
+ `coord.machine_pause.follow_on_paused_set()` is explicit `coord pause`
385
+ UNION any quiet-hours window currently covering the machine — both
386
+ genuine "an operator or an operator-set policy said stay off this
387
+ box" facts — MINUS #2101 release cordons. Cordons are deliberately
388
+ excluded: a cordon is THIS command's own drain mechanism, set to make
389
+ a behind host quiescent, not a sign that it already is one; feeding a
390
+ cordon back in here as "busy" would make it defer the very roll it
391
+ exists to unblock.
392
+
393
+ Thin-client aware for free: `follow_on_paused_set` routes through the
394
+ daemon's `/pause` endpoint when a board service is configured (#1563),
395
+ so this reads the one copy of pause state that actually governs
396
+ dispatch — same as every other pause-aware call site in the fleet.
397
+ """
398
+ from coord.machine_pause import ( # noqa: PLC0415
399
+ describe_pause_state,
400
+ effective_quiet_hours,
401
+ follow_on_paused_set,
402
+ )
403
+ from coord import release_propagate as rp # noqa: PLC0415
404
+
405
+ machines = list(getattr(config, "machines", ()) or ())
406
+ if not machines:
407
+ return []
408
+ paused = follow_on_paused_set(machines)
409
+ if not paused:
410
+ return []
411
+ quiet_hours = effective_quiet_hours(machines)
412
+ busy = []
413
+ for machine in machines:
414
+ if machine.name not in paused:
415
+ continue
416
+ state = describe_pause_state(machine, paused, quiet_hours=quiet_hours)
417
+ if state is None:
418
+ continue # defensive: membership in `paused` implies a reason
419
+ detail = (
420
+ f"quiet hours {state.detail}" if state.kind == "quiet"
421
+ else "explicit `coord pause`"
422
+ )
423
+ busy.append(
424
+ rp.Busy(
425
+ kind="machine paused",
426
+ subject=machine.name,
427
+ detail=detail,
428
+ host=machine.name,
429
+ )
430
+ )
431
+ return busy
432
+
433
+
374
434
  def _daemon_machine_name(
375
435
  config, override: str | None, machine_health: dict | None = None
376
436
  ) -> str | None:
@@ -638,6 +698,10 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
638
698
  # probe `coord sessions --remote` uses, so a live session defers a roll
639
699
  # exactly like a live headless assignment does.
640
700
  extra_busy.extend(_interactive_session_busy(config))
701
+ # #2174: nor can it see `coord pause`/quiet-hours state — feed the same
702
+ # seam from the daemon-aware pause store, so an operator-paused machine
703
+ # defers exactly like a live assignment does instead of reading idle.
704
+ extra_busy.extend(_paused_machine_busy(config))
641
705
  quiescence = rp.assess_quiescence(
642
706
  queue_entries=board.get("drive_queue") or [],
643
707
  assignments=board.get("assignments") or [],
@@ -2163,14 +2227,19 @@ def _drain(
2163
2227
  #2228: ``extra_busy_fetch`` re-probes live interactive sessions on
2164
2228
  every poll (not just once) — a session that ends mid-drain should let
2165
2229
  the daemon host clear within THIS wait, not only on the next `coord
2166
- release propagate` tick. Deliberately keyed off the explicit *config*
2167
- param, never an implicit ``_load_config(config_path)`` fallback: this
2168
- function is called with ``config_path=None`` from unit tests that
2169
- inject their own clock/board silently resolving a real
2170
- ``coordinator.yml`` (and then SSH-probing whatever machines it names)
2230
+ release propagate` tick. #2174: the same default also re-reads
2231
+ `coord pause`/quiet-hours state on every poll, for the same reason
2232
+ an operator pausing the daemon host mid-drain must stop the drain from
2233
+ ever reporting "clear", and an operator lifting a pause mid-drain
2234
+ should let it clear within THIS wait rather than the next tick.
2235
+ Deliberately keyed off the explicit *config* param, never an implicit
2236
+ ``_load_config(config_path)`` fallback: this function is called with
2237
+ ``config_path=None`` from unit tests that inject their own clock/board
2238
+ — silently resolving a real ``coordinator.yml`` (and then SSH-probing
2239
+ whatever machines it names, or reading this host's own pause store)
2171
2240
  the moment ``config`` is omitted would make this loop non-hermetic by
2172
- default. No *config* simply means "no interactive-session signal this
2173
- call" — the caller opts in by passing one, as the real
2241
+ default. No *config* simply means "no interactive-session or pause
2242
+ signal this call" — the caller opts in by passing one, as the real
2174
2243
  ``coord release nightly-window`` call site does.
2175
2244
  """
2176
2245
  import time as _time # noqa: PLC0415
@@ -2184,7 +2253,12 @@ def _drain(
2184
2253
  fetch_fn = board_fetch or _fetch_board
2185
2254
  if extra_busy_fetch is None:
2186
2255
  if config is not None:
2187
- extra_busy_fetch = lambda: _interactive_session_busy(config) # noqa: E731
2256
+ # #2174: paused/quiet-hours state, same as the top-level
2257
+ # `propagate` call site — a paused daemon host must keep the
2258
+ # drain from ever reading "clear" just because tmux is quiet.
2259
+ extra_busy_fetch = lambda: ( # noqa: E731
2260
+ _interactive_session_busy(config) + _paused_machine_busy(config)
2261
+ )
2188
2262
  else:
2189
2263
  extra_busy_fetch = lambda: [] # noqa: E731
2190
2264
 
@@ -785,7 +785,29 @@ def assess_quiescence(
785
785
  #2228: the interactive-session half is wired from
786
786
  ``coord.commands.release._interactive_session_busy``, fed by the same
787
787
  fleet-wide tmux sweep ``coord sessions --remote`` renders — until then
788
- this half of the seam existed but nothing ever fed it.
788
+ this half of the seam existed but nothing ever fed it. #2174: the
789
+ operator-pause half is wired from
790
+ ``coord.commands.release._paused_machine_busy`` — a machine under an
791
+ explicit ``coord pause`` or an active quiet-hours window (but NOT a
792
+ #2101 release cordon: that is this module's own drain mechanism, not a
793
+ sign a host is already quiescent, and feeding it back in here would
794
+ make a cordon defer the very roll it exists to unblock) becomes a
795
+ host-pinned :class:`Busy`. Tmux liveness genuinely has no fleet-wide
796
+ read (it is a LOCAL fact, #1870, and propagation may run from any
797
+ host) — pause state does, because it is daemon-aware
798
+ (``coord.machine_pause``) the same way the board is, so both callers
799
+ can read it cheaply with no new probe.
800
+
801
+ Because a :class:`Busy` carries a host, #2067's per-host quiescence
802
+ does the obvious thing for a paused NON-daemon host: it defers only
803
+ that host, and the rest of the fleet still rolls. A paused DAEMON host
804
+ is different on purpose — the daemon-leads invariant (see the module
805
+ docstring's LANE ORDER) already defers the WHOLE run whenever the
806
+ daemon host is itself busy and behind, and a pause is just one more
807
+ way for the daemon host to be busy. So ``coord pause <daemon-host>``
808
+ halting all propagation, not just that host's own lane, is read as the
809
+ correct interpretation of "leave this box alone" applied to the one
810
+ host every other host's roll depends on — not an emergent accident.
789
811
 
790
812
  #2110: a ``running`` queue row is not, on its own, proof of anything —
791
813
  the reconciler that would have moved it to ``done`` lives inside
@@ -26,9 +26,11 @@ import json
26
26
  import pytest
27
27
  from click.testing import CliRunner
28
28
 
29
+ from coord import machine_pause as mp
29
30
  from coord import release_propagate as rp
30
31
  from coord.cli import main
31
32
  from coord.commands import release as release_cmd
33
+ from coord.config import load as load_config
32
34
  from coord.drive_queue import HOLD_FIRED, STATE_RUNNING
33
35
 
34
36
  # Captured at import time, before any fixture has a chance to monkeypatch
@@ -40,6 +42,42 @@ from coord.drive_queue import HOLD_FIRED, STATE_RUNNING
40
42
  _REAL_INTERACTIVE_SESSION_BUSY = release_cmd._interactive_session_busy
41
43
 
42
44
 
45
+ @pytest.fixture(autouse=True)
46
+ def _own_pause_store(tmp_path, monkeypatch):
47
+ """Give every test in this module its own pause store (#2174).
48
+
49
+ `coord release propagate` both READS the pause store (#2174's
50
+ `_paused_machine_busy`) and WRITES it (#2101's cordons), and several
51
+ tests below seed it with `mp.local_pause()` / `mp.local_set_cordon()`.
52
+ That store is per-`$HOME`, not per-test — so without this, one test's
53
+ pause leaks into every test that runs after it in the same session.
54
+
55
+ `conftest._no_real_pause_store` does not cover this: it redirects only
56
+ when the resolved path lands under the REAL home, on the assumption
57
+ that a redirected `$HOME` was redirected BY THE TEST, per test. That
58
+ assumption is false under `scripts/run_tests_in_populated_home.sh`
59
+ (#2170), where `$HOME` is one throwaway thin-client directory shared by
60
+ the WHOLE run: the guard stands down and the store becomes session
61
+ state. That is exactly how this module went green on `ubuntu-latest`
62
+ and red on the `populated-home` job — a phantom `machine paused:
63
+ server` in tests that never paused anything, deferring rolls that
64
+ should have proceeded.
65
+
66
+ Redirecting `$HOME` (rather than patching `_state_path`) is what every
67
+ other pause-touching module here already does — `test_machine_pause`,
68
+ `test_quiet_hours`, `test_release_cordon_2101`,
69
+ `test_release_cordon_deadlock_2240` — and it also pins the thin-client
70
+ decision: a tmp `$HOME` has no `client.toml`, so this module resolves
71
+ board-service the same way in both CI jobs instead of inheriting
72
+ whichever shape the ambient home happens to have.
73
+ """
74
+ home = tmp_path / "home"
75
+ (home / ".coord").mkdir(parents=True)
76
+ monkeypatch.setenv("HOME", str(home))
77
+ monkeypatch.setenv("USERPROFILE", str(home))
78
+ return home
79
+
80
+
43
81
  @pytest.fixture()
44
82
  def state_dir(tmp_path, monkeypatch):
45
83
  """Point the propagation journal at a tmp dir, never the real ~/.coord."""
@@ -608,6 +646,129 @@ def test_a_failing_session_probe_does_not_defer_the_fleet(
608
646
  assert _records(state_dir)[0]["status"] == rp.STATUS_VERIFIED
609
647
 
610
648
 
649
+ # ──────────────────────────────────────────────────────────────────────────
650
+ # #2174: `coord pause <machine>` says "leave this box alone" — the board has
651
+ # no `paused` column on any row, so it has to reach `assess_quiescence`
652
+ # through the same `extra_busy` seam as a live interactive session.
653
+ # ──────────────────────────────────────────────────────────────────────────
654
+
655
+
656
+ def test_a_paused_non_daemon_host_defers_alone_while_the_daemon_rolls(
657
+ valid_config_path, state_dir, no_network, monkeypatch
658
+ ):
659
+ """`laptop` is paused; `server` (the daemon) is not. `server` must roll
660
+ and verify while `laptop`'s lane is recorded as a per-host deferral
661
+ naming the pause, not attempted — the same shape as a live headless
662
+ assignment (#2067) or a live interactive session (#2228). This is the
663
+ exact regression #2174 reports: before the fix, a paused machine read as
664
+ idle and `coord release propagate` rolled it anyway."""
665
+ mp.local_pause("laptop")
666
+ calls = _stub_lanes(monkeypatch)
667
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
668
+ daemon="server")
669
+ result = CliRunner().invoke(
670
+ main,
671
+ ["release", "propagate", "--config", str(valid_config_path),
672
+ "--target", "0.4.111"],
673
+ )
674
+ assert result.exit_code == 0, result.output
675
+ assert any(host == "server" for _lane, host in calls)
676
+ assert not any(host == "laptop" for _lane, host in calls)
677
+
678
+ record = _records(state_dir)[0]
679
+ assert record["status"] == rp.STATUS_VERIFIED
680
+ laptop_lane = next(l for l in record["lanes"] if l["host"] == "laptop")
681
+ assert laptop_lane["lane"] == "-"
682
+ assert laptop_lane["ok"] is None
683
+ assert "deferred" in laptop_lane["detail"]
684
+ assert "machine paused" in laptop_lane["detail"]
685
+ assert "laptop" in laptop_lane["detail"]
686
+
687
+
688
+ def test_a_paused_host_is_visible_in_a_dry_run_plan(
689
+ valid_config_path, state_dir, no_network, monkeypatch
690
+ ):
691
+ """Acceptance: `coord release propagate --dry-run` against a board
692
+ where one machine is paused reports that machine as busy and excludes
693
+ it from the rollable set, while other hosts remain rollable."""
694
+ mp.local_pause("laptop")
695
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
696
+ daemon="server")
697
+ result = CliRunner().invoke(
698
+ main,
699
+ ["release", "propagate", "--config", str(valid_config_path),
700
+ "--target", "0.4.111", "--dry-run"],
701
+ )
702
+ assert result.exit_code == 0, result.output
703
+ would_roll_lines = "\n".join(
704
+ l for l in result.output.splitlines() if "would roll" in l
705
+ )
706
+ assert "server" in would_roll_lines
707
+ assert "laptop" not in would_roll_lines
708
+ assert "machine paused" in result.output
709
+ assert "explicit `coord pause`" in result.output
710
+
711
+
712
+ def test_a_paused_daemon_host_defers_the_whole_run(
713
+ valid_config_path, state_dir, no_network, monkeypatch
714
+ ):
715
+ """#2174 item 2: pausing the DAEMON host defers the whole run, not just
716
+ that host's own lane — the daemon-leads invariant already defers
717
+ everything when the daemon is busy and behind, and a pause is one more
718
+ way for it to be busy. The recorded reason must name the pause, not a
719
+ generic 'busy' string."""
720
+ mp.local_pause("server")
721
+ monkeypatch.setattr(
722
+ release_cmd, "_roll_python",
723
+ lambda *a, **k: pytest.fail("a paused daemon must roll nothing, anywhere"),
724
+ )
725
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
726
+ daemon="server")
727
+ result = CliRunner().invoke(
728
+ main,
729
+ ["release", "propagate", "--config", str(valid_config_path),
730
+ "--target", "0.4.111"],
731
+ )
732
+ assert result.exit_code == 0, result.output
733
+ record = _records(state_dir)[0]
734
+ assert record["status"] == rp.STATUS_DEFERRED
735
+ assert record["lanes"] == []
736
+ assert "machine paused" in record["quiescence"]["reason"]
737
+ assert "server" in record["quiescence"]["reason"]
738
+
739
+
740
+ def test_an_unpaused_fleet_is_unaffected_by_the_pause_seam(
741
+ valid_config_path, state_dir, no_network, monkeypatch
742
+ ):
743
+ """Acceptance: an unpaused fleet gets no new busy signal from #2174 —
744
+ `quiescent` and the roll outcome are unchanged from before the fix."""
745
+ calls = _stub_lanes(monkeypatch)
746
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
747
+ daemon="server")
748
+ result = CliRunner().invoke(
749
+ main,
750
+ ["release", "propagate", "--config", str(valid_config_path),
751
+ "--target", "0.4.111"],
752
+ )
753
+ assert result.exit_code == 0, result.output
754
+ assert {host for _lane, host in calls} == {"laptop", "server"}
755
+ record = _records(state_dir)[0]
756
+ assert record["status"] == rp.STATUS_VERIFIED
757
+ assert record["quiescence"]["quiescent"] is True
758
+
759
+
760
+ def test_a_release_cordon_alone_is_not_read_as_an_operator_pause(valid_config_path):
761
+ """A #2101 release cordon is this command's OWN drain mechanism, not a
762
+ sign a host is already quiescent — feeding it back in through
763
+ `_paused_machine_busy` would make a cordon defer the very roll it exists
764
+ to unblock. Cordoning `laptop` (with no explicit `coord pause` and no
765
+ quiet-hours window) must not, on its own, produce a `machine paused`
766
+ busy signal."""
767
+ mp.local_set_cordon("laptop", target_version="0.4.110")
768
+ config = load_config(str(valid_config_path))
769
+ assert release_cmd._paused_machine_busy(config) == []
770
+
771
+
611
772
  # ── the roll, the final gate, and the rollback on red ────────────────────
612
773
 
613
774
 
@@ -36,6 +36,28 @@ from coord.cli import main
36
36
  from coord.commands import release as release_cmd
37
37
 
38
38
 
39
+ @pytest.fixture(autouse=True)
40
+ def _own_pause_store(tmp_path, monkeypatch):
41
+ """Give every test in this module its own pause store (#2174).
42
+
43
+ `test_drain_is_blocked_by_a_paused_daemon_host` calls
44
+ `mp.local_pause("server")`, and that store is per-`$HOME`, not
45
+ per-test. `conftest._no_real_pause_store` redirects only when the
46
+ resolved path lands under the REAL home, so under
47
+ `scripts/run_tests_in_populated_home.sh` (#2170) — where `$HOME` is one
48
+ throwaway directory shared by the whole run — the pause survives this
49
+ test and every later one reads a machine it never paused. See
50
+ `tests/test_cli_release_propagate.py::_own_pause_store` for the full
51
+ write-up; this is the same hazard in the sibling module that shares the
52
+ seam.
53
+ """
54
+ home = tmp_path / "home"
55
+ (home / ".coord").mkdir(parents=True)
56
+ monkeypatch.setenv("HOME", str(home))
57
+ monkeypatch.setenv("USERPROFILE", str(home))
58
+ return home
59
+
60
+
39
61
  @pytest.fixture()
40
62
  def state_dir(tmp_path, monkeypatch):
41
63
  """Point the window journal at a tmp dir, never the real ~/.coord."""
@@ -597,6 +619,36 @@ def test_drain_treats_an_unreadable_board_as_fleet_wide_busy():
597
619
  assert "board unreadable" in outcome.detail
598
620
 
599
621
 
622
+ def test_drain_is_blocked_by_a_paused_daemon_host(valid_config_path, monkeypatch):
623
+ """#2174: `_drain`'s default `extra_busy_fetch` — the one the real
624
+ `coord release nightly-window` call site uses (it passes `config=`) —
625
+ must also see `coord pause`/quiet-hours state, not just tmux. A paused
626
+ daemon host must never read as 'drained' just because the board and
627
+ tmux are both quiet; before the fix nothing here ever consulted the
628
+ pause store at all."""
629
+ from coord import machine_pause as mp
630
+ from coord.config import load as load_config
631
+
632
+ config = load_config(str(valid_config_path))
633
+ monkeypatch.setattr(release_cmd, "_interactive_session_busy", lambda config: [])
634
+ mp.local_pause("server")
635
+
636
+ outcome = release_cmd._drain(
637
+ daemon_host="server",
638
+ config_path=None,
639
+ config=config,
640
+ deadline=10.0,
641
+ poll_interval=5.0,
642
+ reconcile=lambda: None,
643
+ board_fetch=lambda: ({}, None),
644
+ now=(lambda ts=[0.0]: (ts.__setitem__(0, ts[0] + 5.0), ts[0])[1]),
645
+ sleep=lambda s: None,
646
+ )
647
+ assert outcome.drained is False
648
+ assert "machine paused" in outcome.detail
649
+ assert "server" in outcome.detail
650
+
651
+
600
652
  # ── #2187: a VERIFIED, exit-0 propagate must never be reported as
601
653
  # `propagate-failed` — the whole bug this issue is about ─────────────────
602
654
  #