code-coordinator 0.5.257__tar.gz → 0.5.258__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 (868) hide show
  1. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/release.py +26 -1
  7. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/release_propagate.py +181 -33
  8. code_coordinator-0.5.258/tests/test_release_roll_between_legs_2854.py +293 -0
  9. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/.gitignore +0 -0
  24. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/GOAL.md +0 -0
  26. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/LICENSE +0 -0
  27. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/README.md +0 -0
  29. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/client.py +0 -0
  62. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/milestone.py +0 -0
  78. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/plan_followup.py +0 -0
  79. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/plans.py +0 -0
  80. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/portal.py +0 -0
  81. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/pr.py +0 -0
  82. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/repo.py +0 -0
  83. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/report.py +0 -0
  84. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/review.py +0 -0
  85. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/scorecard.py +0 -0
  86. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/sessions.py +0 -0
  87. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/setup.py +0 -0
  88. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/status.py +0 -0
  89. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/terminal.py +0 -0
  90. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/test_gate.py +0 -0
  91. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/commands/tui.py +0 -0
  92. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/comments.py +0 -0
  93. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/config.py +0 -0
  94. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/config_reload.py +0 -0
  95. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/confirm_test.py +0 -0
  96. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/db.py +0 -0
  104. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dead_end.py +0 -0
  105. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/decomposition_chat.py +0 -0
  106. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/README.md +0 -0
  107. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-agent.service +0 -0
  108. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-db-backup.service +0 -0
  109. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-db-backup.sh +0 -0
  110. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-db-backup.timer +0 -0
  111. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-drive-queue.service +0 -0
  112. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-drive-queue.timer +0 -0
  113. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-failure-notify.service +0 -0
  114. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-fleet-watchdog.service +0 -0
  115. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  116. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-notify.service +0 -0
  117. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-notify.timer +0 -0
  118. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-release-propagate.service +0 -0
  119. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-release-propagate.timer +0 -0
  120. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-release-window.service +0 -0
  121. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-release-window.timer +0 -0
  122. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-serve.service +0 -0
  123. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-web-dist-build.service +0 -0
  124. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-web-dist-build.timer +0 -0
  125. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy/coord-web.service +0 -0
  126. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy_manifest.py +0 -0
  127. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deploy_units.py +0 -0
  128. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/deps.py +0 -0
  129. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/diagnose.py +0 -0
  130. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dispatch.py +0 -0
  131. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/dist_name.py +0 -0
  132. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/drive.py +0 -0
  133. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/drive_queue.py +0 -0
  134. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/drive_state.py +0 -0
  135. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/events.py +0 -0
  136. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/failure_class.py +0 -0
  137. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/filelock.py +0 -0
  138. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/fleet_config_health.py +0 -0
  139. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/forge_availability.py +0 -0
  140. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/freshness.py +0 -0
  141. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/gate_a.py +0 -0
  142. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/gate_b.py +0 -0
  143. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/gate_snapshot.py +0 -0
  144. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/gates.py +0 -0
  145. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/github_ops.py +0 -0
  146. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/github_throttle.py +0 -0
  147. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/goal.py +0 -0
  148. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/graph_health.py +0 -0
  149. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/__init__.py +0 -0
  150. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/aggregate.py +0 -0
  151. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/__init__.py +0 -0
  152. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/agent_install.py +0 -0
  153. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/cargo_targets.py +0 -0
  154. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/claude_binary.py +0 -0
  155. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/coord_web_ci_pin.py +0 -0
  156. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/deploy_lane_facts.py +0 -0
  157. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/disk.py +0 -0
  158. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/fleet_board.py +0 -0
  159. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  160. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/fleet_phantom.py +0 -0
  161. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/fleet_unit_drift.py +0 -0
  162. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/graph.py +0 -0
  163. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/graphify_cli.py +0 -0
  164. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/index_lock.py +0 -0
  165. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/plan_usage.py +0 -0
  166. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/release_cordon.py +0 -0
  167. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/repo_state.py +0 -0
  168. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/spawned_coord.py +0 -0
  169. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/stalled_pipeline.py +0 -0
  170. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/timer_active.py +0 -0
  171. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/toolchain.py +0 -0
  172. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/unit_drift.py +0 -0
  173. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/unit_enablement.py +0 -0
  174. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/checks/worktrees.py +0 -0
  175. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/cli.py +0 -0
  176. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/context.py +0 -0
  177. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/fleet_snapshot.py +0 -0
  178. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/models.py +0 -0
  179. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/pypi.py +0 -0
  180. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/registry.py +0 -0
  181. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/render.py +0 -0
  182. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/health/units.py +0 -0
  183. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/hooks.py +0 -0
  184. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/housekeeping.py +0 -0
  185. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/interactive.py +0 -0
  186. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/issue_store.py +0 -0
  187. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/liveness_auditor.py +0 -0
  188. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/machine_pause.py +0 -0
  189. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/merge_queue.py +0 -0
  190. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/milestone_chat.py +0 -0
  191. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/milestone_dispatch.py +0 -0
  192. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/milestone_gate.py +0 -0
  193. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/milestone_order.py +0 -0
  194. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/mock_author.py +0 -0
  195. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/models.py +0 -0
  196. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/network.py +0 -0
  197. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/new_issue_chat.py +0 -0
  198. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/__init__.py +0 -0
  199. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/baseline.py +0 -0
  200. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/cli.py +0 -0
  201. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/collect.py +0 -0
  202. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/digest.py +0 -0
  203. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/models.py +0 -0
  204. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/predicate.py +0 -0
  205. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/service.py +0 -0
  206. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/store.py +0 -0
  207. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notifier/transport.py +0 -0
  208. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/notify.py +0 -0
  209. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/openapi.py +0 -0
  210. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/overlap_fence.py +0 -0
  211. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/overlap_predict.py +0 -0
  212. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/parentage.py +0 -0
  213. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/parentage_github.py +0 -0
  214. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/pipeline.py +0 -0
  215. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/plan_parser.py +0 -0
  216. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/plans.py +0 -0
  217. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/platform_paths.py +0 -0
  218. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/portal_bridge.py +0 -0
  219. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/portal_store.py +0 -0
  220. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/portal_sync.py +0 -0
  221. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/pr_body_lint.py +0 -0
  222. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/prereqs.py +0 -0
  223. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/progress.py +0 -0
  224. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/providers/__init__.py +0 -0
  225. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/providers/base.py +0 -0
  226. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/providers/claude.py +0 -0
  227. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/providers/claude_pty.py +0 -0
  228. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/providers/opencode.py +0 -0
  229. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/queue_diagnose.py +0 -0
  230. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/reconcile.py +0 -0
  231. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/reconcile_tick.py +0 -0
  232. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/refine_chat.py +0 -0
  233. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/release_cordon.py +0 -0
  234. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/release_verify.py +0 -0
  235. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/release_window.py +0 -0
  236. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/repo_edit.py +0 -0
  237. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/repo_onboard.py +0 -0
  238. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/reports.py +0 -0
  239. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/revalidate.py +0 -0
  240. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/review.py +0 -0
  241. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/scorecard.py +0 -0
  242. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/self_health.py +0 -0
  243. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/serve_app.py +0 -0
  244. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  245. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  246. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  247. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  248. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  249. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/portal-followup/SKILL.md +0 -0
  250. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  251. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  252. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/skills/update-issue/SKILL.md +0 -0
  253. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/smoke.py +0 -0
  254. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/spend_ceiling.py +0 -0
  255. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/split_work.py +0 -0
  256. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/sql.py +0 -0
  257. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/stage_projection.py +0 -0
  258. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/state.py +0 -0
  259. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/test_author.py +0 -0
  260. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/test_chat.py +0 -0
  261. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/test_orchestrator.py +0 -0
  262. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/test_report.py +0 -0
  263. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/tui_release.py +0 -0
  264. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/usage.py +0 -0
  265. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/usage_limits.py +0 -0
  266. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/usage_rollup.py +0 -0
  267. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coord/worker_events.py +0 -0
  268. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/coordinator.example.yml +0 -0
  269. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-agent.service +0 -0
  270. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-db-backup.service +0 -0
  271. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-db-backup.sh +0 -0
  272. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-db-backup.timer +0 -0
  273. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-drive-queue.service +0 -0
  274. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-drive-queue.timer +0 -0
  275. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-failure-notify.service +0 -0
  276. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-failure-notify.sh +0 -0
  277. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-fleet-watchdog.service +0 -0
  278. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-fleet-watchdog.timer +0 -0
  279. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-notify.service +0 -0
  280. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-notify.timer +0 -0
  281. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-release-propagate.service +0 -0
  282. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-release-propagate.timer +0 -0
  283. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-release-window.service +0 -0
  284. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-release-window.timer +0 -0
  285. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-serve.service +0 -0
  286. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-web-dist-build.service +0 -0
  287. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-web-dist-build.sh +0 -0
  288. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-web-dist-build.timer +0 -0
  289. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-web-rollback.sh +0 -0
  290. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/coord-web.service +0 -0
  291. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/deploy/node-shim.sh +0 -0
  292. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  293. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ADR_COORD_WEB_CI.md +0 -0
  294. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ADR_COORD_WEB_DIST.md +0 -0
  295. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/AGENT_OPERATIONS.md +0 -0
  296. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ARCHITECTURE.md +0 -0
  297. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ARCH_SECURITY_GATES.md +0 -0
  298. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/COCKPIT.md +0 -0
  299. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/CONTROL_CENTER.md +0 -0
  300. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/COST_DISCIPLINE.md +0 -0
  301. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/CROSS_PLATFORM.md +0 -0
  302. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/CUSTOMER_FACING_APPS.md +0 -0
  303. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/CUSTOMER_PORTAL.md +0 -0
  304. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/DRIVE_QUEUE.md +0 -0
  305. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/EPHEMERAL_WORKERS.md +0 -0
  306. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/FORGE_MIGRATION.md +0 -0
  307. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/GRAPHIFY_SETUP.md +0 -0
  308. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ISSUE_GUIDANCE.md +0 -0
  309. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/MAC_MINI.md +0 -0
  310. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  311. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/NOTIFIER.md +0 -0
  312. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/OPENCODE_VERIFICATION.md +0 -0
  313. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/OPERATING_GOTCHAS.md +0 -0
  314. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/OPERATOR_GUIDES.md +0 -0
  315. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/ORACLE_LOOP.md +0 -0
  316. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/PHONE_WEBAPP.md +0 -0
  317. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/PIPELINE_V2.md +0 -0
  318. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/PLATFORM_EVOLUTION.md +0 -0
  319. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/SECOND_BACKEND.md +0 -0
  320. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/STORE_SERVICE.md +0 -0
  321. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  322. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/WEB_CONTROL_CENTER.md +0 -0
  323. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/WSL_WINDOWS_WORKER.md +0 -0
  324. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/mocks/web/README.md +0 -0
  325. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/mocks/web/_tokens.css +0 -0
  326. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/mocks/web/issue-detail.html +0 -0
  327. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/mocks/web/pipeline-narrow.html +0 -0
  328. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/docs/mocks/web/pipeline-wide.html +0 -0
  329. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/graphify-out/.gitignore +0 -0
  330. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/install-agent.sh +0 -0
  331. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/pyproject.toml +0 -0
  332. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/audit_review_verdict_overrides.py +0 -0
  333. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  334. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/build-worker-image.sh +0 -0
  335. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/coordinator-machine.py +0 -0
  336. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/epic-down.sh +0 -0
  337. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/epic-up.sh +0 -0
  338. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/preflight.sh +0 -0
  339. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/provision-worker.sh +0 -0
  340. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  341. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  342. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/azure-workers/verify-github-token.sh +0 -0
  343. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/check_gh_argv_containment.py +0 -0
  344. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/codegen.py +0 -0
  345. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/coord-test-runner.sh +0 -0
  346. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/coord-venv-rollback.sh +0 -0
  347. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/drive-batch.sh +0 -0
  348. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/fleet_watchdog.py +0 -0
  349. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/gen_board_fixture.py +0 -0
  350. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/gen_mock_index.py +0 -0
  351. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/next_release_tag.py +0 -0
  352. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/run_tests_in_populated_home.sh +0 -0
  353. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/run_tests_without_gh.sh +0 -0
  354. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/smoke_437_interactive.py +0 -0
  355. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/verify_878_review_capture.py +0 -0
  356. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/verify_release_published.py +0 -0
  357. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/scripts/verify_release_wheel.py +0 -0
  358. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/setup.cfg +0 -0
  359. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/SMOKE_SET.md +0 -0
  360. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/__init__.py +0 -0
  361. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  362. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/contract.md +0 -0
  363. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/manifest.yml +0 -0
  364. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  365. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  366. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  367. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  368. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-37/conftest.py +0 -0
  369. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-37/contract.md +0 -0
  370. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-37/manifest.yml +0 -0
  371. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  372. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  373. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/contract.md +0 -0
  374. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/manifest.yml +0 -0
  375. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  376. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  377. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  378. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  379. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  380. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  381. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  382. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  383. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  384. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  385. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/contract.md +0 -0
  386. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  387. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  388. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/manifest.yml +0 -0
  389. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-51/tsconfig.json +0 -0
  391. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  392. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  393. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  394. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/contract.md +0 -0
  395. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  396. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/manifest.yml +0 -0
  397. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  398. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  399. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  400. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  401. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  402. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  403. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  404. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  405. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  406. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  407. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  408. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  409. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/contract.md +0 -0
  410. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  411. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/manifest.yml +0 -0
  412. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  413. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  414. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  415. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  416. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  417. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  418. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  419. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/conftest.py +0 -0
  420. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/board-pipeline-basic.json +0 -0
  421. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  422. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  423. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  424. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  425. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/all_pass.json +0 -0
  426. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  427. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/mixed_fail.json +0 -0
  428. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  429. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  430. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/skip.json +0 -0
  431. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/playwright/truncated.json +0 -0
  432. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  433. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  434. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  435. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  436. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  437. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  438. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  439. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  440. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_acceptance.py +0 -0
  441. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_acceptance_drivers.py +0 -0
  442. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent.py +0 -0
  443. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_api_error.py +0 -0
  444. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_app.py +0 -0
  445. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_branch_base.py +0 -0
  446. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_branch_capture.py +0 -0
  447. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_config_free_1712.py +0 -0
  448. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_deploy_units_endpoint.py +0 -0
  449. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_dirty_worktree.py +0 -0
  450. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  451. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_graph_self_heal.py +0 -0
  452. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_health_h3.py +0 -0
  453. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_idle_restart.py +0 -0
  454. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_push_failure.py +0 -0
  455. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_reap.py +0 -0
  456. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_repos_and_pull.py +0 -0
  457. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_restart_services_endpoint.py +0 -0
  458. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_skills_self_heal.py +0 -0
  459. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_startup_diagnostics.py +0 -0
  460. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_update.py +0 -0
  461. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_update_bluegreen.py +0 -0
  462. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_usage_limit.py +0 -0
  463. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_agent_zero_commit.py +0 -0
  464. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ambient_home_isolation.py +0 -0
  465. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_approve_dependency_busy_2804.py +0 -0
  466. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_approve_reject_plan.py +0 -0
  467. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_approve_usage_gate.py +0 -0
  468. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_approved_work_2532.py +0 -0
  469. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_assignment_already_recorded_daemon.py +0 -0
  470. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_audit_log.py +0 -0
  471. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_audit_outcome.py +0 -0
  472. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_audit_query.py +0 -0
  473. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_auto_loop.py +0 -0
  474. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_auto_release_publish_2035.py +0 -0
  475. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_base_checkout_restore.py +0 -0
  476. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_block_log.py +0 -0
  477. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_cap_762.py +0 -0
  478. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_fixture.py +0 -0
  479. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_read_path.py +0 -0
  480. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_schema.py +0 -0
  481. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_service.py +0 -0
  482. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_state.py +0 -0
  483. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_board_wire.py +0 -0
  484. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_brain.py +0 -0
  485. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_branch_model.py +0 -0
  486. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_bug_intake.py +0 -0
  487. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_build_worker_image_env_update.py +0 -0
  488. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cargo_cache.py +0 -0
  489. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_check_gh_argv_containment.py +0 -0
  490. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ci_acceptance_gate_1950.py +0 -0
  491. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ci_fix.py +0 -0
  492. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ci_gitlab.py +0 -0
  493. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ci_parity_2091.py +0 -0
  494. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_ci_store.py +0 -0
  495. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_claim.py +0 -0
  496. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_claude_md_budget.py +0 -0
  497. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_acceptance.py +0 -0
  498. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_assign.py +0 -0
  499. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  500. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_assign_interactive_remote.py +0 -0
  501. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_assign_provider.py +0 -0
  502. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  503. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_audit.py +0 -0
  504. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_chat_continue.py +0 -0
  505. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_decide.py +0 -0
  506. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_diagnose_config_provenance.py +0 -0
  507. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_diagnose_forge_availability.py +0 -0
  508. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_diagnose_graph.py +0 -0
  509. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_diagnose_self.py +0 -0
  510. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_doctor.py +0 -0
  511. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_doctor_config_free_1801.py +0 -0
  512. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  513. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_drive.py +0 -0
  514. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_drive_queue.py +0 -0
  515. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_escalate.py +0 -0
  516. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_fix_headless_review.py +0 -0
  517. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_gate_a.py +0 -0
  518. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_install_drift.py +0 -0
  519. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_install_skills.py +0 -0
  520. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_issue_comment.py +0 -0
  521. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_issue_create_label.py +0 -0
  522. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_issue_reopen.py +0 -0
  523. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_issue_view_list.py +0 -0
  524. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_merge.py +0 -0
  525. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_assign.py +0 -0
  526. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_capture.py +0 -0
  527. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_chat_add_child.py +0 -0
  528. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_dispatch.py +0 -0
  529. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_gate_b.py +0 -0
  530. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_gate_c.py +0 -0
  531. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_order.py +0 -0
  532. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  533. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_milestone_ship.py +0 -0
  534. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_network.py +0 -0
  535. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_new_issue_chat.py +0 -0
  536. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_plans.py +0 -0
  537. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_portal.py +0 -0
  538. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_pr.py +0 -0
  539. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_pull_artifact.py +0 -0
  540. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_queue.py +0 -0
  541. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_reattach_sessions.py +0 -0
  542. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_refine_board.py +0 -0
  543. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_release_preflight.py +0 -0
  544. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_release_propagate.py +0 -0
  545. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_release_window.py +0 -0
  546. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_repo_2220.py +0 -0
  547. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  548. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_scorecard.py +0 -0
  549. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_set_review_findings.py +0 -0
  550. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_advisory_terminal.py +0 -0
  551. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_contested_tag.py +0 -0
  552. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_merge_queue.py +0 -0
  553. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_provider.py +0 -0
  554. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_review_finalizing.py +0 -0
  555. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_test_failed_tag.py +0 -0
  556. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_status_usage_limit.py +0 -0
  557. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_sync_comments_873.py +0 -0
  558. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_test_plan.py +0 -0
  559. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_track.py +0 -0
  560. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_tui_update.py +0 -0
  561. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cli_wait.py +0 -0
  562. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_client_base_install.py +0 -0
  563. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_commands_common.py +0 -0
  564. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_comments.py +0 -0
  565. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_completion_summary.py +0 -0
  566. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config.py +0 -0
  567. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config_acceptance.py +0 -0
  568. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config_audit.py +0 -0
  569. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config_pricing.py +0 -0
  570. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  571. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_config_usage_gate.py +0 -0
  572. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_confirm_test.py +0 -0
  573. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  576. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_test.py +0 -0
  577. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_test_runner_baseline.py +0 -0
  578. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_test_runner_populated_home.py +0 -0
  579. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_test_runner_routing.py +0 -0
  580. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_test_runner_toolchain.py +0 -0
  581. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_uat.py +0 -0
  582. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coord_web_sse_restart_live.py +0 -0
  583. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_coordinator_machine.py +0 -0
  584. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_cross_platform_imports.py +0 -0
  585. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dao.py +0 -0
  586. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dashboard.py +0 -0
  587. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dashboard_fixture.py +0 -0
  588. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dashboard_terminal.py +0 -0
  589. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dashboard_terminal_live.py +0 -0
  590. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_db.py +0 -0
  591. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dead_end.py +0 -0
  592. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_decomposition_chat.py +0 -0
  593. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_coord_db_backup.py +0 -0
  594. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_coord_web_dist.py +0 -0
  595. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_coord_web_rollback.py +0 -0
  596. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_drive_queue_unit.py +0 -0
  597. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_failure_notify_unit.py +0 -0
  598. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_manifest.py +0 -0
  599. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_notify_unit.py +0 -0
  600. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_units_lane.py +0 -0
  601. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deploy_web_unit.py +0 -0
  602. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_deps.py +0 -0
  603. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_diagnose.py +0 -0
  604. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dispatch.py +0 -0
  605. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dispatch_target_validation.py +0 -0
  606. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_dist_name.py +0 -0
  607. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_done_housekeeping.py +0 -0
  608. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive.py +0 -0
  609. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue.py +0 -0
  610. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue_blocked_rendering.py +0 -0
  611. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue_launch_argv.py +0 -0
  612. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  613. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue_roll_pending.py +0 -0
  614. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  615. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_state.py +0 -0
  616. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_drive_tmux.py +0 -0
  617. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_epic_up_capability_detection.py +0 -0
  618. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  619. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_epic_up_image_provenance.py +0 -0
  620. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_errors.py +0 -0
  621. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_events.py +0 -0
  622. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_failure_class.py +0 -0
  623. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_filelock.py +0 -0
  624. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  625. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_fix_of_force_override.py +0 -0
  626. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_fleet_config_health.py +0 -0
  627. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_fleet_health_probes.py +0 -0
  628. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_fleet_health_snapshot.py +0 -0
  629. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_fleet_watchdog.py +0 -0
  630. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_forge_availability.py +0 -0
  631. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_freshness.py +0 -0
  632. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gate_a.py +0 -0
  633. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gate_b.py +0 -0
  634. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gate_snapshot_staleness.py +0 -0
  635. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gates.py +0 -0
  636. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  637. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_gen_mock_index.py +0 -0
  638. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_generated_rust_fixture.py +0 -0
  639. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_generated_types_fixture.py +0 -0
  640. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_github_ops.py +0 -0
  641. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_github_throttle.py +0 -0
  642. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_goal.py +0 -0
  643. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_graph_health.py +0 -0
  644. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_graph_selfheal_absent_2237.py +0 -0
  645. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_handoff.py +0 -0
  646. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_checks.py +0 -0
  647. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_cli.py +0 -0
  648. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_cli_graph.py +0 -0
  649. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_config.py +0 -0
  650. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_context.py +0 -0
  651. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_coord_web_ci_pin.py +0 -0
  652. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_deploy_lane_facts.py +0 -0
  653. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_fix.py +0 -0
  654. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_incident_regression.py +0 -0
  655. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_pypi.py +0 -0
  656. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_registry.py +0 -0
  657. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_release_cordon_probe.py +0 -0
  658. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_timer_active.py +0 -0
  659. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_toolchain.py +0 -0
  660. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_unit_drift.py +0 -0
  661. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_health_unit_enablement.py +0 -0
  662. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_hooks.py +0 -0
  663. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_human_attended_437.py +0 -0
  664. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_init.py +0 -0
  665. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_integration.py +0 -0
  666. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_briefing_echo.py +0 -0
  667. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_pane_log_2541.py +0 -0
  668. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_prefill_state.py +0 -0
  669. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_session_relaunch.py +0 -0
  670. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_test_verdict_backstop.py +0 -0
  671. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_token_attribution.py +0 -0
  672. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_interactive_worktree.py +0 -0
  673. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_issue_store_seam.py +0 -0
  674. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_liveness_auditor.py +0 -0
  675. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_liveness_notify.py +0 -0
  676. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_lock_contention_ratchet.py +0 -0
  677. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_machine_pause.py +0 -0
  678. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_merge_queue.py +0 -0
  679. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_merge_verify.py +0 -0
  680. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_milestone_chat.py +0 -0
  681. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_milestone_dispatch.py +0 -0
  682. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_milestone_gate.py +0 -0
  683. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_milestone_order.py +0 -0
  684. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_milestone_seam.py +0 -0
  685. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_mock_author.py +0 -0
  686. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_model_tiering.py +0 -0
  687. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_models.py +0 -0
  688. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_models_config_labels.py +0 -0
  689. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_needs_attention.py +0 -0
  690. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_network.py +0 -0
  691. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_new_issue_chat.py +0 -0
  692. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_next_release_tag.py +0 -0
  693. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_node_shim.py +0 -0
  694. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_baseline.py +0 -0
  695. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_cli.py +0 -0
  696. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_collect.py +0 -0
  697. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_config.py +0 -0
  698. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_drive_seam.py +0 -0
  699. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_isolation.py +0 -0
  700. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_predicate.py +0 -0
  701. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_quiet_hours.py +0 -0
  702. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notifier_service.py +0 -0
  703. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notify.py +0 -0
  704. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_notify_drain.py +0 -0
  705. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_openapi.py +0 -0
  706. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_operational_defaults.py +0 -0
  707. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_overlap_fence.py +0 -0
  708. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_overlap_predict.py +0 -0
  709. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_packaged_deploy_units.py +0 -0
  710. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_parentage.py +0 -0
  711. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_paste_landed.py +0 -0
  712. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  713. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_pipeline.py +0 -0
  714. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_plan_followup_approve_plan_command.py +0 -0
  715. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_plan_followup_pr_command.py +0 -0
  716. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_plan_followup_review_command.py +0 -0
  717. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_plan_only.py +0 -0
  718. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_plan_parser.py +0 -0
  719. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_platform_paths.py +0 -0
  720. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_portal_bridge.py +0 -0
  721. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_portal_config.py +0 -0
  722. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_portal_store.py +0 -0
  723. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_portal_sync.py +0 -0
  724. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_pr_body_lint.py +0 -0
  725. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_prereqs.py +0 -0
  726. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_production_db_guard.py +0 -0
  727. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_progress.py +0 -0
  728. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_provider_seam.py +0 -0
  729. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_providers.py +0 -0
  730. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_providers_config_labels.py +0 -0
  731. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_providers_pty.py +0 -0
  732. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_quiet_hours.py +0 -0
  733. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_quiet_hours_store_2146.py +0 -0
  734. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reap_merged_sessions.py +0 -0
  735. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reap_stale_interactive_tick.py +0 -0
  736. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile.py +0 -0
  737. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_branch.py +0 -0
  738. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_completions.py +0 -0
  739. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  740. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_merges.py +0 -0
  741. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_no_agent_record.py +0 -0
  742. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_tick.py +0 -0
  743. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reconcile_usage_limit_done.py +0 -0
  744. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_refine_chat.py +0 -0
  745. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_cordon_2101.py +0 -0
  746. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  747. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_cordon_deadlock_2240.py +0 -0
  748. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_cordon_stuck_2490.py +0 -0
  749. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_propagate.py +0 -0
  750. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_propagate_threshold.py +0 -0
  751. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_roll_window_handoff.py +0 -0
  752. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_unified_1242.py +0 -0
  753. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_verify.py +0 -0
  754. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_release_window.py +0 -0
  755. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_remote_auto_prune.py +0 -0
  756. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_remote_interactive_reaper.py +0 -0
  757. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_repo_add.py +0 -0
  758. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_repo_edit_2220.py +0 -0
  759. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_repo_graph_fleet_2237.py +0 -0
  760. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_repo_onboard_2220.py +0 -0
  761. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_report_result_push.py +0 -0
  762. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_reports.py +0 -0
  763. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_retry.py +0 -0
  764. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_retry_advisory_1606.py +0 -0
  765. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_retry_type_1636.py +0 -0
  766. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_revalidate.py +0 -0
  767. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review.py +0 -0
  768. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_end_review_without_verdict.py +0 -0
  769. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_parse_failure_diagnostic.py +0 -0
  770. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_reaffirm.py +0 -0
  771. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_state.py +0 -0
  772. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_verdict_backstop.py +0 -0
  773. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_verdict_override_audit.py +0 -0
  774. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_verdict_relay.py +0 -0
  775. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_review_zero_commits.py +0 -0
  776. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_scoped_review_wiring.py +0 -0
  777. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_scorecard.py +0 -0
  778. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_self_health.py +0 -0
  779. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_serve.py +0 -0
  780. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_serve_app_board_trim.py +0 -0
  781. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_session.py +0 -0
  782. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_slice_issue_attribution.py +0 -0
  783. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_smoke.py +0 -0
  784. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_smoke_live_checkout_restore.py +0 -0
  785. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_smoke_workflow.py +0 -0
  786. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_spend_ceiling.py +0 -0
  787. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_spend_ceiling_coordinator.py +0 -0
  788. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_split.py +0 -0
  789. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_split_work.py +0 -0
  790. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_sql_dialect.py +0 -0
  791. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_stage_projection.py +0 -0
  792. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_stalled_pipeline.py +0 -0
  793. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_state.py +0 -0
  794. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_state_review_findings_daemon.py +0 -0
  795. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_status_fleet_footer.py +0 -0
  796. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_stop_1567.py +0 -0
  797. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_store_contract.py +0 -0
  798. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_stuck.py +0 -0
  799. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  800. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_terminal_command.py +0 -0
  801. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_author.py +0 -0
  802. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_chat.py +0 -0
  803. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_orchestrator.py +0 -0
  804. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_report.py +0 -0
  805. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_verdict_parsing.py +0 -0
  806. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_test_verdict_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_text_io_encoding_audit.py +0 -0
  808. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_thin_client_board_audit.py +0 -0
  809. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_thin_client_config_load_1080.py +0 -0
  810. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_thin_client_daemon_routing_906.py +0 -0
  811. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_tmux_host.py +0 -0
  812. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_tmux_session.py +0 -0
  813. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_transcript_floor.py +0 -0
  814. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_usage.py +0 -0
  815. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_usage_limits.py +0 -0
  816. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_usage_rollup.py +0 -0
  817. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_venv_live_install_2121.py +0 -0
  818. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_version_single_source.py +0 -0
  819. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_watch.py +0 -0
  820. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  821. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worker_env_venv_isolation.py +0 -0
  822. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worker_events.py +0 -0
  823. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worker_image_pin_sync.py +0 -0
  824. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worker_safety.py +0 -0
  825. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worker_test_scoping.py +0 -0
  826. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worktree.py +0 -0
  827. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  828. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/Cargo.lock +0 -0
  829. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/Cargo.toml +0 -0
  830. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/cargo-config-local-quadraui.toml.example +0 -0
  831. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/approved.rs +0 -0
  832. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/audit.rs +0 -0
  833. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/chat.rs +0 -0
  834. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/data.rs +0 -0
  835. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/dialogs.rs +0 -0
  836. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/doc_tabs.rs +0 -0
  837. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/drive.rs +0 -0
  838. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/drive_queue.rs +0 -0
  839. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/escalation.rs +0 -0
  840. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/events.rs +0 -0
  841. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/fixtures.rs +0 -0
  842. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/fleet_health.rs +0 -0
  843. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/fleet_sessions.rs +0 -0
  844. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/fleet_terminals.rs +0 -0
  845. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/format.rs +0 -0
  846. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/milestone_dag.rs +0 -0
  847. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/mod.rs +0 -0
  848. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/msv.rs +0 -0
  849. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/pipeline.rs +0 -0
  850. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/plans.rs +0 -0
  851. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/render.rs +0 -0
  852. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/reports.rs +0 -0
  853. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/sessions.rs +0 -0
  854. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/settings_ui.rs +0 -0
  855. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/sidebar.rs +0 -0
  856. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/terminal.rs +0 -0
  857. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/tests.rs +0 -0
  858. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/types/generated.rs +0 -0
  859. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/types.rs +0 -0
  860. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/app/workspace.rs +0 -0
  861. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/bin/gtk.rs +0 -0
  862. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/commands.rs +0 -0
  863. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/lib.rs +0 -0
  864. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/main.rs +0 -0
  865. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/src/settings.rs +0 -0
  866. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/tests/acceptance.rs +0 -0
  867. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/tui/tests/cli.rs +0 -0
  868. {code_coordinator-0.5.257 → code_coordinator-0.5.258}/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.257
3
+ Version: 0.5.258
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.257
3
+ Version: 0.5.258
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
@@ -667,6 +667,7 @@ tests/test_release_cordon_deadlock_2240.py
667
667
  tests/test_release_cordon_stuck_2490.py
668
668
  tests/test_release_propagate.py
669
669
  tests/test_release_propagate_threshold.py
670
+ tests/test_release_roll_between_legs_2854.py
670
671
  tests/test_release_roll_window_handoff.py
671
672
  tests/test_release_unified_1242.py
672
673
  tests/test_release_verify.py
@@ -739,6 +739,7 @@
739
739
  "tests/test_release_cordon_stuck_2490.py",
740
740
  "tests/test_release_propagate.py",
741
741
  "tests/test_release_propagate_threshold.py",
742
+ "tests/test_release_roll_between_legs_2854.py",
742
743
  "tests/test_release_roll_window_handoff.py",
743
744
  "tests/test_release_unified_1242.py",
744
745
  "tests/test_release_verify.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.257",
2
+ "tag": "0.5.258",
3
3
  "distance": 0,
4
- "node": "g0f6b2aa2009290d8d6e254f4de39fff2490b3253",
4
+ "node": "gef4810f9d5759ef0c6af207cb768d16498aae9f4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-27"
@@ -908,11 +908,16 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
908
908
  # have happened at all). Feed the same seam so it defers like a live
909
909
  # assignment instead of getting reaped.
910
910
  extra_busy.extend(_confirmation_running_busy())
911
+ # #2854: `now` opts this run into the between-legs settle window — a
912
+ # drive-queue row that is `running` but has genuinely had no live
913
+ # assignment on its last-known host for at least the settle window rolls
914
+ # that host without waiting for the row to reach a terminal state.
911
915
  quiescence = rp.assess_quiescence(
912
916
  queue_entries=board.get("drive_queue") or [],
913
917
  assignments=board.get("assignments") or [],
914
918
  issues=board.get("issues") or [],
915
919
  extra_busy=extra_busy,
920
+ now=time.time(),
916
921
  )
917
922
  record.quiescence = quiescence.to_dict()
918
923
  if quiescence.stale:
@@ -927,6 +932,19 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
927
932
  "tick --reconcile-only` to clear them for good)",
928
933
  err=True,
929
934
  )
935
+ if quiescence.settled:
936
+ # #2854: a `running` row whose host rolled BETWEEN LEGS — the row
937
+ # itself is still in flight, only the settled host is being treated
938
+ # as idle. Printed unconditionally, same reasoning as `stale` above:
939
+ # a host rolled mid-drive must leave a readable trace of why that was
940
+ # judged safe.
941
+ click.echo(
942
+ "note: rolling host(s) for drive-queue row(s) that are between "
943
+ f"legs and past the settle window: {', '.join(quiescence.settled)} "
944
+ "(#2854 — the row itself is still running; only the currently "
945
+ "idle host is being treated as quiescent)",
946
+ err=True,
947
+ )
930
948
 
931
949
  hosts = [m.name for m in (getattr(config, "machines", ()) or ())]
932
950
  busy_hosts = quiescence.busy_hosts()
@@ -2705,14 +2723,21 @@ def _drain(
2705
2723
  rp.Busy(kind="board unreadable", subject="/board", detail=board_error)
2706
2724
  )
2707
2725
  extra_busy.extend(extra_busy_fetch())
2726
+ # #2854: same settle-window opt-in as the top-level `propagate` call
2727
+ # site — one clock read per poll, reused for both the settle window
2728
+ # and `elapsed` below, so a between-legs gap that crosses the settle
2729
+ # threshold mid-drain clears within THIS wait rather than only on
2730
+ # the next `coord release propagate` tick.
2731
+ poll_now = now_fn()
2708
2732
  quiescence = rp.assess_quiescence(
2709
2733
  queue_entries=board.get("drive_queue") or [],
2710
2734
  assignments=board.get("assignments") or [],
2711
2735
  issues=board.get("issues") or [],
2712
2736
  extra_busy=extra_busy,
2737
+ now=poll_now,
2713
2738
  )
2714
2739
  busy = bool(quiescence.fleet_wide_busy) or daemon_host in quiescence.busy_hosts()
2715
- elapsed = now_fn() - start
2740
+ elapsed = poll_now - start
2716
2741
  if not busy:
2717
2742
  return rw.DrainOutcome(drained=True, elapsed_seconds=elapsed, detail="drained")
2718
2743
  detail = quiescence.busy_reason_for_host(daemon_host) or quiescence.reason
@@ -120,6 +120,34 @@ purpose: the daemon-host gate itself (`daemon_name in busy_hosts` in
120
120
  message in `coord/release_cordon.py`) lives outside this module and needs
121
121
  its own look before any loosening — this is the finding, not the fix.
122
122
 
123
+ #2854 IS THE LOOK #2618 DEFERRED
124
+ ---------------------------------
125
+ #2618's finding was narrow on purpose: a live drive can now survive a
126
+ `coord-serve` restart, so "occupied anywhere" no longer needs to defer the
127
+ whole fleet — but `assess_quiescence` kept charging a between-legs `running`
128
+ row to its host for the entry's entire remaining lifetime regardless,
129
+ because #2240 only ever narrowed WHICH host that charge lands on, never
130
+ whether it should still apply once the thing it was protecting (an
131
+ in-flight worker process) is gone. Measured 2026-08-27: a propagate run
132
+ cordoned two idle hosts because a third issue's *work* leg had started three
133
+ minutes earlier, with smoke, review and merge still ahead of it — on that
134
+ day's numbers, an hour or more of cordon for hosts with nothing running on
135
+ them at all.
136
+
137
+ `assess_quiescence`'s `now`/`settle_seconds` close that gap: a between-legs
138
+ row (no live assignment right now) whose gap has already outlasted a short
139
+ debounce is moved out of `busy` into `Quiescence.settled` instead — visible,
140
+ never a silent drop, same as `stale` above. The debounce exists because "no
141
+ live assignment right now" is one momentary read of a gap that is normally
142
+ seconds long (see #2240's section below); requiring it to have already held
143
+ for `settle_seconds` (default 20s, matching #2139's identical-shaped
144
+ idle-restart debounce) is what keeps a lucky poll from reading a gap that is
145
+ about to close as though it were actually open. See `assess_quiescence`'s
146
+ own docstring for the exact mechanics, and #2854 for the fuller risk
147
+ analysis (`notify.lock`, intra-issue version skew, the drive process itself
148
+ never updating mid-run) that this fix does not, and does not need to, change
149
+ anything about.
150
+
123
151
  LANE ORDER ANSWERS THE SKEW QUESTION
124
152
  ------------------------------------
125
153
  #1835 asks whether a fleet mid-roll — hosts at two versions — is safe for
@@ -534,6 +562,14 @@ NO_OP_STATUSES: frozenset[str] = frozenset(
534
562
  #: must not schedule an update the agent would then refuse.
535
563
  LIVE_ASSIGNMENT_STATUSES: frozenset[str] = frozenset({"RUNNING", "PENDING"})
536
564
 
565
+ #: #2854: how long a host must show NO live assignment for an in-flight
566
+ #: (but between-legs) drive-queue entry before that gap counts as settled
567
+ #: enough to roll. Mirrors the #2139 idle-restart debounce's 20s window —
568
+ #: same shape of problem (a momentarily-quiet host that is about to become
569
+ #: busy again as the next leg lands), same fix. See :func:`assess_quiescence`
570
+ #: for how this is spent.
571
+ DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS = 20.0
572
+
537
573
 
538
574
  # ── busy signals ─────────────────────────────────────────────────────────────
539
575
 
@@ -663,6 +699,14 @@ class Quiescence:
663
699
  #: doing the same disproof on its own cadence; this is the same evidence,
664
700
  #: re-checked on READ so a stopped timer cannot make it unfalsifiable.
665
701
  stale: tuple[str, ...] = ()
702
+ #: #2854: `running` queue rows that are genuinely BETWEEN LEGS (no live
703
+ #: assignment right now) and have stayed that way for at least the
704
+ #: settle window — see :func:`assess_quiescence`'s *now*/*settle_seconds*.
705
+ #: Not a busy signal (the whole point is that it does NOT block); not
706
+ #: silent either, same reasoning as `stale` above: a host rolled while
707
+ #: its issue's drive-queue row is still `running` must leave a readable
708
+ #: trace of why that was safe, not just a quiet absence from `busy`.
709
+ settled: tuple[str, ...] = ()
666
710
 
667
711
  @property
668
712
  def reason(self) -> str:
@@ -723,6 +767,7 @@ class Quiescence:
723
767
  "busy": [asdict(b) for b in self.busy],
724
768
  "fired_holds": list(self.fired_holds),
725
769
  "stale": list(self.stale),
770
+ "settled": list(self.settled),
726
771
  }
727
772
 
728
773
 
@@ -769,22 +814,22 @@ def _live_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str
769
814
  return hosts
770
815
 
771
816
 
772
- def _last_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str, str]:
773
- """``repo#issue`` → the machine that ran its MOST RECENT assignment (#2240).
817
+ def _last_assignment_rows(
818
+ assignments: Iterable[Mapping[str, Any]],
819
+ ) -> dict[str, Mapping[str, Any]]:
820
+ """``repo#issue`` → the single MOST RECENT assignment row for that key.
774
821
 
775
- Any status, terminal included — this is deliberately the "last known
776
- host" lookup, used only when :func:`_live_assignment_hosts` has nothing
777
- because the entry is between legs. ``/board`` publishes terminal
778
- assignment rows within its retention window
779
- (``coord.dao.board_projection``'s ``_capped_assignments``), so the
780
- previous leg of a drive that finished minutes ago is right there; what is
781
- NOT there is a drive whose every leg fell out of retention, and such an
782
- entry keeps the old unattributable reading.
822
+ Any status, terminal included. The shared selection behind
823
+ :func:`_last_assignment_hosts` (which host) and
824
+ :func:`_last_assignment_idle_since` (#2854: how long that host has been
825
+ gone) — both must agree on WHICH row is "last", or a between-legs host
826
+ and its settle-window clock could end up describing two different
827
+ assignments.
783
828
 
784
829
  Ordered by ``dispatched_at``, with rows that carry no timestamp treated
785
830
  as oldest — a row we cannot place in time must never displace one we can.
786
831
  """
787
- best: dict[str, tuple[float, str]] = {}
832
+ best: dict[str, tuple[float, Mapping[str, Any]]] = {}
788
833
  for row in assignments:
789
834
  machine = str(row.get("machine_name") or row.get("machine") or "") or None
790
835
  if not machine:
@@ -796,8 +841,59 @@ def _last_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str
796
841
  key = _queue_key(row)
797
842
  previous = best.get(key)
798
843
  if previous is None or when >= previous[0]:
799
- best[key] = (when, machine)
800
- return {key: machine for key, (_, machine) in best.items()}
844
+ best[key] = (when, row)
845
+ return {key: row for key, (_, row) in best.items()}
846
+
847
+
848
+ def _last_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str, str]:
849
+ """``repo#issue`` → the machine that ran its MOST RECENT assignment (#2240).
850
+
851
+ Any status, terminal included — this is deliberately the "last known
852
+ host" lookup, used only when :func:`_live_assignment_hosts` has nothing
853
+ because the entry is between legs. ``/board`` publishes terminal
854
+ assignment rows within its retention window
855
+ (``coord.dao.board_projection``'s ``_capped_assignments``), so the
856
+ previous leg of a drive that finished minutes ago is right there; what is
857
+ NOT there is a drive whose every leg fell out of retention, and such an
858
+ entry keeps the old unattributable reading.
859
+
860
+ See :func:`_last_assignment_rows` for the row-selection rule this reads.
861
+ """
862
+ return {
863
+ key: str(row.get("machine_name") or row.get("machine") or "")
864
+ for key, row in _last_assignment_rows(assignments).items()
865
+ }
866
+
867
+
868
+ def _last_assignment_idle_since(
869
+ assignments: Iterable[Mapping[str, Any]],
870
+ ) -> dict[str, float]:
871
+ """``repo#issue`` → when its last-known host stopped running it (#2854).
872
+
873
+ ``finished_at`` off the SAME row :func:`_last_assignment_hosts` already
874
+ picked as "most recent" (see :func:`_last_assignment_rows`) — never a
875
+ second, independently-selected row, which could disagree about which
876
+ assignment is even being described.
877
+
878
+ A key is absent from the result — not mapped to ``0.0`` or any other
879
+ guess — when that row carries no readable ``finished_at`` (a legacy row,
880
+ or one written before the field existed). :func:`assess_quiescence`
881
+ treats an absent entry exactly like "not yet settled": a between-legs
882
+ gap this function cannot measure must never be read as long enough to
883
+ roll on a guess, the same "missing data fails toward the conservative
884
+ reading" rule the rest of this module already follows (see e.g.
885
+ `DRIFT_UNKNOWN` in `coord/release_cordon.py`).
886
+ """
887
+ out: dict[str, float] = {}
888
+ for key, row in _last_assignment_rows(assignments).items():
889
+ raw = row.get("finished_at")
890
+ if raw is None:
891
+ continue
892
+ try:
893
+ out[key] = float(raw)
894
+ except (TypeError, ValueError):
895
+ continue
896
+ return out
801
897
 
802
898
 
803
899
  def busy_host_for_entry(
@@ -895,6 +991,8 @@ def assess_quiescence(
895
991
  assignments: Iterable[Mapping[str, Any]] = (),
896
992
  issues: Iterable[Mapping[str, Any]] = (),
897
993
  extra_busy: Iterable[Busy] = (),
994
+ now: float | None = None,
995
+ settle_seconds: float = DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS,
898
996
  ) -> Quiescence:
899
997
  """Is the fleet idle enough to restart every agent on it?
900
998
 
@@ -955,6 +1053,38 @@ def assess_quiescence(
955
1053
  ``running`` row, never retry or block one — that stays the tick's job.
956
1054
  It closes exactly the gap that let a landed row block a roll forever
957
1055
  with no clock and no way to contradict it.
1056
+
1057
+ #2854: ROLL BETWEEN LEGS, NOT BETWEEN ISSUES. Even after #2240 narrowed a
1058
+ between-legs ``running`` row from fleet-wide to its one last-known host,
1059
+ that host stayed charged as busy for the entry's ENTIRE remaining
1060
+ lifetime — work, test, review, merge — including every gap between legs
1061
+ where no worker process is actually running there. #2618 established
1062
+ that a between-legs gap has nothing an agent restart could kill (no
1063
+ poll in flight survives a restart uneventfully, and no unretried write
1064
+ is outstanding either); this is the other half — actually treating that
1065
+ gap as idle instead of only proving it *could* be.
1066
+
1067
+ A between-legs row (no entry in *live_assignment_hosts*) is no longer
1068
+ unconditionally busy for its attributed host. It stays busy — same as
1069
+ before — unless ALL of: *now* is given (a caller that never asks for the
1070
+ settle window gets the old, safer-by-default behaviour), the row's last
1071
+ known host can actually be named, and :func:`_last_assignment_idle_since`
1072
+ can prove *at least* `settle_seconds` have passed since that host's last
1073
+ assignment for this entry actually **finished** (``finished_at`` — not
1074
+ when it was dispatched, which would only ever UNDERSTATE how recently a
1075
+ worker was alive there). Meeting all three moves the entry into
1076
+ :attr:`Quiescence.settled` instead of :attr:`Quiescence.busy` — visible,
1077
+ exactly like `stale` above, never a silent drop.
1078
+
1079
+ The settle window itself exists because "no live assignment right now"
1080
+ is a single, momentary read, and the between-legs gap it is trying to
1081
+ catch is normally seconds long (see the module docstring's #2240
1082
+ section) — a read that happens to land exactly inside one is not
1083
+ evidence the gap will still be open by the time a roll actually acts on
1084
+ it. Requiring the gap to have already lasted `settle_seconds` (default
1085
+ :data:`DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS`, the same 20s the #2139
1086
+ idle-restart debounce uses for an identical shape of flapping) is a
1087
+ debounce, not a probability judgement — same mechanism, same reason.
958
1088
  """
959
1089
  queue_entries = list(queue_entries)
960
1090
  assignments = list(assignments)
@@ -962,10 +1092,12 @@ def assess_quiescence(
962
1092
  board = build_board_view({"assignments": assignments, "issues": issues})
963
1093
  live_assignment_hosts = _live_assignment_hosts(assignments)
964
1094
  last_assignment_hosts = _last_assignment_hosts(assignments)
1095
+ last_assignment_idle_since = _last_assignment_idle_since(assignments)
965
1096
 
966
1097
  busy: list[Busy] = []
967
1098
  fired: list[str] = []
968
1099
  stale: list[str] = []
1100
+ settled: list[str] = []
969
1101
 
970
1102
  for entry in queue_entries:
971
1103
  state = str(entry.get("state") or "")
@@ -980,29 +1112,44 @@ def assess_quiescence(
980
1112
  host = busy_host_for_entry(
981
1113
  entry, live_assignment_hosts, last_assignment_hosts
982
1114
  )
983
- # #2240: say WHICH reading named the host. "between legs,
984
- # attributed to its last known host" is the difference
985
- # between a signal holding one machine and one holding the
986
- # fleet, and a deferral nobody can take apart is a deferral
987
- # nobody can act on.
988
- detail = "restarting agents now would kill it mid-flight"
989
- if (
990
- host
1115
+ between_legs = (
1116
+ host is not None
991
1117
  and not entry.get("machine")
992
1118
  and key not in live_assignment_hosts
993
- ):
994
- detail += (
995
- "; between legs — attributed to its last known host "
996
- "(#2240)"
997
- )
998
- busy.append(
999
- Busy(
1000
- kind="drive-queue entry running",
1001
- subject=key,
1002
- detail=detail,
1003
- host=host,
1004
- )
1005
1119
  )
1120
+ # #2854: a between-legs row whose gap has already outlasted
1121
+ # the settle window is treated as genuinely idle for its
1122
+ # host, not merely "attributed and busy anyway" — see this
1123
+ # function's own docstring. `idle_for` stays `None` (never
1124
+ # settled) whenever it cannot be PROVEN: no `now`, or no
1125
+ # readable `finished_at` for the last assignment.
1126
+ idle_for = None
1127
+ if between_legs and now is not None:
1128
+ idle_since = last_assignment_idle_since.get(key)
1129
+ if idle_since is not None:
1130
+ idle_for = now - idle_since
1131
+ if idle_for is not None and idle_for >= settle_seconds:
1132
+ settled.append(key)
1133
+ else:
1134
+ # #2240: say WHICH reading named the host. "between legs,
1135
+ # attributed to its last known host" is the difference
1136
+ # between a signal holding one machine and one holding
1137
+ # the fleet, and a deferral nobody can take apart is a
1138
+ # deferral nobody can act on.
1139
+ detail = "restarting agents now would kill it mid-flight"
1140
+ if between_legs:
1141
+ detail += (
1142
+ "; between legs — attributed to its last known "
1143
+ "host (#2240)"
1144
+ )
1145
+ busy.append(
1146
+ Busy(
1147
+ kind="drive-queue entry running",
1148
+ subject=key,
1149
+ detail=detail,
1150
+ host=host,
1151
+ )
1152
+ )
1006
1153
  # A *fired* gate is the opposite of busy — the queue has stopped
1007
1154
  # itself waiting for precisely this deploy. Recorded, never counted.
1008
1155
  if str(entry.get("hold_state") or "") == HOLD_FIRED:
@@ -1034,6 +1181,7 @@ def assess_quiescence(
1034
1181
  busy=tuple(busy),
1035
1182
  fired_holds=tuple(dict.fromkeys(fired)),
1036
1183
  stale=tuple(dict.fromkeys(stale)),
1184
+ settled=tuple(dict.fromkeys(settled)),
1037
1185
  )
1038
1186
 
1039
1187