code-coordinator 0.5.525__tar.gz → 0.5.526__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 (910) hide show
  1. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/drive_queue.py +212 -41
  5. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/drive_queue.py +112 -8
  6. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_drive_queue.py +138 -4
  7. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue.py +149 -0
  8. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/.gitignore +0 -0
  21. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/GOAL.md +0 -0
  23. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/LICENSE +0 -0
  24. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/README.md +0 -0
  26. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/approved_work.py +0 -0
  43. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/backup.py +0 -0
  46. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/ci_fix.py +0 -0
  55. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/claude_setup_token.py +0 -0
  60. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/client.py +0 -0
  62. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/codegen.py +0 -0
  63. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/backup.py +0 -0
  69. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/ci.py +0 -0
  71. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/codegen.py +0 -0
  72. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/dispatch.py +0 -0
  73. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/dispatch_workers.py +0 -0
  74. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/dr.py +0 -0
  75. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/machine.py +0 -0
  81. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/pr.py +0 -0
  87. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/config.py +0 -0
  101. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/db.py +0 -0
  111. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dead_end.py +0 -0
  112. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/decomposition_chat.py +0 -0
  113. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-backup.service +0 -0
  116. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-backup.timer +0 -0
  117. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-dr-verify.service +0 -0
  121. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-dr-verify.timer +0 -0
  122. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-drive-queue.service +0 -0
  123. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-drive-queue.timer +0 -0
  124. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-failure-notify.service +0 -0
  125. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-fleet-watchdog.service +0 -0
  126. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  127. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-notify.service +0 -0
  128. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-notify.timer +0 -0
  129. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-release-propagate.service +0 -0
  130. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-release-propagate.timer +0 -0
  131. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-release-window.service +0 -0
  132. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-release-window.timer +0 -0
  133. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-serve.service +0 -0
  134. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-web-dist-build.service +0 -0
  135. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-web-dist-build.timer +0 -0
  136. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy/coord-web.service +0 -0
  137. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy_manifest.py +0 -0
  138. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deploy_units.py +0 -0
  139. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deprecation_telemetry.py +0 -0
  140. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/deps.py +0 -0
  141. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/diagnose.py +0 -0
  142. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dispatch.py +0 -0
  143. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dispatch_liveness.py +0 -0
  144. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dist_name.py +0 -0
  145. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dr_promote.py +0 -0
  146. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/dr_verify.py +0 -0
  147. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/drive.py +0 -0
  148. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/drive_sessions_snapshot.py +0 -0
  149. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/drive_state.py +0 -0
  150. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/events.py +0 -0
  151. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/failure_class.py +0 -0
  152. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/failure_classifier.py +0 -0
  153. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/filelock.py +0 -0
  154. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/fleet_config_health.py +0 -0
  155. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/forge_availability.py +0 -0
  156. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/freshness.py +0 -0
  157. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/gate_a.py +0 -0
  158. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/gate_b.py +0 -0
  159. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/gate_snapshot.py +0 -0
  160. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/gates.py +0 -0
  161. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/gen_board_fixture.py +0 -0
  162. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/github_ops.py +0 -0
  163. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/github_throttle.py +0 -0
  164. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/goal.py +0 -0
  165. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/graph_health.py +0 -0
  166. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/__init__.py +0 -0
  167. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/aggregate.py +0 -0
  168. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/__init__.py +0 -0
  169. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/_ci_pin.py +0 -0
  170. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/agent_install.py +0 -0
  171. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/cargo_targets.py +0 -0
  172. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/claude_binary.py +0 -0
  173. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/config_drift.py +0 -0
  174. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  175. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/coord_web_ci_pin.py +0 -0
  176. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/deploy_lane_facts.py +0 -0
  177. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/disk.py +0 -0
  178. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/fleet_board.py +0 -0
  179. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  180. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/fleet_phantom.py +0 -0
  181. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/fleet_unit_drift.py +0 -0
  182. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/graph.py +0 -0
  183. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/graphify_cli.py +0 -0
  184. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/index_lock.py +0 -0
  185. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/issues_sync_staleness.py +0 -0
  186. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/local_machine_identity.py +0 -0
  187. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/plan_usage.py +0 -0
  188. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/pr_churn.py +0 -0
  189. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/release_cordon.py +0 -0
  190. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/repo_state.py +0 -0
  191. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/spawned_coord.py +0 -0
  192. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/stalled_pipeline.py +0 -0
  193. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/timer_active.py +0 -0
  194. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/toolchain.py +0 -0
  195. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/unit_drift.py +0 -0
  196. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/unit_enablement.py +0 -0
  197. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/wedged_drive_queue.py +0 -0
  198. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/checks/worktrees.py +0 -0
  199. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/cli.py +0 -0
  200. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/context.py +0 -0
  201. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/fleet_snapshot.py +0 -0
  202. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/models.py +0 -0
  203. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/pypi.py +0 -0
  204. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/registry.py +0 -0
  205. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/render.py +0 -0
  206. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/health/units.py +0 -0
  207. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/hooks.py +0 -0
  208. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/housekeeping.py +0 -0
  209. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/interactive.py +0 -0
  210. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/invariant_alarms.py +0 -0
  211. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/issue_store.py +0 -0
  212. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/issues_sync_status.py +0 -0
  213. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/liveness_auditor.py +0 -0
  214. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/machine_fault.py +0 -0
  215. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/machine_metrics.py +0 -0
  216. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/machine_onboard.py +0 -0
  217. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/machine_pause.py +0 -0
  218. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/machine_stats.py +0 -0
  219. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/merge_queue.py +0 -0
  220. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/milestone_chat.py +0 -0
  221. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/milestone_dispatch.py +0 -0
  222. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/milestone_gate.py +0 -0
  223. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/milestone_order.py +0 -0
  224. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/mock_author.py +0 -0
  225. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/models.py +0 -0
  226. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/network.py +0 -0
  227. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/new_issue_chat.py +0 -0
  228. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/__init__.py +0 -0
  229. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/baseline.py +0 -0
  230. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/cli.py +0 -0
  231. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/collect.py +0 -0
  232. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/digest.py +0 -0
  233. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/models.py +0 -0
  234. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/predicate.py +0 -0
  235. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/service.py +0 -0
  236. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/store.py +0 -0
  237. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notifier/transport.py +0 -0
  238. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/notify.py +0 -0
  239. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/openapi.py +0 -0
  240. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/overlap_fence.py +0 -0
  241. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/overlap_predict.py +0 -0
  242. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/parentage.py +0 -0
  243. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/parentage_github.py +0 -0
  244. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/pipeline.py +0 -0
  245. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/plan_parser.py +0 -0
  246. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/plans.py +0 -0
  247. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/platform_paths.py +0 -0
  248. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/portal_bridge.py +0 -0
  249. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/portal_store.py +0 -0
  250. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/portal_sync.py +0 -0
  251. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/pr_body_lint.py +0 -0
  252. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/prereqs.py +0 -0
  253. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/progress.py +0 -0
  254. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/providers/__init__.py +0 -0
  255. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/providers/base.py +0 -0
  256. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/providers/claude.py +0 -0
  257. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/providers/claude_pty.py +0 -0
  258. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/providers/opencode.py +0 -0
  259. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/queue_diagnose.py +0 -0
  260. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/reconcile.py +0 -0
  261. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/reconcile_tick.py +0 -0
  262. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/refine_chat.py +0 -0
  263. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/release_cordon.py +0 -0
  264. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/release_propagate.py +0 -0
  265. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/release_verify.py +0 -0
  266. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/release_window.py +0 -0
  267. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/repo_dormancy.py +0 -0
  268. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/repo_edit.py +0 -0
  269. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/repo_onboard.py +0 -0
  270. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/reports.py +0 -0
  271. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/rest_schema.py +0 -0
  272. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/restart_cmd.py +0 -0
  273. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/revalidate.py +0 -0
  274. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/review.py +0 -0
  275. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/scorecard.py +0 -0
  276. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/self_health.py +0 -0
  277. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/serve_app.py +0 -0
  278. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  279. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  280. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  281. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/portal-followup/SKILL.md +0 -0
  284. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/release-now/SKILL.md +0 -0
  285. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  286. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  287. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/skills/update-issue/SKILL.md +0 -0
  288. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/smoke.py +0 -0
  289. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/spend_ceiling.py +0 -0
  290. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/split_work.py +0 -0
  291. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/sql.py +0 -0
  292. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/stage_projection.py +0 -0
  293. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/state.py +0 -0
  294. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/store_migrate.py +0 -0
  295. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/store_parity.py +0 -0
  296. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/templates/deploy-cloudflare.node.yml +0 -0
  297. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/test_author.py +0 -0
  298. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/test_chat.py +0 -0
  299. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/test_orchestrator.py +0 -0
  300. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/test_report.py +0 -0
  301. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/tui_release.py +0 -0
  302. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/uat_checks.py +0 -0
  303. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/usage.py +0 -0
  304. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/usage_limits.py +0 -0
  305. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/usage_rollup.py +0 -0
  306. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coord/worker_events.py +0 -0
  307. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/coordinator.example.yml +0 -0
  308. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-agent.service +0 -0
  309. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-backup.service +0 -0
  310. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-backup.timer +0 -0
  311. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-db-backup.service +0 -0
  312. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-db-backup.sh +0 -0
  313. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-db-backup.timer +0 -0
  314. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-dr-verify.service +0 -0
  315. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-dr-verify.timer +0 -0
  316. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-drive-queue.service +0 -0
  317. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-drive-queue.timer +0 -0
  318. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-failure-notify.service +0 -0
  319. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-failure-notify.sh +0 -0
  320. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-fleet-watchdog.service +0 -0
  321. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-fleet-watchdog.timer +0 -0
  322. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-notify.service +0 -0
  323. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-notify.timer +0 -0
  324. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-release-propagate.service +0 -0
  325. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-release-propagate.timer +0 -0
  326. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-release-window.service +0 -0
  327. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-release-window.timer +0 -0
  328. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-serve.service +0 -0
  329. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-web-dist-build.service +0 -0
  330. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-web-dist-build.sh +0 -0
  331. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-web-dist-build.timer +0 -0
  332. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-web-rollback.sh +0 -0
  333. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/coord-web.service +0 -0
  334. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/deploy/node-shim.sh +0 -0
  335. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ADR_COORD_TUI_CI.md +0 -0
  336. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  337. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ADR_COORD_WEB_CI.md +0 -0
  338. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ADR_COORD_WEB_DIST.md +0 -0
  339. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  340. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/AGENT_OPERATIONS.md +0 -0
  341. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ARCHITECTURE.md +0 -0
  342. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ARCH_SECURITY_GATES.md +0 -0
  343. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/COCKPIT.md +0 -0
  344. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/CONTROL_CENTER.md +0 -0
  345. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/COST_DISCIPLINE.md +0 -0
  346. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/CROSS_PLATFORM.md +0 -0
  347. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/CUSTOMER_FACING_APPS.md +0 -0
  348. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/CUSTOMER_PORTAL.md +0 -0
  349. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/DATA_STORE_SELECTION.md +0 -0
  350. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/DISASTER_RECOVERY.md +0 -0
  351. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/DRIVE_QUEUE.md +0 -0
  352. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/EPHEMERAL_WORKERS.md +0 -0
  353. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/FORGE_MIGRATION.md +0 -0
  354. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/GRAPHIFY_SETUP.md +0 -0
  355. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ISSUE_GUIDANCE.md +0 -0
  356. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/MAC_MINI.md +0 -0
  357. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  358. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/NOTIFIER.md +0 -0
  359. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/OPENCODE_VERIFICATION.md +0 -0
  360. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/OPERATING_GOTCHAS.md +0 -0
  361. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/OPERATOR_GUIDES.md +0 -0
  362. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/ORACLE_LOOP.md +0 -0
  363. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/PHONE_WEBAPP.md +0 -0
  364. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/PIPELINE_V2.md +0 -0
  365. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/PLATFORM_EVOLUTION.md +0 -0
  366. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/SECOND_BACKEND.md +0 -0
  367. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/STORE_SERVICE.md +0 -0
  368. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  369. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/WEB_CONTROL_CENTER.md +0 -0
  370. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/WSL_WINDOWS_WORKER.md +0 -0
  371. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/mocks/web/README.md +0 -0
  372. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/mocks/web/_tokens.css +0 -0
  373. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/mocks/web/issue-detail.html +0 -0
  374. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/mocks/web/pipeline-narrow.html +0 -0
  375. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/docs/mocks/web/pipeline-wide.html +0 -0
  376. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/graphify-out/.gitignore +0 -0
  377. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/install-agent.sh +0 -0
  378. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/pyproject.toml +0 -0
  379. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/audit_review_verdict_overrides.py +0 -0
  380. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  381. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/build-worker-image.sh +0 -0
  382. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/coordinator-machine.py +0 -0
  383. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/dr-down.sh +0 -0
  384. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/dr-up.sh +0 -0
  385. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/epic-down.sh +0 -0
  386. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/epic-up.sh +0 -0
  387. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/preflight.sh +0 -0
  388. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/provision-server.sh +0 -0
  389. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/provision-worker.sh +0 -0
  390. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  391. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  392. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/throwaway-vm.sh +0 -0
  393. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/azure-workers/verify-github-token.sh +0 -0
  394. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/check_gh_argv_containment.py +0 -0
  395. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/codegen.py +0 -0
  396. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-test-runner.sh +0 -0
  397. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  398. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  399. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  400. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  401. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/coord-venv-rollback.sh +0 -0
  402. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/drive-batch.sh +0 -0
  403. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/extract-coord-tui.sh +0 -0
  404. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/fleet_watchdog.py +0 -0
  405. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/gen_board_fixture.py +0 -0
  406. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/gen_mock_index.py +0 -0
  407. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/lib/provision-core.sh +0 -0
  408. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/next_release_tag.py +0 -0
  409. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/provision-machine.sh +0 -0
  410. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/run_tests_in_populated_home.sh +0 -0
  411. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/run_tests_without_gh.sh +0 -0
  412. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/setup-macmini.sh +0 -0
  413. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/smoke_437_interactive.py +0 -0
  414. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/verify-provision-noble.sh +0 -0
  415. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/verify_878_review_capture.py +0 -0
  416. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/verify_release_published.py +0 -0
  417. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/scripts/verify_release_wheel.py +0 -0
  418. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/setup.cfg +0 -0
  419. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/SMOKE_SET.md +0 -0
  420. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/__init__.py +0 -0
  421. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-37/conftest.py +0 -0
  422. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-37/contract.md +0 -0
  423. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-37/manifest.yml +0 -0
  424. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  425. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  426. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/contract.md +0 -0
  427. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  428. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  429. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/manifest.yml +0 -0
  430. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  431. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-51/tsconfig.json +0 -0
  432. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/backends.py +0 -0
  434. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/conftest.py +0 -0
  435. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/board-pipeline-basic.json +0 -0
  436. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  437. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  438. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  439. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  440. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/all_pass.json +0 -0
  441. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  442. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/mixed_fail.json +0 -0
  443. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  444. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  445. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/skip.json +0 -0
  446. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/playwright/truncated.json +0 -0
  447. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  448. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  449. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  450. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  451. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  452. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  453. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  454. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  455. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_acceptance.py +0 -0
  456. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_acceptance_drivers.py +0 -0
  457. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent.py +0 -0
  458. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_api_error.py +0 -0
  459. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_app.py +0 -0
  460. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_branch_base.py +0 -0
  461. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_branch_capture.py +0 -0
  462. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_config_free_1712.py +0 -0
  463. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_deploy_units_endpoint.py +0 -0
  464. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_dirty_worktree.py +0 -0
  465. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  466. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_graph_self_heal.py +0 -0
  467. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_health_h3.py +0 -0
  468. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_idle_restart.py +0 -0
  469. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_push_failure.py +0 -0
  470. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_reap.py +0 -0
  471. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_repos_and_pull.py +0 -0
  472. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_restart_services_endpoint.py +0 -0
  473. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_skills_self_heal.py +0 -0
  474. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_startup_diagnostics.py +0 -0
  475. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_update.py +0 -0
  476. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_update_bluegreen.py +0 -0
  477. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_usage_limit.py +0 -0
  478. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_agent_zero_commit.py +0 -0
  479. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ambient_home_isolation.py +0 -0
  480. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approve_capability_reroute_3241.py +0 -0
  481. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approve_dependency_busy_2804.py +0 -0
  482. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approve_reject_plan.py +0 -0
  483. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approve_usage_gate.py +0 -0
  484. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approved_work_2532.py +0 -0
  485. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_approved_work_2996.py +0 -0
  486. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_assignment_already_recorded_daemon.py +0 -0
  487. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_audit_log.py +0 -0
  488. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_audit_outcome.py +0 -0
  489. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_audit_query.py +0 -0
  490. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_auto_loop.py +0 -0
  491. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_auto_release_publish_2035.py +0 -0
  492. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_backend_selection.py +0 -0
  493. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_backup.py +0 -0
  494. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_base_checkout_restore.py +0 -0
  495. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_block_log.py +0 -0
  496. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_cap_762.py +0 -0
  497. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_fixture.py +0 -0
  498. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_read_path.py +0 -0
  499. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_schema.py +0 -0
  500. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_service.py +0 -0
  501. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_state.py +0 -0
  502. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_board_wire.py +0 -0
  503. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_brain.py +0 -0
  504. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_branch_model.py +0 -0
  505. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_bug_intake.py +0 -0
  506. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_build_worker_image_env_update.py +0 -0
  507. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cargo_cache.py +0 -0
  508. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_check_gh_argv_containment.py +0 -0
  509. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_acceptance_gate_1950.py +0 -0
  510. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_fix.py +0 -0
  511. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_github.py +0 -0
  512. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_gitlab.py +0 -0
  513. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_parity_2091.py +0 -0
  514. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_ci_store.py +0 -0
  515. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_claim.py +0 -0
  516. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_claude_md_budget.py +0 -0
  517. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_claude_setup_token.py +0 -0
  518. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_acceptance.py +0 -0
  519. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_assign.py +0 -0
  520. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  521. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_assign_interactive_remote.py +0 -0
  522. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_assign_provider.py +0 -0
  523. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  524. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_audit.py +0 -0
  525. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_chat_continue.py +0 -0
  526. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_ci.py +0 -0
  527. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_codegen.py +0 -0
  528. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_decide.py +0 -0
  529. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_capability_rules.py +0 -0
  530. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_config_provenance.py +0 -0
  531. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_forge_availability.py +0 -0
  532. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_graph.py +0 -0
  533. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_self.py +0 -0
  534. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_diagnose_test_coverage.py +0 -0
  535. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_doctor.py +0 -0
  536. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_doctor_config_free_1801.py +0 -0
  537. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  538. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  539. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_drive.py +0 -0
  540. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_escalate.py +0 -0
  541. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_fix_headless_review.py +0 -0
  542. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_gate_a.py +0 -0
  543. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_install_drift.py +0 -0
  544. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_install_skills.py +0 -0
  545. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_issue_comment.py +0 -0
  546. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_issue_create_label.py +0 -0
  547. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_issue_reopen.py +0 -0
  548. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_issue_view_list.py +0 -0
  549. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_issues.py +0 -0
  550. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_merge.py +0 -0
  551. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_assign.py +0 -0
  552. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_capture.py +0 -0
  553. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_chat_add_child.py +0 -0
  554. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_dispatch.py +0 -0
  555. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_gate_b.py +0 -0
  556. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_gate_c.py +0 -0
  557. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_order.py +0 -0
  558. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  559. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_milestone_ship.py +0 -0
  560. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_network.py +0 -0
  561. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_new_issue_chat.py +0 -0
  562. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_plans.py +0 -0
  563. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_portal.py +0 -0
  564. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_pr.py +0 -0
  565. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_pull_artifact.py +0 -0
  566. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_queue.py +0 -0
  567. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_reattach_sessions.py +0 -0
  568. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_refine_board.py +0 -0
  569. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_release_preflight.py +0 -0
  570. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_release_propagate.py +0 -0
  571. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_release_window.py +0 -0
  572. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_repo_2220.py +0 -0
  573. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  574. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_scorecard.py +0 -0
  575. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_serve_store_backend_3084.py +0 -0
  576. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_set_review_findings.py +0 -0
  577. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_advisory_terminal.py +0 -0
  578. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_contested_tag.py +0 -0
  579. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_invariant_alarms.py +0 -0
  580. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_machine_fault.py +0 -0
  581. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_merge_queue.py +0 -0
  582. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_provider.py +0 -0
  583. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_retried_3340.py +0 -0
  584. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_review_finalizing.py +0 -0
  585. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_supervisor_3366.py +0 -0
  586. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_test_failed_tag.py +0 -0
  587. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_status_usage_limit.py +0 -0
  588. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_sync_comments_873.py +0 -0
  589. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_test_plan.py +0 -0
  590. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_track.py +0 -0
  591. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_tui_update.py +0 -0
  592. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cli_wait.py +0 -0
  593. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_client.py +0 -0
  594. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_client_base_install.py +0 -0
  595. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_client_config_cache_atomic_3052.py +0 -0
  596. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_client_resource_migration_1946.py +0 -0
  597. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_commands_common.py +0 -0
  598. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_comments.py +0 -0
  599. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_completion_summary.py +0 -0
  600. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config.py +0 -0
  601. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_acceptance.py +0 -0
  602. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_audit.py +0 -0
  603. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_drift_check.py +0 -0
  604. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_effective.py +0 -0
  605. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_pricing.py +0 -0
  606. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  607. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_config_usage_gate.py +0 -0
  608. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_confirm_test.py +0 -0
  609. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_conflict_fix.py +0 -0
  610. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_conflict_fix_semantic.py +0 -0
  611. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  612. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test.py +0 -0
  613. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  614. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test_runner_baseline.py +0 -0
  615. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test_runner_populated_home.py +0 -0
  616. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test_runner_routing.py +0 -0
  617. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_test_runner_toolchain.py +0 -0
  618. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_uat.py +0 -0
  619. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coord_web_sse_restart_live.py +0 -0
  620. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_coordinator_machine.py +0 -0
  621. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_cross_platform_imports.py +0 -0
  622. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dao.py +0 -0
  623. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard.py +0 -0
  624. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard_api.py +0 -0
  625. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard_fixture.py +0 -0
  626. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard_server.py +0 -0
  627. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard_terminal.py +0 -0
  628. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dashboard_terminal_live.py +0 -0
  629. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_db.py +0 -0
  630. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dead_end.py +0 -0
  631. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_decomposition_chat.py +0 -0
  632. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_coord_db_backup.py +0 -0
  633. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_coord_web_dist.py +0 -0
  634. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_coord_web_rollback.py +0 -0
  635. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_db_backup_unit.py +0 -0
  636. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_drive_queue_unit.py +0 -0
  637. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_failure_notify_unit.py +0 -0
  638. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_manifest.py +0 -0
  639. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_notify_unit.py +0 -0
  640. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_units_lane.py +0 -0
  641. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deploy_web_unit.py +0 -0
  642. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deprecation_telemetry.py +0 -0
  643. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_deps.py +0 -0
  644. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_diagnose.py +0 -0
  645. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dispatch.py +0 -0
  646. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dispatch_liveness.py +0 -0
  647. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dispatch_target_validation.py +0 -0
  648. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dispatch_workers.py +0 -0
  649. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dist_name.py +0 -0
  650. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_done_housekeeping.py +0 -0
  651. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dr_azure_scripts.py +0 -0
  652. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dr_promote.py +0 -0
  653. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_dr_verify.py +0 -0
  654. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive.py +0 -0
  655. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_machine_fault.py +0 -0
  656. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_blocked_rendering.py +0 -0
  657. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_launch_argv.py +0 -0
  658. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_max_parallel_config.py +0 -0
  659. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  660. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_roll_pending.py +0 -0
  661. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  662. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_sessions_snapshot.py +0 -0
  663. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_state.py +0 -0
  664. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_drive_tmux.py +0 -0
  665. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_epic_up_capability_detection.py +0 -0
  666. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  667. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_epic_up_image_provenance.py +0 -0
  668. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_errors.py +0 -0
  669. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_events.py +0 -0
  670. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_failure_class.py +0 -0
  671. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_failure_classifier.py +0 -0
  672. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_filelock.py +0 -0
  673. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  674. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fix_escalation_classifier.py +0 -0
  675. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fix_of_force_override.py +0 -0
  676. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fleet_config_health.py +0 -0
  677. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fleet_health_probes.py +0 -0
  678. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fleet_health_snapshot.py +0 -0
  679. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_fleet_watchdog.py +0 -0
  680. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_forge_availability.py +0 -0
  681. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_freshness.py +0 -0
  682. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gate_a.py +0 -0
  683. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gate_b.py +0 -0
  684. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gate_snapshot_staleness.py +0 -0
  685. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gates.py +0 -0
  686. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  687. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_gen_mock_index.py +0 -0
  688. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_generated_rust_fixture.py +0 -0
  689. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_generated_rust_requests.py +0 -0
  690. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_generated_types_fixture.py +0 -0
  691. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_github_ops.py +0 -0
  692. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_github_throttle.py +0 -0
  693. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_goal.py +0 -0
  694. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_graph_health.py +0 -0
  695. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_graph_selfheal_absent_2237.py +0 -0
  696. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_handoff.py +0 -0
  697. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_checks.py +0 -0
  698. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_cli.py +0 -0
  699. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_cli_graph.py +0 -0
  700. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_config.py +0 -0
  701. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_context.py +0 -0
  702. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_coord_tui_ci_pin.py +0 -0
  703. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_coord_web_ci_pin.py +0 -0
  704. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_deploy_lane_facts.py +0 -0
  705. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_fix.py +0 -0
  706. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_incident_regression.py +0 -0
  707. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_issues_sync_staleness.py +0 -0
  708. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_pr_churn.py +0 -0
  709. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_pypi.py +0 -0
  710. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_registry.py +0 -0
  711. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_release_cordon_probe.py +0 -0
  712. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_timer_active.py +0 -0
  713. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_toolchain.py +0 -0
  714. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_unit_drift.py +0 -0
  715. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_unit_enablement.py +0 -0
  716. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_health_wedged_drive_queue.py +0 -0
  717. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_hooks.py +0 -0
  718. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_housekeeping.py +0 -0
  719. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_human_attended_437.py +0 -0
  720. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_init.py +0 -0
  721. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_install_agent_venv_2911.py +0 -0
  722. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_integration.py +0 -0
  723. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive.py +0 -0
  724. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_briefing_echo.py +0 -0
  725. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_pane_log_2541.py +0 -0
  726. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_prefill_state.py +0 -0
  727. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_session_relaunch.py +0 -0
  728. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_test_verdict_backstop.py +0 -0
  729. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_token_attribution.py +0 -0
  730. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_interactive_worktree.py +0 -0
  731. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_invariant_alarms.py +0 -0
  732. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_issue_store_seam.py +0 -0
  733. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_issues_sync_status.py +0 -0
  734. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_liveness_auditor.py +0 -0
  735. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_liveness_notify.py +0 -0
  736. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_lock_contention_ratchet.py +0 -0
  737. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_machine_fault.py +0 -0
  738. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_machine_metrics.py +0 -0
  739. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_machine_onboard.py +0 -0
  740. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_machine_pause.py +0 -0
  741. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_machine_stats.py +0 -0
  742. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_merge_queue.py +0 -0
  743. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_merge_verify.py +0 -0
  744. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_milestone_chat.py +0 -0
  745. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_milestone_dispatch.py +0 -0
  746. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_milestone_gate.py +0 -0
  747. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_milestone_order.py +0 -0
  748. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_milestone_seam.py +0 -0
  749. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_mock_author.py +0 -0
  750. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_model_tiering.py +0 -0
  751. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_models.py +0 -0
  752. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_models_config_labels.py +0 -0
  753. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_needs_attention.py +0 -0
  754. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_network.py +0 -0
  755. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_new_issue_chat.py +0 -0
  756. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_next_release_tag.py +0 -0
  757. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_node_shim.py +0 -0
  758. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_baseline.py +0 -0
  759. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_cli.py +0 -0
  760. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_collect.py +0 -0
  761. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_config.py +0 -0
  762. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_drive_seam.py +0 -0
  763. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_isolation.py +0 -0
  764. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_predicate.py +0 -0
  765. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_quiet_hours.py +0 -0
  766. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notifier_service.py +0 -0
  767. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notify.py +0 -0
  768. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_notify_drain.py +0 -0
  769. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_openapi.py +0 -0
  770. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_operational_defaults.py +0 -0
  771. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_overlap_fence.py +0 -0
  772. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_overlap_predict.py +0 -0
  773. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_packaged_deploy_units.py +0 -0
  774. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_parentage.py +0 -0
  775. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_paste_landed.py +0 -0
  776. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  777. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_pipeline.py +0 -0
  778. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_plan_followup_approve_plan_command.py +0 -0
  779. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_plan_followup_pr_command.py +0 -0
  780. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_plan_followup_review_command.py +0 -0
  781. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_plan_only.py +0 -0
  782. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_plan_parser.py +0 -0
  783. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_platform_paths.py +0 -0
  784. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_portal_bridge.py +0 -0
  785. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_portal_config.py +0 -0
  786. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_portal_store.py +0 -0
  787. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_portal_sync.py +0 -0
  788. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_pr_body_lint.py +0 -0
  789. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_prereqs.py +0 -0
  790. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_production_db_guard.py +0 -0
  791. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_progress.py +0 -0
  792. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_provider_seam.py +0 -0
  793. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_providers.py +0 -0
  794. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_providers_config_labels.py +0 -0
  795. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_providers_pty.py +0 -0
  796. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_provision_core.py +0 -0
  797. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_provision_machine.py +0 -0
  798. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_py_rust_mirror_inventory.py +0 -0
  799. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_quiet_hours.py +0 -0
  800. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_quiet_hours_store_2146.py +0 -0
  801. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reap_merged_sessions.py +0 -0
  802. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reap_stale_interactive_tick.py +0 -0
  803. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile.py +0 -0
  804. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_branch.py +0 -0
  805. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_completions.py +0 -0
  806. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  807. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_merges.py +0 -0
  808. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_no_agent_record.py +0 -0
  809. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_tick.py +0 -0
  810. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reconcile_usage_limit_done.py +0 -0
  811. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_refine_chat.py +0 -0
  812. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_cordon_2101.py +0 -0
  813. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  814. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_cordon_deadlock_2240.py +0 -0
  815. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  816. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_cordon_stuck_2490.py +0 -0
  817. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_propagate.py +0 -0
  818. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_propagate_threshold.py +0 -0
  819. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_roll_between_legs_2854.py +0 -0
  820. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_roll_window_handoff.py +0 -0
  821. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_unified_1242.py +0 -0
  822. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_verify.py +0 -0
  823. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_release_window.py +0 -0
  824. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_remote_auto_prune.py +0 -0
  825. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_remote_interactive_reaper.py +0 -0
  826. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_add.py +0 -0
  827. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_dormancy.py +0 -0
  828. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_edit_2220.py +0 -0
  829. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_graph_fleet_2237.py +0 -0
  830. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_max_parallel_3423.py +0 -0
  831. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_repo_onboard_2220.py +0 -0
  832. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_report_result_push.py +0 -0
  833. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_reports.py +0 -0
  834. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_restart_cmd.py +0 -0
  835. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_retry.py +0 -0
  836. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_retry_advisory_1606.py +0 -0
  837. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_retry_escalation_classify_3360.py +0 -0
  838. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_retry_type_1636.py +0 -0
  839. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_revalidate.py +0 -0
  840. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review.py +0 -0
  841. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_end_review_without_verdict.py +0 -0
  842. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_parse_failure_diagnostic.py +0 -0
  843. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_reaffirm.py +0 -0
  844. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_state.py +0 -0
  845. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_verdict_backstop.py +0 -0
  846. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_verdict_override_audit.py +0 -0
  847. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_verdict_relay.py +0 -0
  848. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_review_zero_commits.py +0 -0
  849. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_scoped_review_wiring.py +0 -0
  850. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_scorecard.py +0 -0
  851. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_self_health.py +0 -0
  852. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_serve.py +0 -0
  853. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_serve_app.py +0 -0
  854. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_serve_app_board_trim.py +0 -0
  855. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_serve_rest_routes.py +0 -0
  856. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_session.py +0 -0
  857. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_slice_issue_attribution.py +0 -0
  858. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_smoke.py +0 -0
  859. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  860. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_smoke_live_checkout_restore.py +0 -0
  861. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_smoke_workflow.py +0 -0
  862. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_spend_ceiling.py +0 -0
  863. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_spend_ceiling_coordinator.py +0 -0
  864. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_split.py +0 -0
  865. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_split_work.py +0 -0
  866. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_sql_dialect.py +0 -0
  867. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_sqlite_connect_ratchet.py +0 -0
  868. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stage_projection.py +0 -0
  869. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stale_busy_reviewer_697.py +0 -0
  870. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stalled_pipeline.py +0 -0
  871. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_state.py +0 -0
  872. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_state_review_findings_daemon.py +0 -0
  873. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_status_fleet_footer.py +0 -0
  874. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stop_1567.py +0 -0
  875. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_store_contract.py +0 -0
  876. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_store_migrate.py +0 -0
  877. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stuck.py +0 -0
  878. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  879. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_terminal_command.py +0 -0
  880. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_author.py +0 -0
  881. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_chat.py +0 -0
  882. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_orchestrator.py +0 -0
  883. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_report.py +0 -0
  884. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_verdict_parsing.py +0 -0
  885. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_test_verdict_transcript_floor.py +0 -0
  886. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_text_io_encoding_audit.py +0 -0
  887. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_thin_client_board_audit.py +0 -0
  888. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_thin_client_config_load_1080.py +0 -0
  889. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_thin_client_daemon_routing_906.py +0 -0
  890. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_throwaway_vm.py +0 -0
  891. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_tmux_host.py +0 -0
  892. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_tmux_session.py +0 -0
  893. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_transcript_floor.py +0 -0
  894. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_uat_checks.py +0 -0
  895. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_usage.py +0 -0
  896. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_usage_limits.py +0 -0
  897. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_usage_rollup.py +0 -0
  898. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_venv_live_install_2121.py +0 -0
  899. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_version_single_source.py +0 -0
  900. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_watch.py +0 -0
  901. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  902. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worker_env_venv_isolation.py +0 -0
  903. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worker_events.py +0 -0
  904. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worker_image_pin_sync.py +0 -0
  905. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worker_safety.py +0 -0
  906. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worker_test_scoping.py +0 -0
  907. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worktree.py +0 -0
  908. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  909. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/test_write_parity.py +0 -0
  910. {code_coordinator-0.5.525 → code_coordinator-0.5.526}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.525
3
+ Version: 0.5.526
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.525
3
+ Version: 0.5.526
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.525",
2
+ "tag": "0.5.526",
3
3
  "distance": 0,
4
- "node": "g055bba5413e260e4e732234df5915c68b3c23459",
4
+ "node": "g693a401ada00646a0a947757928045708b6bde77",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-27"
@@ -4815,13 +4815,122 @@ def _index_merge_queue_by_key(rows: list, board: Any) -> dict[str, Any]:
4815
4815
  return indexed
4816
4816
 
4817
4817
 
4818
+ def _resolve_winning_work_row_for_blocked_entry(
4819
+ board: Any, repo_name: str, issue_number: int
4820
+ ) -> Any | None:
4821
+ """The same-branch "winner" (:func:`coord.merge_queue.
4822
+ group_branch_candidates`) among *board*'s completed work for
4823
+ ``(repo_name, issue_number)`` — resolved the same way :func:`coord.gates.
4824
+ build_gate_report`/:func:`_index_merge_queue_by_key` resolve an
4825
+ acceptance-slice's epic-keyed row (#3012): a match on the row's own
4826
+ ``issue_number`` OR its :func:`~coord.models.effective_issue_number`.
4827
+
4828
+ ``None`` when *board* carries no matching :data:`~coord.models.
4829
+ WORK_LIKE_TYPES` ``done`` row at all — the caller's signal that there is
4830
+ genuinely nothing here to evaluate (#3460).
4831
+ """
4832
+ from coord.models import WORK_LIKE_TYPES, effective_issue_number # noqa: PLC0415
4833
+
4834
+ from coord import merge_queue as _mq # noqa: PLC0415
4835
+
4836
+ completed = list(getattr(board, "completed", None) or [])
4837
+ matches = [
4838
+ a for a in completed
4839
+ if getattr(a, "repo_name", None) == repo_name
4840
+ and getattr(a, "type", None) in WORK_LIKE_TYPES
4841
+ and getattr(a, "status", None) == "done"
4842
+ and (
4843
+ getattr(a, "issue_number", None) == issue_number
4844
+ or effective_issue_number(a) == issue_number
4845
+ )
4846
+ ]
4847
+ if not matches:
4848
+ return None
4849
+ groups = _mq.group_branch_candidates(matches)
4850
+ if not groups:
4851
+ return None
4852
+ # #3460: matches are already scoped to one (repo, issue) pair, so every
4853
+ # group here is on the SAME branch in the overwhelming common case; the
4854
+ # rare "the issue's work moved branches across relaunches" shape just
4855
+ # picks the first (oldest-seen) branch group's own winner rather than
4856
+ # inventing a cross-branch tie-break this sweep has no stake in.
4857
+ winner, _superseded = groups[0]
4858
+ return winner
4859
+
4860
+
4861
+ def _evaluate_blocked_entry_without_a_queue_row(
4862
+ e: Any, board: Any, cfg: Any, gh_ops: Any
4863
+ ) -> tuple[bool, str] | None:
4864
+ """#3460's no-queue-row fallback: when neither the queue nor the #2806
4865
+ self-heal produced a row for *e*, this is the difference between an
4866
+ honest "unreadable" (there is truly nothing to read) and the false one
4867
+ the #3460 incident reported — a gate that was, in fact, genuinely still
4868
+ shut (quadraui#1081: review request-changes outstanding, Test failed,
4869
+ fix rounds exhausted, and — because ``enqueue_approved_work``'s own
4870
+ self-heal drops any row that fails the review/smoke gates,
4871
+ ``coord/merge_queue.py:4973`` — NO queue row will EVER exist for it).
4872
+
4873
+ Resolves the branch's winning work row directly
4874
+ (:func:`_resolve_winning_work_row_for_blocked_entry`) and evaluates it
4875
+ with the exact gates :func:`coord.merge_queue.enqueue_approved_work`
4876
+ itself checks — :func:`coord.merge_queue.live_gate_entry` (the #2085
4877
+ live-anchored synthetic entry) + :func:`coord.merge_queue.
4878
+ merge_gate_failures` (the reason-carrying twin of ``passes_merge_gates``,
4879
+ #946) — so this can never disagree with what ``enqueue_approved_work``
4880
+ itself would have concluded.
4881
+
4882
+ Returns ``(True, reason)`` — CONFIRMED still shut, *reason* naming every
4883
+ failing gate — when :func:`merge_gate_failures` finds any. Returns
4884
+ ``(False, reason)`` when it finds none: the winning row clears every
4885
+ gate this sweep can check without a PR (CI is per-PR only, #1150), which
4886
+ mirrors exactly what would make ``enqueue_approved_work`` enqueue it —
4887
+ confirmed CLEAR, not "unreadable" (there is nothing left unresolved).
4888
+ Returns ``None`` — genuinely nothing to report — only when there is no
4889
+ winning work row at all (:func:`_resolve_winning_work_row_for_blocked_entry`
4890
+ returns ``None``) or this evaluation itself raises; the caller falls
4891
+ back to its own "no merge-queue row" unreadable note for either.
4892
+ """
4893
+ from coord import merge_queue as _mq # noqa: PLC0415
4894
+
4895
+ winner = _resolve_winning_work_row_for_blocked_entry(board, e.repo, e.issue)
4896
+ if winner is None:
4897
+ return None
4898
+ repo_cfg = cfg.repo(e.repo)
4899
+ if repo_cfg is None:
4900
+ return None
4901
+ from coord.branch_model import resolve_base_branch_for_issue_number # noqa: PLC0415
4902
+
4903
+ target_branch = resolve_base_branch_for_issue_number(
4904
+ repo_cfg, repo_cfg.github, getattr(winner, "issue_number", 0)
4905
+ )
4906
+ gate_entry = _mq.live_gate_entry(winner, repo_cfg.github, target_branch, gh_ops)
4907
+ failures = _mq.merge_gate_failures(gate_entry, cfg, board, gh_ops=gh_ops)
4908
+ if failures:
4909
+ return True, _mq.describe_merge_gate_failures(failures)
4910
+ return (
4911
+ False,
4912
+ "the branch's winning work row clears review/smoke/uat with no "
4913
+ "merge-queue row yet to check CI against (#3460)",
4914
+ )
4915
+
4916
+
4818
4917
  def _fetch_live_blocked_gate(
4819
4918
  entries: list, config_path: Path | None
4820
- ) -> tuple[dict[str, bool], dict[str, str]]:
4821
- """``({entry_key: still_blocked}, {entry_key: unreadable_reason})`` for
4822
- every RE-EVALUABLE ``blocked`` entry (#2230) — the counterpart of
4823
- :func:`_fetch_live_ci_gate` above: same mechanism, same bound, a
4824
- different queue state.
4919
+ ) -> tuple[dict[str, bool], dict[str, str], dict[str, str]]:
4920
+ """``({entry_key: still_blocked}, {entry_key: gate_reason},
4921
+ {entry_key: unreadable_reason})`` for every RE-EVALUABLE ``blocked``
4922
+ entry (#2230) — the counterpart of :func:`_fetch_live_ci_gate` above:
4923
+ same mechanism, same bound, a different queue state.
4924
+
4925
+ THE SECOND DICT (#3460) is *live_ci_gate*/*live_ci_gate_reason*'s own
4926
+ split, mirrored here: whatever reason text produced the first dict's
4927
+ bool — from a direct :func:`coord.merge_queue.entry_gate_status` read
4928
+ when a queue row exists, or from :func:`
4929
+ _evaluate_blocked_entry_without_a_queue_row` when none does — so a
4930
+ CONFIRMED still-shut reading is never reported gate-reason-less the way
4931
+ the #3460 incident's "unconfirmed probe failure" text was. Present for
4932
+ every key also present in the first dict (whichever way it reads);
4933
+ absent otherwise, exactly like its CI-gate sibling.
4825
4934
 
4826
4935
  THE GAP THIS CLOSES. `blocked` used to be terminal: once
4827
4936
  `_reconcile_running` exhausted an entry's attempts, nothing ever asked
@@ -4872,32 +4981,49 @@ def _fetch_live_blocked_gate(
4872
4981
  every such target is looked up again against the refreshed queue before
4873
4982
  this function concedes it has nothing.
4874
4983
 
4875
- #2806 VISIBILITY. `_fetch_live_ci_gate`'s sibling docstring, and this
4876
- one before #2806, both describe "a key ABSENT" as if it were one thing —
4877
- it is actually at least four (no queue row even after the self-heal
4878
- above, no PR number yet, `entry_gate_status` raising, or the whole
4879
- fetch failing closed before any entry is even tried) and NONE of them
4880
- used to be logged anywhere, so a run of them looked, from the tick's own
4881
- output, identical to the gate genuinely still being shut. Every one is
4882
- now (a) logged here, so `journalctl` names the actual cause instead of
4883
- silence, and (b) surfaced in the second returned dict, keyed by entry,
4884
- with a short human-readable reason — :func:`coord.drive_queue.
4885
- _reconcile_blocked_unreadable` turns a present key there into a
4886
- distinct, operator-visible "could not read this gate" outcome instead
4887
- of folding it into "still shut" the way an absent key from the FIRST
4888
- dict alone always has and still does (see that function's docstring for
4889
- why the two must never render identically).
4984
+ #2806/#3460 VISIBILITY. `_fetch_live_ci_gate`'s sibling docstring, and
4985
+ this one before #2806, both described "a key ABSENT" as if it were one
4986
+ thing — it is actually several (no work row at all behind a missing
4987
+ queue row, that row's own evaluation raising, a queue row whose CI
4988
+ can't be confirmed without a PR, `entry_gate_status` raising, or the
4989
+ whole fetch failing closed before any entry is even tried) and NONE of
4990
+ them used to be logged anywhere, so a run of them looked, from the
4991
+ tick's own output, identical to the gate genuinely still being shut.
4992
+ Every one is now (a) logged here, so `journalctl` names the actual
4993
+ cause instead of silence, and (b) surfaced in the THIRD returned dict,
4994
+ keyed by entry, with a short human-readable reason — :func:`coord.
4995
+ drive_queue._reconcile_blocked_unreadable` turns a present key there
4996
+ into a distinct, operator-visible "could not read this gate" outcome
4997
+ instead of folding it into "still shut" the way an absent key from the
4998
+ FIRST dict alone always has and still does (see that function's
4999
+ docstring for why the two must never render identically).
5000
+
5001
+ #3460's fix is entirely about SHRINKING this third dict's population in
5002
+ favour of the first two: the #3460 incident (quadraui#1081) was exactly
5003
+ a confirmed-still-shut gate — review request-changes outstanding, Test
5004
+ failed — reported as "unreadable" purely because ``enqueue_approved_
5005
+ work``'s #2806 self-heal above can never produce a queue row for a work
5006
+ row that fails the review/smoke gates (that self-heal enqueues ONLY
5007
+ gate-clear work — `coord/merge_queue.py:4973`), and a queue row without
5008
+ a PR number used to be conceded unreadable outright even though every
5009
+ gate but CI is answerable without one. Both shapes now get a direct
5010
+ evaluation first (:func:`_evaluate_blocked_entry_without_a_queue_row`
5011
+ for the former; a direct :func:`coord.merge_queue.entry_gate_status`
5012
+ call for the latter, since that function only *skips* its CI/epic-
5013
+ keyword checks without a PR — #1150 — it doesn't refuse to run without
5014
+ one) — "unreadable" is now reserved for when that evaluation itself
5015
+ finds genuinely nothing, or raises.
4890
5016
 
4891
5017
  Same fail-open-per-entry, fail-closed-overall contract as
4892
5018
  `_fetch_live_ci_gate` otherwise: a key ABSENT from the FIRST dict (no
4893
- queue row, no PR yet, a `ci_store` that failed to build, any exception)
4894
- leaves that entry to `plan_tick`'s cheap board-only fallback
4895
- (`IssueFacts.merge_gate_status`, populated for free on a thin client's
4896
- live `/board`) — which on the daemon-host tick (the only host this
4897
- actually runs on, `docs/DRIVE_QUEUE.md` §2) has no `merge_plan` section
4898
- to read at all, so an absent key there means "no evidence, stays
4899
- blocked, but distinctly reported as unreadable when the second dict
4900
- says why" (`_reconcile_blocked` never guesses at a gate reading).
5019
+ work row behind a missing queue row, a `ci_store` that failed to build,
5020
+ any exception) leaves that entry to `plan_tick`'s cheap board-only
5021
+ fallback (`IssueFacts.merge_gate_status`, populated for free on a thin
5022
+ client's live `/board`) — which on the daemon-host tick (the only host
5023
+ this actually runs on, `docs/DRIVE_QUEUE.md` §2) has no `merge_plan`
5024
+ section to read at all, so an absent key there means "no evidence,
5025
+ stays blocked, but distinctly reported as unreadable when the third
5026
+ dict says why" (`_reconcile_blocked` never guesses at a gate reading).
4901
5027
  """
4902
5028
  targets = [
4903
5029
  e for e in entries
@@ -4905,12 +5031,12 @@ def _fetch_live_blocked_gate(
4905
5031
  and not is_permanent_block_reason(getattr(e, "last_reason", "") or "")
4906
5032
  ]
4907
5033
  if not targets:
4908
- return {}, {}
5034
+ return {}, {}, {}
4909
5035
 
4910
5036
  from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
4911
5037
 
4912
5038
  if resolve_board_service() is not None:
4913
- return {}, {}
5039
+ return {}, {}, {}
4914
5040
 
4915
5041
  try:
4916
5042
  from coord import github_ops as _gh_ops # noqa: PLC0415
@@ -4932,7 +5058,7 @@ def _fetch_live_blocked_gate(
4932
5058
  "back to the board-only reading, unreadable: %r",
4933
5059
  len(targets), "y" if len(targets) == 1 else "ies", exc,
4934
5060
  )
4935
- return {}, {}
5061
+ return {}, {}, {}
4936
5062
 
4937
5063
  # #2806 self-heal: mirror `coord merge --only`'s #1845 fix — a target
4938
5064
  # with no queue row yet may simply not have been enqueued by
@@ -4950,10 +5076,38 @@ def _fetch_live_blocked_gate(
4950
5076
  )
4951
5077
 
4952
5078
  overrides: dict[str, bool] = {}
5079
+ reasons: dict[str, str] = {}
4953
5080
  unreadable: dict[str, str] = {}
4954
5081
  for e in targets:
4955
5082
  q = queue_by_key.get(e.key)
4956
5083
  if q is None:
5084
+ # #3460: the self-heal above never produces a row for a work row
5085
+ # that fails the review/smoke gates (`enqueue_approved_work`
5086
+ # only enqueues gate-clear work) — exactly the shape this sweep
5087
+ # most needs to confirm. Evaluate the branch's winning work row
5088
+ # directly before conceding "unreadable".
5089
+ resolved = None
5090
+ if not is_pre_dispatch_block_reason(getattr(e, "last_reason", "") or ""):
5091
+ try:
5092
+ resolved = _evaluate_blocked_entry_without_a_queue_row(
5093
+ e, board, cfg, _gh_ops
5094
+ )
5095
+ except Exception as exc: # noqa: BLE001 — falls to "unreadable" below
5096
+ log.warning(
5097
+ "blocked-gate sweep (#3460): %s — evaluating the "
5098
+ "winning work row directly raised: %r", e.key, exc,
5099
+ )
5100
+ resolved = None
5101
+ if resolved is not None:
5102
+ shut, reason = resolved
5103
+ overrides[e.key] = shut
5104
+ reasons[e.key] = reason
5105
+ log.info(
5106
+ "blocked-gate sweep (#3460): %s — no merge-queue row, "
5107
+ "but its winning work row evaluates directly: %s",
5108
+ e.key, reason,
5109
+ )
5110
+ continue
4957
5111
  reason = "no merge-queue row for this entry, even after the self-heal enqueue attempt"
4958
5112
  # #2589/#2635: a genuinely pre-dispatch cause (no branch/PR was
4959
5113
  # EVER created) will never have a merge-queue row, forever — that
@@ -4971,20 +5125,36 @@ def _fetch_live_blocked_gate(
4971
5125
  unreadable[e.key] = reason
4972
5126
  log.warning("blocked-gate sweep (#2806): %s — %s", e.key, reason)
4973
5127
  continue
4974
- if not q.pr_number:
4975
- reason = "merge-queue row has no PR number yet"
4976
- unreadable[e.key] = reason
4977
- log.warning("blocked-gate sweep (#2806): %s — %s", e.key, reason)
4978
- continue
4979
5128
  try:
4980
- status, _reason = _mq.entry_gate_status(q, board, cfg, ci_store, _gh_ops)
5129
+ status, gate_reason = _mq.entry_gate_status(q, board, cfg, ci_store, _gh_ops)
4981
5130
  except Exception as exc: # noqa: BLE001 — leave this one entry to the fallback
4982
5131
  reason = f"entry_gate_status raised: {exc!r}"
4983
5132
  unreadable[e.key] = reason
4984
5133
  log.warning("blocked-gate sweep (#2806): %s — %s", e.key, reason)
4985
5134
  continue
4986
- overrides[e.key] = status != _mq.PLAN_READY
4987
- return overrides, unreadable
5135
+ if status == _mq.PLAN_BLOCKED:
5136
+ # #3460: confirmed still shut regardless of whether *q* carries
5137
+ # a PR yet — `entry_gate_status` only *skips* its CI/epic-
5138
+ # keyword checks without one (#1150: CI is checked per-PR), it
5139
+ # never refuses to evaluate the review/smoke/uat gates that
5140
+ # already produced this BLOCKED verdict.
5141
+ overrides[e.key] = True
5142
+ if gate_reason:
5143
+ reasons[e.key] = gate_reason
5144
+ continue
5145
+ # status == PLAN_READY. Confirmed clear only when a PR exists to
5146
+ # confirm CI against — without one, "ready" only means "every gate
5147
+ # this call could check without a PR is clear", which is NOT the
5148
+ # same claim `_blocked_gate_reading`'s `False` makes to the resume
5149
+ # path (#1150 applies to `enqueue_approved_work`'s own enqueue
5150
+ # decision, not to promising a live merge would succeed).
5151
+ if not q.pr_number:
5152
+ reason = "merge-queue row has no PR number yet (CI unverifiable without a PR)"
5153
+ unreadable[e.key] = reason
5154
+ log.warning("blocked-gate sweep (#2806): %s — %s", e.key, reason)
5155
+ continue
5156
+ overrides[e.key] = False
5157
+ return overrides, reasons, unreadable
4988
5158
 
4989
5159
 
4990
5160
  def _fetch_live_prereq_terminal(
@@ -6556,8 +6726,8 @@ def drive_queue_tick(
6556
6726
  # entries — see `_fetch_live_blocked_gate`'s docstring for the gap
6557
6727
  # this closes (quadraui#309 sat `blocked` ~11h on a merge that was
6558
6728
  # landable for most of that window, and nothing ever looked again).
6559
- live_blocked_gate, live_blocked_unreadable = _fetch_live_blocked_gate(
6560
- entries, config_path
6729
+ live_blocked_gate, live_blocked_gate_reason, live_blocked_unreadable = (
6730
+ _fetch_live_blocked_gate(entries, config_path)
6561
6731
  )
6562
6732
 
6563
6733
  # #2350: for every entry the two live re-checks above just found
@@ -6618,6 +6788,7 @@ def drive_queue_tick(
6618
6788
  live_ci_gate=live_ci_gate,
6619
6789
  live_ci_gate_reason=live_ci_gate_reason,
6620
6790
  live_blocked_gate=live_blocked_gate,
6791
+ live_blocked_gate_reason=live_blocked_gate_reason,
6621
6792
  live_blocked_unreadable=live_blocked_unreadable,
6622
6793
  editable_drift=editable_drift,
6623
6794
  merge_only_ready=merge_only_ready,
@@ -5327,6 +5327,44 @@ def _blocked_gate_reading(
5327
5327
  return None
5328
5328
 
5329
5329
 
5330
+ # #3460: the separator this module uses whenever it needs to layer a
5331
+ # fresh, THIS-TICK-ONLY note (the #2806 "could not be read" verdict below,
5332
+ # or :func:`_reconcile_blocked`'s own "confirmed still shut" gate detail) on
5333
+ # top of a `blocked` entry's ORIGINAL block cause, without ever destroying
5334
+ # that cause the way a bare ``last_reason: reason`` overwrite used to
5335
+ # (claude-coordinator#3460, quadraui#1081: the #2806 write below replaced a
5336
+ # #2972 fix-round-ceiling give-up's own text outright, and every later
5337
+ # tick's `is_permanent_block_reason`/`is_fix_round_ceiling_reason`/
5338
+ # `is_pre_dispatch_block_reason` classification — which reads ONLY
5339
+ # `last_reason` — could then never recognise the row again).
5340
+ # :func:`_strip_blocked_gate_probe_note` removes any note a PREVIOUS tick
5341
+ # appended this same way before a new one is computed, so an unchanged
5342
+ # verdict across many ticks rewrites the identical string rather than
5343
+ # growing it forever.
5344
+ _BLOCKED_GATE_PROBE_NOTE_SEP = " — this tick's merge-gate probe: "
5345
+
5346
+
5347
+ def _strip_blocked_gate_probe_note(text: str | None) -> str:
5348
+ """*text* with any :data:`_BLOCKED_GATE_PROBE_NOTE_SEP`-delimited note a
5349
+ previous tick appended (via :func:`_with_blocked_gate_probe_note`)
5350
+ removed, leaving only the entry's original block cause."""
5351
+ base, _sep, _note = (text or "").partition(_BLOCKED_GATE_PROBE_NOTE_SEP)
5352
+ return base.rstrip()
5353
+
5354
+
5355
+ def _with_blocked_gate_probe_note(original: str | None, note: str) -> str:
5356
+ """*original* (an entry's ``last_reason``) with *note* — this tick's
5357
+ gate-probe finding — appended, after first stripping any note an
5358
+ earlier tick appended the same way (see :data:`_BLOCKED_GATE_PROBE_NOTE_SEP`).
5359
+
5360
+ The entry's own original cause is NEVER discarded: when there is one,
5361
+ *note* is layered on top of it, never in place of it; when there is
5362
+ none (``original`` empty), *note* stands alone.
5363
+ """
5364
+ base = _strip_blocked_gate_probe_note(original)
5365
+ return f"{base}{_BLOCKED_GATE_PROBE_NOTE_SEP}{note}" if base else note
5366
+
5367
+
5330
5368
  def _reconcile_blocked_unreadable(
5331
5369
  entry: QueueEntry, live_blocked_unreadable: Mapping[str, str] | None
5332
5370
  ) -> Reconcile | None:
@@ -5374,15 +5412,27 @@ def _reconcile_blocked_unreadable(
5374
5412
  `oscillating` outcome's own channel — #2230's "no second alert channel"
5375
5413
  posture) every tick the condition holds, the same posture `oscillating`
5376
5414
  already takes for its own distinct-from-silence signal.
5415
+
5416
+ #3460: this write no longer REPLACES `last_reason` wholesale — it
5417
+ layers the probe note on top of whatever cause was already recorded
5418
+ (:func:`_with_blocked_gate_probe_note`), so a #2972 fix-round-ceiling
5419
+ give-up (or any other marker/classifier text a later tick needs to
5420
+ recognise this row by) survives an unreadable probe intact. Before this,
5421
+ the incident's own root cause — the #2806 self-heal above can never
5422
+ enqueue a row whose Work fails the review/smoke gates, so exactly the
5423
+ entries most worth confirming "still shut" were the ones perpetually
5424
+ reported "unreadable" — compounded with a SECOND bug: every such tick
5425
+ also erased the real cause it was reporting on.
5377
5426
  """
5378
5427
  note = (live_blocked_unreadable or {}).get(entry.key)
5379
5428
  if not note:
5380
5429
  return None
5381
- reason = (
5430
+ probe_note = (
5382
5431
  f"{entry.key}'s merge gate could not be read this tick ({note}) — "
5383
5432
  f"this is {_UNCONFIRMED_BLOCK_MARKER}; "
5384
5433
  "#2230's sweep will try again next tick rather than guessing (#2806)"
5385
5434
  )
5435
+ reason = _with_blocked_gate_probe_note(entry.last_reason, probe_note)
5386
5436
  return Reconcile(
5387
5437
  entry.key,
5388
5438
  "gate_unreadable",
@@ -5398,14 +5448,16 @@ def _reconcile_blocked(
5398
5448
  live_blocked_gate: Mapping[str, bool] | None,
5399
5449
  merge_only_ready: Mapping[str, bool] | None = None,
5400
5450
  live_blocked_unreadable: Mapping[str, str] | None = None,
5451
+ live_blocked_gate_reason: Mapping[str, str] | None = None,
5401
5452
  ) -> Reconcile | None:
5402
5453
  """Re-examine ONE `blocked` entry against the current gate reading.
5403
5454
 
5404
5455
  Returns ``None`` — nothing to report, nothing to write — in every case
5405
- except a CONFIRMED-clear reading OR a probe that came back unreadable
5406
- (#2806), which is deliberate: a `blocked` entry this sweep cannot say
5407
- anything new about must render EXACTLY as it did before #2230 existed.
5408
- Four ways to land there:
5456
+ except a CONFIRMED-clear reading, a probe that came back unreadable
5457
+ (#2806), or a CONFIRMED-still-shut reading that ALSO carries a fresh
5458
+ *live_blocked_gate_reason* (#3460), which is deliberate: a `blocked`
5459
+ entry this sweep cannot say anything NEW about must render EXACTLY as it
5460
+ did before #2230 existed. Four ways to land on plain ``None``:
5409
5461
 
5410
5462
  * the block is PERMANENT (:func:`is_permanent_block_reason`) — #1844's
5411
5463
  guard refusal or #2019's dead end — neither of which any amount of
@@ -5428,8 +5480,12 @@ def _reconcile_blocked(
5428
5480
  nothing this sweep can cheaply re-check, and guessing would be
5429
5481
  exactly the "worse than nothing" sweep the issue warns a naive
5430
5482
  "retry everything" pass would be;
5431
- * the gate is CONFIRMED still shut — the common, honest outcome for a
5432
- `blocked` entry that has not in fact recovered yet.
5483
+ * the gate is CONFIRMED still shut, but *live_blocked_gate_reason*
5484
+ carries no fresh reason for it (either the reading came off the
5485
+ cached board's own `facts.merge_gate_status`/`merge_ci_pending`, or
5486
+ the shell's live re-check simply had nothing new to say) — the
5487
+ common, honest outcome for a `blocked` entry that has not in fact
5488
+ recovered yet, with nothing new worth writing.
5433
5489
 
5434
5490
  #2806: when there is no evidence either way BUT the shell's live probe
5435
5491
  was actually attempted against this entry and came back empty (as
@@ -5438,6 +5494,20 @@ def _reconcile_blocked(
5438
5494
  folded into "still shut". See its own docstring for why the two must
5439
5495
  not render identically to an operator.
5440
5496
 
5497
+ #3460: when the gate IS confirmed still shut AND *live_blocked_gate_
5498
+ reason* carries a fresh reason for this key — the shell's live
5499
+ ``entry_gate_status``/direct-evaluation read named WHICH gate(s) are
5500
+ still failing and why — this writes `last_reason` too, layering that
5501
+ reason on top of the entry's existing cause
5502
+ (:func:`_with_blocked_gate_probe_note`, never replacing it). Before
5503
+ this, a confirmed-still-shut reading was reported identically to "no
5504
+ evidence at all" (plain silence), which is how the #3460 incident's
5505
+ root cause hid: the SHELL was misclassifying a genuinely
5506
+ confirmed-still-shut gate as an unconfirmed probe failure, and once
5507
+ fixed there, this half makes the correct classification visible on
5508
+ `coord drive-queue list`/`status` too, instead of leaving the entry's
5509
+ possibly-stale original `last_reason` as the only thing shown.
5510
+
5441
5511
  Only a confirmed-clear reading does anything else, and even then only up
5442
5512
  to :data:`MAX_BLOCKED_RESUMES` — past that ceiling the entry stays
5443
5513
  `blocked`, but its `last_reason` is rewritten to say so out loud (the
@@ -5514,7 +5584,28 @@ def _reconcile_blocked(
5514
5584
  if reading is None:
5515
5585
  return _reconcile_blocked_unreadable(entry, live_blocked_unreadable)
5516
5586
  if reading:
5517
- return None
5587
+ # #3460: confirmed still shut. Silent (render exactly as before
5588
+ # #2230/#2806) unless the shell's live re-check also named WHY —
5589
+ # see the docstring above and `_with_blocked_gate_probe_note` for
5590
+ # why this layers the reason on top of `last_reason` rather than
5591
+ # replacing it.
5592
+ live_reason = (live_blocked_gate_reason or {}).get(entry.key)
5593
+ if not live_reason:
5594
+ return None
5595
+ probe_note = (
5596
+ f"{entry.key}'s merge gate is confirmed still shut this tick: "
5597
+ f"{live_reason} (#3460)"
5598
+ )
5599
+ reason = _with_blocked_gate_probe_note(entry.last_reason, probe_note)
5600
+ if reason == entry.last_reason:
5601
+ return None
5602
+ return Reconcile(
5603
+ entry.key,
5604
+ "gate_confirmed_shut",
5605
+ reason,
5606
+ occupies=False,
5607
+ updates={"last_reason": reason},
5608
+ )
5518
5609
 
5519
5610
  if entry.resumes >= MAX_BLOCKED_RESUMES:
5520
5611
  reason = (
@@ -5975,6 +6066,7 @@ def plan_tick(
5975
6066
  live_ci_gate: Mapping[str, bool] | None = None,
5976
6067
  live_ci_gate_reason: Mapping[str, str] | None = None,
5977
6068
  live_blocked_gate: Mapping[str, bool] | None = None,
6069
+ live_blocked_gate_reason: Mapping[str, str] | None = None,
5978
6070
  live_blocked_unreadable: Mapping[str, str] | None = None,
5979
6071
  editable_drift: tuple[str, str] | None = None,
5980
6072
  merge_only_ready: Mapping[str, bool] | None = None,
@@ -6137,6 +6229,17 @@ def plan_tick(
6137
6229
  beats the cached board's `IssueFacts.merge_gate_status`; absent falls
6138
6230
  through to it. See :func:`_blocked_gate_reading`.
6139
6231
 
6232
+ *live_blocked_gate_reason* (#3460) is *live_blocked_gate*'s own
6233
+ `live_ci_gate_reason` counterpart: the reason text behind whichever way
6234
+ the SAME fresh read came back, for a key also present in
6235
+ *live_blocked_gate*. Used only when that reading is CONFIRMED still
6236
+ shut (`True`) — :func:`_reconcile_blocked` surfaces it so a `blocked`
6237
+ entry whose gate the #3460 incident's sweep bug used to misreport as an
6238
+ "unconfirmed probe failure" now shows the real cause (which gate, and
6239
+ why) instead, without discarding the entry's own original block reason.
6240
+ A key ABSENT here changes nothing: exactly the pre-#3460 silent
6241
+ "confirmed shut, nothing new to say" rendering.
6242
+
6140
6243
  *live_blocked_unreadable* (#2806) maps a `blocked` entry's key to a
6141
6244
  short human-readable reason the shell's live probe for THAT entry was
6142
6245
  attempted this tick but came back with no evidence at all — a key
@@ -6526,6 +6629,7 @@ def plan_tick(
6526
6629
  live_blocked_gate,
6527
6630
  merge_only_ready,
6528
6631
  live_blocked_unreadable,
6632
+ live_blocked_gate_reason,
6529
6633
  )
6530
6634
  if blocked_reconcile is not None:
6531
6635
  reconciles.append(blocked_reconcile)