code-coordinator 0.5.542__tar.gz → 0.5.544__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 (912) hide show
  1. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/milestone.py +56 -3
  5. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/drive.py +36 -0
  6. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/milestone_dispatch.py +145 -20
  7. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/milestone_order.py +13 -5
  8. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/serve_app.py +60 -13
  9. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_order.py +94 -5
  10. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive.py +85 -4
  11. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_milestone_dispatch.py +125 -0
  12. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_milestone_gate.py +96 -0
  13. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/.gitignore +0 -0
  26. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/GOAL.md +0 -0
  28. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/LICENSE +0 -0
  29. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/README.md +0 -0
  31. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/backup.py +0 -0
  51. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/client.py +0 -0
  67. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/config.py +0 -0
  106. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/db.py +0 -0
  116. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-backup.service +0 -0
  121. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-backup.timer +0 -0
  122. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-dr-verify.service +0 -0
  126. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-dr-verify.timer +0 -0
  127. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deprecation_telemetry.py +0 -0
  145. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/deps.py +0 -0
  146. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/diagnose.py +0 -0
  147. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dispatch.py +0 -0
  148. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dispatch_liveness.py +0 -0
  149. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dr_promote.py +0 -0
  151. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/dr_verify.py +0 -0
  152. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/drive_queue.py +0 -0
  153. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/drive_sessions_snapshot.py +0 -0
  154. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/events.py +0 -0
  156. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/gates.py +0 -0
  166. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/gen_board_fixture.py +0 -0
  167. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/github_ops.py +0 -0
  168. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/github_throttle.py +0 -0
  169. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/goal.py +0 -0
  170. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/graph_health.py +0 -0
  171. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/local_machine_identity.py +0 -0
  192. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/plan_usage.py +0 -0
  193. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/pr_churn.py +0 -0
  194. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/release_cordon.py +0 -0
  195. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/repo_state.py +0 -0
  196. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/spawned_coord.py +0 -0
  197. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/stalled_pipeline.py +0 -0
  198. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/timer_active.py +0 -0
  199. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/toolchain.py +0 -0
  200. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/unit_drift.py +0 -0
  201. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/unit_enablement.py +0 -0
  202. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/wedged_drive_queue.py +0 -0
  203. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/checks/worktrees.py +0 -0
  204. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/cli.py +0 -0
  205. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/context.py +0 -0
  206. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/fleet_snapshot.py +0 -0
  207. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/models.py +0 -0
  208. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/pypi.py +0 -0
  209. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/registry.py +0 -0
  210. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/render.py +0 -0
  211. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/health/units.py +0 -0
  212. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/hooks.py +0 -0
  213. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/housekeeping.py +0 -0
  214. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/interactive.py +0 -0
  215. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/invariant_alarms.py +0 -0
  216. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/issue_store.py +0 -0
  217. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/issues_sync_status.py +0 -0
  218. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/liveness_auditor.py +0 -0
  219. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/machine_fault.py +0 -0
  220. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/machine_metrics.py +0 -0
  221. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/machine_onboard.py +0 -0
  222. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/machine_pause.py +0 -0
  223. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/machine_stats.py +0 -0
  224. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/merge_queue.py +0 -0
  225. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/milestone_chat.py +0 -0
  226. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/mock_author.py +0 -0
  228. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/models.py +0 -0
  229. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/network.py +0 -0
  230. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/new_issue_chat.py +0 -0
  231. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/__init__.py +0 -0
  232. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/baseline.py +0 -0
  233. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/cli.py +0 -0
  234. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/collect.py +0 -0
  235. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/digest.py +0 -0
  236. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/models.py +0 -0
  237. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/predicate.py +0 -0
  238. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/service.py +0 -0
  239. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/store.py +0 -0
  240. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notifier/transport.py +0 -0
  241. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/notify.py +0 -0
  242. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/openapi.py +0 -0
  243. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/overlap_fence.py +0 -0
  244. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/overlap_predict.py +0 -0
  245. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/parentage.py +0 -0
  246. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/parentage_github.py +0 -0
  247. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/pipeline.py +0 -0
  248. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/plan_parser.py +0 -0
  249. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/plans.py +0 -0
  250. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/platform_paths.py +0 -0
  251. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/portal_bridge.py +0 -0
  252. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/portal_store.py +0 -0
  253. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/portal_sync.py +0 -0
  254. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/pr_body_lint.py +0 -0
  255. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/prereqs.py +0 -0
  256. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/progress.py +0 -0
  257. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/providers/__init__.py +0 -0
  258. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/providers/base.py +0 -0
  259. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/providers/claude.py +0 -0
  260. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/providers/claude_pty.py +0 -0
  261. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/providers/opencode.py +0 -0
  262. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/queue_diagnose.py +0 -0
  263. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/reconcile.py +0 -0
  264. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/reconcile_tick.py +0 -0
  265. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/refine_chat.py +0 -0
  266. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/release_cordon.py +0 -0
  267. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/release_propagate.py +0 -0
  268. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/release_verify.py +0 -0
  269. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/release_window.py +0 -0
  270. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/repo_dormancy.py +0 -0
  271. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/repo_edit.py +0 -0
  272. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/repo_onboard.py +0 -0
  273. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/reports.py +0 -0
  274. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/rest_schema.py +0 -0
  275. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/restart_cmd.py +0 -0
  276. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/revalidate.py +0 -0
  277. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/review.py +0 -0
  278. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/scorecard.py +0 -0
  279. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/self_health.py +0 -0
  280. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  281. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  282. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  283. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  285. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/portal-followup/SKILL.md +0 -0
  286. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/release-now/SKILL.md +0 -0
  287. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  288. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  289. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/skills/update-issue/SKILL.md +0 -0
  290. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/smoke.py +0 -0
  291. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/smoke_tags.py +0 -0
  292. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/spend_ceiling.py +0 -0
  293. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/split_work.py +0 -0
  294. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/sql.py +0 -0
  295. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/stage_projection.py +0 -0
  296. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/state.py +0 -0
  297. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/store_migrate.py +0 -0
  298. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/store_parity.py +0 -0
  299. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/templates/deploy-cloudflare.node.yml +0 -0
  300. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/test_author.py +0 -0
  301. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/test_chat.py +0 -0
  302. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/test_orchestrator.py +0 -0
  303. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/test_report.py +0 -0
  304. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/tui_release.py +0 -0
  305. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/uat_checks.py +0 -0
  306. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/usage.py +0 -0
  307. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/usage_limits.py +0 -0
  308. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/usage_rollup.py +0 -0
  309. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coord/worker_events.py +0 -0
  310. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/coordinator.example.yml +0 -0
  311. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-agent.service +0 -0
  312. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-backup.service +0 -0
  313. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-backup.timer +0 -0
  314. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-db-backup.service +0 -0
  315. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-db-backup.sh +0 -0
  316. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-db-backup.timer +0 -0
  317. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-dr-verify.service +0 -0
  318. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-dr-verify.timer +0 -0
  319. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-drive-queue.service +0 -0
  320. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-drive-queue.timer +0 -0
  321. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-failure-notify.service +0 -0
  322. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-failure-notify.sh +0 -0
  323. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-fleet-watchdog.service +0 -0
  324. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-fleet-watchdog.timer +0 -0
  325. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-notify.service +0 -0
  326. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-notify.timer +0 -0
  327. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-release-propagate.service +0 -0
  328. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-release-propagate.timer +0 -0
  329. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-release-window.service +0 -0
  330. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-release-window.timer +0 -0
  331. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-serve.service +0 -0
  332. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.service +0 -0
  333. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.sh +0 -0
  334. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.timer +0 -0
  335. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-web-rollback.sh +0 -0
  336. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/coord-web.service +0 -0
  337. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/deploy/node-shim.sh +0 -0
  338. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ADR_COORD_TUI_CI.md +0 -0
  339. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  340. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_CI.md +0 -0
  341. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_DIST.md +0 -0
  342. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  343. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/AGENT_OPERATIONS.md +0 -0
  344. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ARCHITECTURE.md +0 -0
  345. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ARCH_SECURITY_GATES.md +0 -0
  346. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/COCKPIT.md +0 -0
  347. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/CONTROL_CENTER.md +0 -0
  348. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/COST_DISCIPLINE.md +0 -0
  349. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/CROSS_PLATFORM.md +0 -0
  350. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/CUSTOMER_FACING_APPS.md +0 -0
  351. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/CUSTOMER_PORTAL.md +0 -0
  352. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/DATA_STORE_SELECTION.md +0 -0
  353. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/DISASTER_RECOVERY.md +0 -0
  354. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/DRIVE_QUEUE.md +0 -0
  355. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/EPHEMERAL_WORKERS.md +0 -0
  356. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/FORGE_MIGRATION.md +0 -0
  357. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/GRAPHIFY_SETUP.md +0 -0
  358. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ISSUE_GUIDANCE.md +0 -0
  359. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/MAC_MINI.md +0 -0
  360. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  361. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/NOTIFIER.md +0 -0
  362. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/OPENCODE_VERIFICATION.md +0 -0
  363. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/OPERATING_GOTCHAS.md +0 -0
  364. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/OPERATOR_GUIDES.md +0 -0
  365. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/ORACLE_LOOP.md +0 -0
  366. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/PHONE_WEBAPP.md +0 -0
  367. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/PIPELINE_V2.md +0 -0
  368. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/PLATFORM_EVOLUTION.md +0 -0
  369. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/SECOND_BACKEND.md +0 -0
  370. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/STORE_SERVICE.md +0 -0
  371. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  372. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/WEB_CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/WSL_WINDOWS_WORKER.md +0 -0
  374. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/mocks/web/README.md +0 -0
  375. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/mocks/web/_tokens.css +0 -0
  376. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/mocks/web/issue-detail.html +0 -0
  377. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/mocks/web/pipeline-narrow.html +0 -0
  378. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/docs/mocks/web/pipeline-wide.html +0 -0
  379. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/graphify-out/.gitignore +0 -0
  380. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/install-agent.sh +0 -0
  381. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/pyproject.toml +0 -0
  382. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/audit_review_verdict_overrides.py +0 -0
  383. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  384. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/build-worker-image.sh +0 -0
  385. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/coordinator-machine.py +0 -0
  386. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/dr-down.sh +0 -0
  387. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/dr-up.sh +0 -0
  388. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/epic-down.sh +0 -0
  389. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/epic-up.sh +0 -0
  390. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/preflight.sh +0 -0
  391. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/provision-server.sh +0 -0
  392. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/provision-worker.sh +0 -0
  393. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  394. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  395. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/throwaway-vm.sh +0 -0
  396. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/azure-workers/verify-github-token.sh +0 -0
  397. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/check_gh_argv_containment.py +0 -0
  398. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/codegen.py +0 -0
  399. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-test-runner.sh +0 -0
  400. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  401. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  402. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  403. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  404. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/coord-venv-rollback.sh +0 -0
  405. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/drive-batch.sh +0 -0
  406. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/extract-coord-tui.sh +0 -0
  407. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/fleet_watchdog.py +0 -0
  408. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/gen_board_fixture.py +0 -0
  409. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/gen_mock_index.py +0 -0
  410. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/lib/provision-core.sh +0 -0
  411. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/next_release_tag.py +0 -0
  412. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/provision-machine.sh +0 -0
  413. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/run_tests_in_populated_home.sh +0 -0
  414. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/run_tests_without_gh.sh +0 -0
  415. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/setup-macmini.sh +0 -0
  416. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/smoke_437_interactive.py +0 -0
  417. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/verify-provision-noble.sh +0 -0
  418. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/setup.cfg +0 -0
  422. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-37/conftest.py +0 -0
  425. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-37/contract.md +0 -0
  426. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-37/manifest.yml +0 -0
  427. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  428. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  429. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/contract.md +0 -0
  430. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  431. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  432. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/manifest.yml +0 -0
  433. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-51/tsconfig.json +0 -0
  435. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  436. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/backends.py +0 -0
  437. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/conftest.py +0 -0
  438. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/board-pipeline-basic.json +0 -0
  439. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  440. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  441. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  442. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  443. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/all_pass.json +0 -0
  444. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  445. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/mixed_fail.json +0 -0
  446. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  447. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  448. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/skip.json +0 -0
  449. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/playwright/truncated.json +0 -0
  450. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  451. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  452. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  454. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  455. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  456. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  457. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  458. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_acceptance.py +0 -0
  460. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_acceptance_drivers.py +0 -0
  461. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent.py +0 -0
  462. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_api_error.py +0 -0
  463. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_app.py +0 -0
  464. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_branch_base.py +0 -0
  465. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_branch_capture.py +0 -0
  466. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_config_free_1712.py +0 -0
  467. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_deploy_units_endpoint.py +0 -0
  468. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_dirty_worktree.py +0 -0
  469. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  470. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_graph_self_heal.py +0 -0
  471. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_health_h3.py +0 -0
  472. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_idle_restart.py +0 -0
  473. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_push_failure.py +0 -0
  474. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_reap.py +0 -0
  475. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_repos_and_pull.py +0 -0
  476. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_restart_services_endpoint.py +0 -0
  477. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_skills_self_heal.py +0 -0
  478. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_startup_diagnostics.py +0 -0
  479. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_update.py +0 -0
  480. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_update_bluegreen.py +0 -0
  481. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_usage_limit.py +0 -0
  482. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_agent_zero_commit.py +0 -0
  483. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ambient_home_isolation.py +0 -0
  484. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approve_capability_reroute_3241.py +0 -0
  485. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approve_dependency_busy_2804.py +0 -0
  486. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approve_reject_plan.py +0 -0
  487. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approve_usage_gate.py +0 -0
  488. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approved_work_2532.py +0 -0
  489. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_approved_work_2996.py +0 -0
  490. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_assignment_already_recorded_daemon.py +0 -0
  491. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_audit_log.py +0 -0
  492. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_audit_outcome.py +0 -0
  493. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_audit_query.py +0 -0
  494. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_auto_loop.py +0 -0
  495. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_auto_release_publish_2035.py +0 -0
  496. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_backend_selection.py +0 -0
  497. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_backup.py +0 -0
  498. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_base_checkout_restore.py +0 -0
  499. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_block_log.py +0 -0
  500. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_cap_762.py +0 -0
  501. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_fixture.py +0 -0
  502. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_read_path.py +0 -0
  503. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_schema.py +0 -0
  504. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_service.py +0 -0
  505. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_state.py +0 -0
  506. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_board_wire.py +0 -0
  507. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_brain.py +0 -0
  508. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_branch_model.py +0 -0
  509. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_bug_intake.py +0 -0
  510. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_build_worker_image_env_update.py +0 -0
  511. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cargo_cache.py +0 -0
  512. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_check_gh_argv_containment.py +0 -0
  513. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_acceptance_gate_1950.py +0 -0
  514. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_fix.py +0 -0
  515. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_github.py +0 -0
  516. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_gitlab.py +0 -0
  517. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_parity_2091.py +0 -0
  518. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_ci_store.py +0 -0
  519. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_claim.py +0 -0
  520. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_claude_md_budget.py +0 -0
  521. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_claude_setup_token.py +0 -0
  522. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_acceptance.py +0 -0
  523. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_assign.py +0 -0
  524. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  525. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_assign_interactive_remote.py +0 -0
  526. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_assign_provider.py +0 -0
  527. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  528. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_audit.py +0 -0
  529. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_chat_continue.py +0 -0
  530. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_ci.py +0 -0
  531. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_codegen.py +0 -0
  532. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_decide.py +0 -0
  533. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_capability_rules.py +0 -0
  534. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_config_provenance.py +0 -0
  535. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_forge_availability.py +0 -0
  536. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_graph.py +0 -0
  537. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_self.py +0 -0
  538. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_diagnose_test_coverage.py +0 -0
  539. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_doctor.py +0 -0
  540. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_doctor_config_free_1801.py +0 -0
  541. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  542. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  543. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_drive.py +0 -0
  544. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_drive_queue.py +0 -0
  545. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_escalate.py +0 -0
  546. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_fix_headless_review.py +0 -0
  547. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_gate_a.py +0 -0
  548. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_install_drift.py +0 -0
  549. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_install_skills.py +0 -0
  550. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_issue_comment.py +0 -0
  551. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_issue_create_label.py +0 -0
  552. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_issue_reopen.py +0 -0
  553. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_issue_view_list.py +0 -0
  554. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_issues.py +0 -0
  555. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_merge.py +0 -0
  556. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_assign.py +0 -0
  557. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_capture.py +0 -0
  558. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_chat_add_child.py +0 -0
  559. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_dispatch.py +0 -0
  560. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_gate_b.py +0 -0
  561. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_gate_c.py +0 -0
  562. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  563. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_milestone_ship.py +0 -0
  564. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_network.py +0 -0
  565. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_new_issue_chat.py +0 -0
  566. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_plans.py +0 -0
  567. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_portal.py +0 -0
  568. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_pr.py +0 -0
  569. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_pull_artifact.py +0 -0
  570. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_queue.py +0 -0
  571. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_reattach_sessions.py +0 -0
  572. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_refine_board.py +0 -0
  573. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_release_preflight.py +0 -0
  574. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_release_propagate.py +0 -0
  575. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_release_window.py +0 -0
  576. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_repo_2220.py +0 -0
  577. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  578. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_scorecard.py +0 -0
  579. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_serve_store_backend_3084.py +0 -0
  580. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_set_review_findings.py +0 -0
  581. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_advisory_terminal.py +0 -0
  582. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_contested_tag.py +0 -0
  583. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_invariant_alarms.py +0 -0
  584. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_machine_fault.py +0 -0
  585. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_merge_queue.py +0 -0
  586. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_provider.py +0 -0
  587. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_retried_3340.py +0 -0
  588. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_review_finalizing.py +0 -0
  589. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_supervisor_3366.py +0 -0
  590. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_test_failed_tag.py +0 -0
  591. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_status_usage_limit.py +0 -0
  592. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_sync_comments_873.py +0 -0
  593. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_test_plan.py +0 -0
  594. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_track.py +0 -0
  595. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_tui_update.py +0 -0
  596. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cli_wait.py +0 -0
  597. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_client.py +0 -0
  598. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_client_base_install.py +0 -0
  599. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_client_config_cache_atomic_3052.py +0 -0
  600. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_client_resource_migration_1946.py +0 -0
  601. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_commands_common.py +0 -0
  602. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_comments.py +0 -0
  603. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_completion_summary.py +0 -0
  604. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config.py +0 -0
  605. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_acceptance.py +0 -0
  606. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_audit.py +0 -0
  607. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_drift_check.py +0 -0
  608. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_effective.py +0 -0
  609. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_pricing.py +0 -0
  610. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  611. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_config_usage_gate.py +0 -0
  612. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_confirm_test.py +0 -0
  613. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_conflict_fix.py +0 -0
  614. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_conflict_fix_semantic.py +0 -0
  615. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  616. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test.py +0 -0
  617. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  618. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test_runner_baseline.py +0 -0
  619. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test_runner_populated_home.py +0 -0
  620. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test_runner_routing.py +0 -0
  621. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_test_runner_toolchain.py +0 -0
  622. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_uat.py +0 -0
  623. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coord_web_sse_restart_live.py +0 -0
  624. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_coordinator_machine.py +0 -0
  625. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_cross_platform_imports.py +0 -0
  626. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dao.py +0 -0
  627. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard.py +0 -0
  628. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard_api.py +0 -0
  629. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard_fixture.py +0 -0
  630. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard_server.py +0 -0
  631. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard_terminal.py +0 -0
  632. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dashboard_terminal_live.py +0 -0
  633. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_db.py +0 -0
  634. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dead_end.py +0 -0
  635. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_decomposition_chat.py +0 -0
  636. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_coord_db_backup.py +0 -0
  637. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_coord_web_dist.py +0 -0
  638. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_coord_web_rollback.py +0 -0
  639. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_db_backup_unit.py +0 -0
  640. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_drive_queue_unit.py +0 -0
  641. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_failure_notify_unit.py +0 -0
  642. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_manifest.py +0 -0
  643. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_notify_unit.py +0 -0
  644. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_units_lane.py +0 -0
  645. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deploy_web_unit.py +0 -0
  646. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deprecation_telemetry.py +0 -0
  647. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_deps.py +0 -0
  648. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_diagnose.py +0 -0
  649. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dispatch.py +0 -0
  650. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dispatch_liveness.py +0 -0
  651. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dispatch_target_validation.py +0 -0
  652. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dispatch_workers.py +0 -0
  653. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dist_name.py +0 -0
  654. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_done_housekeeping.py +0 -0
  655. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dr_azure_scripts.py +0 -0
  656. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dr_promote.py +0 -0
  657. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_dr_verify.py +0 -0
  658. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_machine_fault.py +0 -0
  659. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue.py +0 -0
  660. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_blocked_rendering.py +0 -0
  661. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_launch_argv.py +0 -0
  662. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_max_parallel_config.py +0 -0
  663. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  664. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_roll_pending.py +0 -0
  665. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  666. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_sessions_snapshot.py +0 -0
  667. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_state.py +0 -0
  668. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_drive_tmux.py +0 -0
  669. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_epic_up_capability_detection.py +0 -0
  670. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  671. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_epic_up_image_provenance.py +0 -0
  672. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_errors.py +0 -0
  673. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_events.py +0 -0
  674. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_failure_class.py +0 -0
  675. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_failure_classifier.py +0 -0
  676. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_filelock.py +0 -0
  677. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  678. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fix_escalation_classifier.py +0 -0
  679. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fix_of_force_override.py +0 -0
  680. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fleet_config_health.py +0 -0
  681. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fleet_health_probes.py +0 -0
  682. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fleet_health_snapshot.py +0 -0
  683. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_fleet_watchdog.py +0 -0
  684. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_forge_availability.py +0 -0
  685. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_freshness.py +0 -0
  686. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gate_a.py +0 -0
  687. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gate_b.py +0 -0
  688. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gate_snapshot_staleness.py +0 -0
  689. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gates.py +0 -0
  690. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  691. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_gen_mock_index.py +0 -0
  692. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_generated_rust_fixture.py +0 -0
  693. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_generated_rust_requests.py +0 -0
  694. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_generated_types_fixture.py +0 -0
  695. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_github_ops.py +0 -0
  696. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_github_throttle.py +0 -0
  697. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_goal.py +0 -0
  698. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_graph_health.py +0 -0
  699. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_graph_selfheal_absent_2237.py +0 -0
  700. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_handoff.py +0 -0
  701. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_checks.py +0 -0
  702. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_cli.py +0 -0
  703. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_cli_graph.py +0 -0
  704. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_config.py +0 -0
  705. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_context.py +0 -0
  706. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_coord_tui_ci_pin.py +0 -0
  707. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_coord_web_ci_pin.py +0 -0
  708. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_deploy_lane_facts.py +0 -0
  709. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_fix.py +0 -0
  710. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_incident_regression.py +0 -0
  711. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_issues_sync_staleness.py +0 -0
  712. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_pr_churn.py +0 -0
  713. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_pypi.py +0 -0
  714. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_registry.py +0 -0
  715. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_release_cordon_probe.py +0 -0
  716. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_timer_active.py +0 -0
  717. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_toolchain.py +0 -0
  718. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_unit_drift.py +0 -0
  719. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_unit_enablement.py +0 -0
  720. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_health_wedged_drive_queue.py +0 -0
  721. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_hooks.py +0 -0
  722. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_housekeeping.py +0 -0
  723. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_human_attended_437.py +0 -0
  724. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_init.py +0 -0
  725. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_install_agent_venv_2911.py +0 -0
  726. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_integration.py +0 -0
  727. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive.py +0 -0
  728. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_briefing_echo.py +0 -0
  729. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_pane_log_2541.py +0 -0
  730. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_prefill_state.py +0 -0
  731. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_session_relaunch.py +0 -0
  732. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_test_verdict_backstop.py +0 -0
  733. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_token_attribution.py +0 -0
  734. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_interactive_worktree.py +0 -0
  735. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_invariant_alarms.py +0 -0
  736. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_issue_store_seam.py +0 -0
  737. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_issues_sync_status.py +0 -0
  738. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_liveness_auditor.py +0 -0
  739. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_liveness_notify.py +0 -0
  740. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_lock_contention_ratchet.py +0 -0
  741. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_machine_fault.py +0 -0
  742. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_machine_metrics.py +0 -0
  743. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_machine_onboard.py +0 -0
  744. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_machine_pause.py +0 -0
  745. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_machine_stats.py +0 -0
  746. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_merge_queue.py +0 -0
  747. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_merge_verify.py +0 -0
  748. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_milestone_chat.py +0 -0
  749. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_milestone_order.py +0 -0
  750. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_milestone_seam.py +0 -0
  751. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_mock_author.py +0 -0
  752. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_model_tiering.py +0 -0
  753. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_models.py +0 -0
  754. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_models_config_labels.py +0 -0
  755. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_needs_attention.py +0 -0
  756. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_network.py +0 -0
  757. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_new_issue_chat.py +0 -0
  758. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_next_release_tag.py +0 -0
  759. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_node_shim.py +0 -0
  760. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_baseline.py +0 -0
  761. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_cli.py +0 -0
  762. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_collect.py +0 -0
  763. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_config.py +0 -0
  764. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_drive_seam.py +0 -0
  765. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_isolation.py +0 -0
  766. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_predicate.py +0 -0
  767. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notifier_service.py +0 -0
  769. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notify.py +0 -0
  770. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_notify_drain.py +0 -0
  771. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_openapi.py +0 -0
  772. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_operational_defaults.py +0 -0
  773. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_overlap_fence.py +0 -0
  774. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_overlap_predict.py +0 -0
  775. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_packaged_deploy_units.py +0 -0
  776. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_parentage.py +0 -0
  777. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_paste_landed.py +0 -0
  778. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  779. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_pipeline.py +0 -0
  780. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_plan_followup_approve_plan_command.py +0 -0
  781. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_plan_followup_pr_command.py +0 -0
  782. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_plan_followup_review_command.py +0 -0
  783. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_plan_only.py +0 -0
  784. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_plan_parser.py +0 -0
  785. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_platform_paths.py +0 -0
  786. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_portal_bridge.py +0 -0
  787. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_portal_config.py +0 -0
  788. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_portal_store.py +0 -0
  789. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_portal_sync.py +0 -0
  790. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_pr_body_lint.py +0 -0
  791. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_prereqs.py +0 -0
  792. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_production_db_guard.py +0 -0
  793. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_progress.py +0 -0
  794. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_provider_seam.py +0 -0
  795. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_providers.py +0 -0
  796. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_providers_config_labels.py +0 -0
  797. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_providers_pty.py +0 -0
  798. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_provision_core.py +0 -0
  799. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_provision_machine.py +0 -0
  800. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_py_rust_mirror_inventory.py +0 -0
  801. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_quiet_hours.py +0 -0
  802. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_quiet_hours_store_2146.py +0 -0
  803. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reap_merged_sessions.py +0 -0
  804. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reap_stale_interactive_tick.py +0 -0
  805. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile.py +0 -0
  806. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_branch.py +0 -0
  807. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_completions.py +0 -0
  808. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  809. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_merges.py +0 -0
  810. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_no_agent_record.py +0 -0
  811. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_tick.py +0 -0
  812. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reconcile_usage_limit_done.py +0 -0
  813. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_refine_chat.py +0 -0
  814. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_cordon_2101.py +0 -0
  815. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  816. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_cordon_deadlock_2240.py +0 -0
  817. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  818. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_cordon_stuck_2490.py +0 -0
  819. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_propagate.py +0 -0
  820. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_propagate_threshold.py +0 -0
  821. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_roll_between_legs_2854.py +0 -0
  822. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_roll_window_handoff.py +0 -0
  823. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_unified_1242.py +0 -0
  824. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_verify.py +0 -0
  825. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_release_window.py +0 -0
  826. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_remote_auto_prune.py +0 -0
  827. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_remote_interactive_reaper.py +0 -0
  828. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_add.py +0 -0
  829. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_dormancy.py +0 -0
  830. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_edit_2220.py +0 -0
  831. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_graph_fleet_2237.py +0 -0
  832. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_max_parallel_3423.py +0 -0
  833. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_repo_onboard_2220.py +0 -0
  834. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_report_result_push.py +0 -0
  835. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_reports.py +0 -0
  836. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_restart_cmd.py +0 -0
  837. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_retry.py +0 -0
  838. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_retry_advisory_1606.py +0 -0
  839. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_retry_escalation_classify_3360.py +0 -0
  840. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_retry_type_1636.py +0 -0
  841. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_revalidate.py +0 -0
  842. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review.py +0 -0
  843. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_end_review_without_verdict.py +0 -0
  844. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_parse_failure_diagnostic.py +0 -0
  845. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_reaffirm.py +0 -0
  846. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_state.py +0 -0
  847. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_verdict_backstop.py +0 -0
  848. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_verdict_override_audit.py +0 -0
  849. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_verdict_relay.py +0 -0
  850. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_review_zero_commits.py +0 -0
  851. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_scoped_review_wiring.py +0 -0
  852. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_scorecard.py +0 -0
  853. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_self_health.py +0 -0
  854. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_serve.py +0 -0
  855. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_serve_app.py +0 -0
  856. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_serve_app_board_trim.py +0 -0
  857. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_serve_rest_routes.py +0 -0
  858. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_session.py +0 -0
  859. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_slice_issue_attribution.py +0 -0
  860. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_smoke.py +0 -0
  861. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  862. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_smoke_live_checkout_restore.py +0 -0
  863. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_smoke_workflow.py +0 -0
  864. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_spend_ceiling.py +0 -0
  865. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_spend_ceiling_coordinator.py +0 -0
  866. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_split.py +0 -0
  867. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_split_work.py +0 -0
  868. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_sql_dialect.py +0 -0
  869. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_sqlite_connect_ratchet.py +0 -0
  870. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stage_projection.py +0 -0
  871. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stale_busy_reviewer_697.py +0 -0
  872. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stalled_pipeline.py +0 -0
  873. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_state.py +0 -0
  874. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_state_review_findings_daemon.py +0 -0
  875. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_status_fleet_footer.py +0 -0
  876. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stop_1567.py +0 -0
  877. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_store_contract.py +0 -0
  878. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_store_migrate.py +0 -0
  879. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stuck.py +0 -0
  880. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  881. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_terminal_command.py +0 -0
  882. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_author.py +0 -0
  883. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_chat.py +0 -0
  884. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_orchestrator.py +0 -0
  885. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_report.py +0 -0
  886. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_verdict_parsing.py +0 -0
  887. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_test_verdict_transcript_floor.py +0 -0
  888. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_text_io_encoding_audit.py +0 -0
  889. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_thin_client_board_audit.py +0 -0
  890. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_thin_client_config_load_1080.py +0 -0
  891. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_thin_client_daemon_routing_906.py +0 -0
  892. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_throwaway_vm.py +0 -0
  893. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_tmux_host.py +0 -0
  894. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_tmux_session.py +0 -0
  895. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_transcript_floor.py +0 -0
  896. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_uat_checks.py +0 -0
  897. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_usage.py +0 -0
  898. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_usage_limits.py +0 -0
  899. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_usage_rollup.py +0 -0
  900. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_venv_live_install_2121.py +0 -0
  901. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_version_single_source.py +0 -0
  902. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_watch.py +0 -0
  903. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  904. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worker_env_venv_isolation.py +0 -0
  905. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worker_events.py +0 -0
  906. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worker_image_pin_sync.py +0 -0
  907. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worker_safety.py +0 -0
  908. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worker_test_scoping.py +0 -0
  909. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worktree.py +0 -0
  910. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  911. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/tests/test_write_parity.py +0 -0
  912. {code_coordinator-0.5.542 → code_coordinator-0.5.544}/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.542
3
+ Version: 0.5.544
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.542
3
+ Version: 0.5.544
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.542",
2
+ "tag": "0.5.544",
3
3
  "distance": 0,
4
- "node": "gdf0736aada6feb22b04725dbc54d5aec689a1da6",
4
+ "node": "g9d671b639715e489d153691e9b55302116326817",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-30"
@@ -25,8 +25,10 @@ from coord.milestone_dispatch import (
25
25
  MilestoneDispatchError,
26
26
  dispatch_entry,
27
27
  fetch_milestone_context,
28
+ gate_a_probe,
28
29
  gate_a_status,
29
30
  is_milestone_complete,
31
+ milestone_oracle_loop,
30
32
  pick_machine,
31
33
  plan_dispatch,
32
34
  plan_queue,
@@ -1106,11 +1108,16 @@ def milestone_dispatch_cmd(
1106
1108
  # #2542: under oracle-loop control (Gate A already checked above), chain
1107
1109
  # the whole milestone's drive-queue entries so the tick can never launch
1108
1110
  # two of them at once — see plan_queue's own docstring for why.
1111
+ # #2785: resolved per milestone via `milestone_oracle_loop`, not the
1112
+ # repo-level `has_driver` alone. `block_reason` above already confirms
1113
+ # this milestone's Gate-A contract exists (we'd have exited otherwise).
1109
1114
  queue_plan = plan_queue(
1110
1115
  ctx.work_order,
1111
1116
  ctx.terminal_issues,
1112
1117
  repo_entry.name,
1113
- oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1118
+ oracle_loop=milestone_oracle_loop(
1119
+ repo_entry, cfg, gate_a_satisfied=block_reason is None
1120
+ ),
1114
1121
  )
1115
1122
 
1116
1123
  if not queue_plan:
@@ -1318,10 +1325,26 @@ def milestone_drive_cmd(
1318
1325
  # #2542: pass the same `oracle_loop` the gate tick itself will use, so
1319
1326
  # this preview never shows more than the one entry the actual `work`
1320
1327
  # gate would dispatch for an oracle-loop milestone.
1328
+ # #2785: resolved per milestone via `milestone_oracle_loop`, not the
1329
+ # repo-level `has_driver` alone.
1330
+ #
1331
+ # #2785 review (non-blocking): reads the DURABLE `record.cleared` (has
1332
+ # GATE_A already been stamped as cleared for this milestone?) rather
1333
+ # than `probes.gate_a_blocked` — that field is a fresh live Gate-A
1334
+ # re-probe (`probe_milestone`'s own docstring), and folding a single
1335
+ # transient read failure there straight into `gate_a_satisfied=False`
1336
+ # would cosmetically over-show this preview's ready frontier for one
1337
+ # invocation. `_milestone_gate_tick`'s WORK-state dispatch (the thing
1338
+ # this preview mirrors) already made this same durable-vs-live switch
1339
+ # for the identical reason — matching it here keeps the preview and the
1340
+ # actual tick reading the same signal instead of two that can flap
1341
+ # independently.
1321
1342
  if ctx.work_order.nodes:
1322
1343
  plan = plan_dispatch(
1323
1344
  ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues,
1324
- oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1345
+ oracle_loop=milestone_oracle_loop(
1346
+ repo_entry, cfg, gate_a_satisfied=mg.GATE_A in record.cleared
1347
+ ),
1325
1348
  )
1326
1349
  to_dispatch, skipped, waiting, deferred = (
1327
1350
  plan.to_dispatch, plan.skipped, plan.waiting, plan.deferred,
@@ -1501,9 +1524,39 @@ def milestone_write_order_cmd(
1501
1524
  # (coord-portal#122). Cheap/early check for the explicit-group case only
1502
1525
  # — see validate_no_shared_oracle_group's docstring for what it can't
1503
1526
  # catch.
1527
+ #
1528
+ # #2785: resolved PER MILESTONE via `milestone_oracle_loop` — NOT
1529
+ # `cfg.acceptance.has_driver(repo_entry.name)` alone, which is true for
1530
+ # every milestone in a repo that has ever declared ANY acceptance
1531
+ # driver and so wrongly refused #1949's (ms-60's) work order, which
1532
+ # shares no manifest with anything since ms-60 has no
1533
+ # `tests/acceptance/ms-60/` at all. No other Gate-A probe has run yet in
1534
+ # this command, so resolve one fresh via `gate_a_probe` — the same
1535
+ # existence check `coord milestone dispatch` performs.
1536
+ #
1537
+ # #2785 review: unlike `milestone_dispatch_cmd`/`milestone_drive_cmd`,
1538
+ # this command must NOT abort on a *confirmed*-absent contract — ms-60
1539
+ # has no contract at all and that is exactly the correctly-permissive
1540
+ # case (`gate_a_satisfied=False` -> `oracle_loop=False` -> shared groups
1541
+ # allowed), the whole point of this issue. Only a *transient* read
1542
+ # failure (`GateAResult.transient`, #2973's tri-state) must abort:
1543
+ # folding it into `gate_a_satisfied=False` would silently disable the
1544
+ # shared-group refusal for a milestone that may well be oracle-loop-
1545
+ # controlled, purely because of ordinary GitHub flakiness — the #2785
1546
+ # review's blocking finding. `gate_a_status`'s plain `str | None` can't
1547
+ # tell the two apart, so this uses `gate_a_probe` directly.
1548
+ probe = gate_a_probe(repo_entry, cfg, milestone_number)
1549
+ if probe.transient:
1550
+ click.echo(f"error: {probe.block_reason}", err=True)
1551
+ sys.exit(1)
1552
+
1504
1553
  try:
1505
1554
  validate_no_shared_oracle_group(
1506
- work_order, oracle_loop=cfg.acceptance.has_driver(repo_entry.name)
1555
+ work_order,
1556
+ oracle_loop=milestone_oracle_loop(
1557
+ repo_entry, cfg,
1558
+ gate_a_satisfied=probe.block_reason is None,
1559
+ ),
1507
1560
  )
1508
1561
  except WorkOrderError as e:
1509
1562
  click.echo(f"error: {e}", err=True)
@@ -2405,6 +2405,7 @@ def decide(
2405
2405
  machine: str = "",
2406
2406
  oracle: OracleDecision | None = None,
2407
2407
  gate_checker: AcceptanceGateChecker | None = None,
2408
+ reread_state: Callable[[], IssueState | None] | None = None,
2408
2409
  ) -> Action:
2409
2410
  """One step of the state machine: given the board, what next?
2410
2411
 
@@ -2420,6 +2421,20 @@ def decide(
2420
2421
  to ``coord assign``. *gate_checker* is only consulted when *oracle* is
2421
2422
  active (to resolve a routed repo's ``--for-path``, #1453 review finding
2422
2423
  1) — unused, like *oracle*, on every pre-#1453 call site.
2424
+
2425
+ *reread_state* (#2304) is the dead-end predicate's confirmation read.
2426
+ ``detect_dead_end`` judges a single snapshot, and shape 1
2427
+ (``review_terminal_no_verdict``) rests on the ABSENCE of a field — a
2428
+ snapshot taken a moment before the verdict was written and evaluated a
2429
+ moment after presents exactly the forbidden combination, and no amount of
2430
+ staring at that one snapshot can tell "not written yet" apart from "never
2431
+ coming". ``None`` (the default, every pre-#2304 caller) preserves the old
2432
+ behaviour byte-for-byte: escalate on the first read. When supplied, a
2433
+ dead-end verdict gets ONE fresh re-read before it is trusted; if the
2434
+ re-read no longer reproduces the shape, *state* itself is swapped for the
2435
+ fresh copy and the rest of this function runs on it — so a verdict that
2436
+ landed in the interim is not just un-escalated, the drive actually
2437
+ continues onto the fix/merge arm it unblocks, in this same call.
2423
2438
  """
2424
2439
  machine = machine or opts.machine or state.picked_machine
2425
2440
 
@@ -2902,6 +2917,22 @@ def decide(
2902
2917
  # #2024: `--skip-test` is a live Test-stage move (`_decide_test` records
2903
2918
  # `skipped`), so the human-attended-Test shape must not escalate past it.
2904
2919
  dead_end = detect_dead_end(state, can_waive_test_gate=opts.skip_test)
2920
+ if dead_end is not None and reread_state is not None:
2921
+ # #2304: a dead end whose predicate rests on an ABSENT field (shape
2922
+ # 1's `not state.review_verdict`, above all) cannot be trusted off a
2923
+ # single snapshot — presence is observable, absence-so-far is not.
2924
+ # One confirmation re-read closes the whole class: if the fresh row
2925
+ # still reproduces the shape, escalate on IT (so the recorded gates
2926
+ # match what was actually seen last); if it does not, the verdict
2927
+ # landed in the gap between the stale read and this check, and
2928
+ # `state` is swapped for the fresh copy so every gate below sees it
2929
+ # too — the drive falls through to the fix/merge arm the verdict
2930
+ # unblocks in this same call, rather than merely suppressing a false
2931
+ # escalation and waiting out another full poll for the same result.
2932
+ fresh = reread_state()
2933
+ if fresh is not None:
2934
+ state = fresh
2935
+ dead_end = detect_dead_end(state, can_waive_test_gate=opts.skip_test)
2905
2936
  if dead_end is not None:
2906
2937
  return replace(
2907
2938
  _escalate_dead_end(state, dead_end), warnings=warnings
@@ -5910,6 +5941,11 @@ class Driver:
5910
5941
  action = decide(
5911
5942
  state, self.opts, counters, self.verifier,
5912
5943
  machine=machine, oracle=oracle, gate_checker=self.oracle_gate,
5944
+ # #2304: the dead-end predicate's confirmation re-read — the
5945
+ # same board fetch this loop already does every poll, just
5946
+ # available to `decide()` for an extra, immediate look before
5947
+ # a `review_terminal_no_verdict`-shaped snapshot is trusted.
5948
+ reread_state=self.read_state,
5913
5949
  )
5914
5950
  for warning in action.warnings:
5915
5951
  self.warn(warning)
@@ -37,7 +37,7 @@ Three call sites share this module:
37
37
  from __future__ import annotations
38
38
 
39
39
  from dataclasses import dataclass, field
40
- from typing import TYPE_CHECKING, Callable, Iterable
40
+ from typing import TYPE_CHECKING, Callable, Iterable, NamedTuple
41
41
 
42
42
  import httpx
43
43
 
@@ -61,7 +61,10 @@ __all__ = [
61
61
  "MilestoneContext",
62
62
  "fetch_milestone_context",
63
63
  "GateAFileExists",
64
+ "GateAResult",
65
+ "gate_a_probe",
64
66
  "gate_a_status",
67
+ "milestone_oracle_loop",
65
68
  "ManifestFetch",
66
69
  "GateAApprovalFetch",
67
70
  "gate_a_signoff",
@@ -220,22 +223,51 @@ def _default_gate_a_file_exists(repo_github: str, path: str, branch: str) -> boo
220
223
  return False
221
224
 
222
225
 
223
- def gate_a_status(
226
+ class GateAResult(NamedTuple):
227
+ """The full tri-state result of a Gate-A existence check (#2785 review).
228
+
229
+ ``gate_a_status`` (below) collapses this into a plain ``str | None`` for
230
+ the callers that just want to abort on ANY truthy result — dispatch/drive
231
+ correctly treat "confirmed absent" and "read failed" identically, since
232
+ neither justifies dispatching. But a caller resolving
233
+ :func:`milestone_oracle_loop`'s ``gate_a_satisfied`` needs to tell the two
234
+ apart: a *confirmed* absence legitimately means "not oracle-loop, nothing
235
+ to race on yet" (``gate_a_satisfied=False`` is correct), while a
236
+ *transient* read failure means the answer is unknown and must not be
237
+ silently folded into the same "not oracle-loop" branch — that would
238
+ disable #2542's shared-group refusal for a milestone that may well be
239
+ under oracle-loop control, purely because of ordinary GitHub flakiness.
240
+
241
+ ``block_reason`` is ``None`` when Gate A is satisfied (dispatch may
242
+ proceed); otherwise a human-readable message, exactly as
243
+ :func:`gate_a_status` returns. ``transient`` is ``True`` only when
244
+ ``block_reason`` is set because of a failed *read* (network, auth, a
245
+ rate limit) rather than a confirmed 404 on every candidate path.
246
+ """
247
+
248
+ block_reason: str | None
249
+ transient: bool = False
250
+
251
+
252
+ def gate_a_probe(
224
253
  repo_cfg: Repo,
225
254
  config: "Config",
226
255
  milestone_number: int,
227
256
  *,
228
257
  file_exists: GateAFileExists | None = None,
229
- ) -> str | None:
258
+ ) -> GateAResult:
230
259
  """Gate A (docs/ORACLE_LOOP.md, #930): a milestone's issues may not
231
260
  dispatch until its black-box contract exists.
232
261
 
233
- Returns ``None`` when dispatch may proceed — either the repo has no
234
- ``acceptance.drivers`` entry configured (Gate A is an oracle-loop
235
- concept; repos outside that model dispatch exactly as before #930), or
236
- the contract file already exists on the repo's default branch. Returns a
237
- human-readable block reason otherwise, naming the missing path and the
238
- command that produces it.
262
+ Returns a :class:`GateAResult` whose ``block_reason`` is ``None`` when
263
+ dispatch may proceed — either the repo has no ``acceptance.drivers``
264
+ entry configured (Gate A is an oracle-loop concept; repos outside that
265
+ model dispatch exactly as before #930), or the contract file already
266
+ exists on the repo's default branch. Otherwise ``block_reason`` is a
267
+ human-readable message naming the missing path and the command that
268
+ produces it, and ``transient`` says whether that's a confirmed absence
269
+ or an inconclusive (failed) read — see :class:`GateAResult`'s own
270
+ docstring for why the distinction matters.
239
271
 
240
272
  #2896: a bare *milestone_number* doesn't say which acceptance search
241
273
  root its contract lives under (the shared repo-root tree, or an
@@ -259,7 +291,7 @@ def gate_a_status(
259
291
  remedy attached.
260
292
  """
261
293
  if not config.acceptance.has_driver(repo_cfg.name):
262
- return None
294
+ return GateAResult(None)
263
295
 
264
296
  from coord import github_ops # noqa: PLC0415
265
297
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
@@ -270,19 +302,20 @@ def gate_a_status(
270
302
  for path in candidates:
271
303
  try:
272
304
  if check(repo_cfg.github, path, repo_cfg.default_branch):
273
- return None
305
+ return GateAResult(None)
274
306
  except github_ops.GhTransientError as e:
275
307
  transient = transient or e
276
308
  continue
277
309
  if transient is not None:
278
- return (
310
+ return GateAResult(
279
311
  f"Gate A undetermined: could not read {repo_cfg.name}'s Gate-A "
280
312
  f"contract on {repo_cfg.default_branch!r} ({transient}). This is "
281
313
  "a failed read, not a confirmed absence — the contract may well "
282
- "exist. Retry once the rate limit clears."
314
+ "exist. Retry once the rate limit clears.",
315
+ transient=True,
283
316
  )
284
317
  named = " or ".join(repr(p) for p in candidates)
285
- return (
318
+ return GateAResult(
286
319
  f"Gate A not satisfied: {named} does not exist yet on "
287
320
  f"{repo_cfg.default_branch!r}. Run `coord acceptance mock {repo_cfg.name} "
288
321
  "<tracking_issue>` (docs/ORACLE_LOOP.md) to render the mock + write "
@@ -290,6 +323,81 @@ def gate_a_status(
290
323
  )
291
324
 
292
325
 
326
+ def gate_a_status(
327
+ repo_cfg: Repo,
328
+ config: "Config",
329
+ milestone_number: int,
330
+ *,
331
+ file_exists: GateAFileExists | None = None,
332
+ ) -> str | None:
333
+ """Thin ``str | None`` view over :func:`gate_a_probe`, for the callers
334
+ (``milestone_dispatch_cmd``, ``milestone_drive_cmd``,
335
+ ``_milestone_drain_tick``) that only need to know whether to abort —
336
+ they already treat a confirmed absence and a transient read failure
337
+ identically (abort either way, since neither justifies dispatching), so
338
+ dropping ``GateAResult.transient`` here is safe for them. A caller that
339
+ needs to tell the two apart (:func:`milestone_oracle_loop`'s
340
+ ``gate_a_satisfied``) should call :func:`gate_a_probe` directly instead.
341
+ """
342
+ return gate_a_probe(
343
+ repo_cfg, config, milestone_number, file_exists=file_exists
344
+ ).block_reason
345
+
346
+
347
+ def milestone_oracle_loop(
348
+ repo_cfg: Repo,
349
+ config: "Config",
350
+ *,
351
+ gate_a_satisfied: bool,
352
+ ) -> bool:
353
+ """Whether a milestone is actually under oracle-loop control (#2785).
354
+
355
+ #2542 introduced a family of checks/behaviors keyed on "is this
356
+ milestone oracle-loop-controlled" (:func:`coord.milestone_order.
357
+ validate_no_shared_oracle_group`'s shared-group refusal,
358
+ :func:`plan_dispatch`'s one-entry-per-tick cap, :func:`plan_queue`'s
359
+ whole-milestone ``after=`` chaining) — but every one of those call sites
360
+ resolved the question from ``config.acceptance.has_driver(repo_cfg.
361
+ name)`` alone. That is a REPO-level fact (does this repo declare ANY
362
+ acceptance driver at all, for ANY milestone), not a per-milestone one.
363
+ A repo can have a driver configured and still run milestones that never
364
+ touch the oracle loop at all — this repo's own ms-60 (Store Service,
365
+ plain refactors, no ``tests/acceptance/ms-60/``) alongside ms-37/ms-65
366
+ (real oracle-loop milestones). Under the old resolution EVERY milestone
367
+ in a repo that has EVER declared a driver was treated as oracle-loop-
368
+ controlled — #1949 (ms-60's tracking epic) had its `## Work order`
369
+ become permanently un-editable, refusing shared groups that pose no
370
+ actual hazard, because there is no ``tests/acceptance/ms-60/manifest.
371
+ yml`` for anything to race on.
372
+
373
+ True only when the repo has a driver configured AND *this milestone's*
374
+ Gate-A contract already exists (``gate_a_satisfied`` — the caller's
375
+ already-resolved :func:`gate_a_status` existence probe: ``... is
376
+ None``, the same signal :func:`coord.acceptance.gate_a_contract_candidates`
377
+ checks for). A milestone with no contract yet has nothing to race on
378
+ either: nobody has authored a JIT acceptance slice into a manifest that
379
+ doesn't exist, so treating it as oracle-loop-active before Gate A is
380
+ even satisfied would repeat the same category of over-broad mistake
381
+ this replaces, just one gate later.
382
+
383
+ Deliberately takes the already-resolved ``gate_a_satisfied`` rather than
384
+ a bare ``milestone_number`` and re-probing GitHub itself: every caller
385
+ in this module and ``coord.serve_app`` already computes a Gate-A
386
+ existence probe on the same tick (``gate_a_status`` / ``probe_milestone
387
+ ().gate_a_blocked``) before ever reaching an ``oracle_loop=`` call site
388
+ — re-deriving it here would mean a second live fetch per tick for no
389
+ new information. A caller with no probe in hand yet (``coord milestone
390
+ write-order``, which has no other reason to touch Gate A) computes one
391
+ fresh via ``gate_a_status(repo_cfg, config, milestone_number) is None``.
392
+
393
+ Single source of truth for this question (epic #2096, "one question,
394
+ one answer") — every #2542 caller should resolve ``oracle_loop``
395
+ through this rather than re-deriving ``has_driver`` locally, so the two
396
+ can never drift apart again.
397
+ """
398
+ return config.acceptance.has_driver(repo_cfg.name) and gate_a_satisfied
399
+
400
+
293
401
  # (repo_github, path, branch) -> file content, or None if it doesn't exist.
294
402
  # Injected so tests never hit `gh` — mirrors GateAFileExists above.
295
403
  #
@@ -704,6 +812,17 @@ def issue_oracle_ready(
704
812
  the entry (re-checked every tick) instead of landing it in terminal
705
813
  ``blocked``, which nothing re-evaluates (#2040) — this is an explicitly
706
814
  operator-fixable condition with a one-command remedy.
815
+
816
+ #2785 audit note: the ``has_driver`` check below is correctly
817
+ repo-level — it's a cheap early exit only, immediately followed by the
818
+ real per-milestone ``gate_a_status`` existence check a few lines down
819
+ (via ``effective_file_exists``). A repo with no driver at all can have
820
+ no oracle-loop milestone, so short-circuiting there costs nothing; a
821
+ repo WITH a driver still falls through to the per-milestone contract
822
+ check before this ever returns non-default readiness. Unlike #2542's
823
+ ``validate_no_shared_oracle_group``/``plan_dispatch``/``plan_queue``
824
+ family (see :func:`milestone_oracle_loop`), this function never treated
825
+ ``has_driver`` alone as sufficient.
707
826
  """
708
827
  if milestone_number is None or not config.acceptance.has_driver(repo_cfg.name):
709
828
  return OracleReadiness()
@@ -943,9 +1062,12 @@ def plan_dispatch(
943
1062
  distinct idle machines instead of piling onto one).
944
1063
 
945
1064
  ``oracle_loop`` (#2542) — the caller's already-resolved
946
- ``config.acceptance.has_driver(repo_cfg.name)`` — caps ``to_dispatch`` at
947
- **one** entry per call. Without this, two ready-frontier entries with no
948
- claim/dependency edge between them (the normal, desired fan-out above)
1065
+ :func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
1066
+ repo-level ``config.acceptance.has_driver(repo_cfg.name)`` alone — see
1067
+ that function's docstring for why the distinction matters) — caps
1068
+ ``to_dispatch`` at **one** entry per call. Without this, two
1069
+ ready-frontier entries with no claim/dependency edge between them (the
1070
+ normal, desired fan-out above)
949
1071
  would both dispatch in the very same tick under an oracle-loop
950
1072
  milestone, and each independently authors its own JIT acceptance slice
951
1073
  into the SAME ``tests/acceptance/ms-N/manifest.yml``
@@ -1039,9 +1161,12 @@ def plan_queue(
1039
1161
  the defensive tail below only fires on inputs constructed outside it.
1040
1162
 
1041
1163
  ``oracle_loop`` (#2542) — the caller's already-resolved
1042
- ``config.acceptance.has_driver(repo_name)`` — additionally chains every
1043
- entry's ``after`` to the issue immediately before it in this function's
1044
- own topological order, so the drive-queue admits the WHOLE milestone
1164
+ :func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
1165
+ repo-level ``config.acceptance.has_driver(repo_name)`` alone — see that
1166
+ function's docstring for why the distinction matters) — additionally
1167
+ chains every entry's ``after`` to the issue immediately before it in
1168
+ this function's own topological order, so the drive-queue admits the
1169
+ WHOLE milestone
1045
1170
  strictly one entry at a time. Without this, two entries with no declared
1046
1171
  edge between them (different ``group``s, or neither declaring one) are
1047
1172
  both ``waiting`` the moment their own pre-reqs land, and the
@@ -614,11 +614,19 @@ def validate_no_shared_oracle_group(
614
614
  ms-N's manifest at once.
615
615
 
616
616
  ``oracle_loop`` is the caller's already-resolved
617
- ``config.acceptance.has_driver(repo_name)`` — this stays a pure
618
- function, no config/GitHub reach-out of its own. A no-op when
619
- ``oracle_loop`` is False (repos outside the oracle loop keep declaring
620
- parallel groups exactly as before this check existed) or when no group
621
- holds more than one node.
617
+ :func:`coord.milestone_dispatch.milestone_oracle_loop` for *this
618
+ milestone* (#2785) — NOT the repo-level ``config.acceptance.
619
+ has_driver(repo_name)`` alone, which is true for every milestone in a
620
+ repo that has ever declared ANY acceptance driver and so over-fires for
621
+ a milestone that has no ``tests/acceptance/ms-N/`` of its own to race
622
+ on (#2785's ms-60/#1949: ordinary refactors sharing a repo with real
623
+ oracle-loop milestones, whose `## Work order` became permanently
624
+ un-editable under the old, repo-level resolution). This function stays
625
+ pure either way — no config/GitHub reach-out of its own; resolving
626
+ ``oracle_loop`` correctly is the caller's job. A no-op when
627
+ ``oracle_loop`` is False (a milestone outside the oracle loop keeps
628
+ declaring parallel groups exactly as before this check existed) or when
629
+ no group holds more than one node.
622
630
 
623
631
  This is deliberately only the cheap, early check for the EXPLICIT-group
624
632
  case — ``coord milestone write-order`` validates it before a word order
@@ -1951,10 +1951,12 @@ def _milestone_drain_tick(config: Config) -> list:
1951
1951
  that filter for free). A per-milestone fetch/dispatch error must not
1952
1952
  silence the other registered milestones — caught and logged per entry.
1953
1953
 
1954
- Same ``oracle_loop`` capping as ``_milestone_gate_tick`` (#2542): a repo
1955
- under oracle-loop control gets at most one dispatch per registered
1956
- milestone per tick, so this legacy path can't fan two same-milestone
1957
- entries out to distinct machines in one call and race them on the
1954
+ Same ``oracle_loop`` capping as ``_milestone_gate_tick`` (#2542,
1955
+ resolved per milestone via ``milestone_oracle_loop`` since #2785): a
1956
+ milestone under oracle-loop control gets at most one dispatch per
1957
+ registered milestone per tick, so this legacy path can't fan two
1958
+ same-milestone entries out to distinct machines in one call and race
1959
+ them on the
1958
1960
  shared ``tests/acceptance/ms-N/manifest.yml`` either — even though only
1959
1961
  pre-#2335 registrations feed it today (see above), it is the same class
1960
1962
  of hole as the gate tick's and worth closing the same way.
@@ -2043,9 +2045,17 @@ def _milestone_drain_tick(config: Config) -> list:
2043
2045
  from coord.dispatch_liveness import github_issue_liveness_fetcher # noqa: PLC0415
2044
2046
  from coord.network import claude_credential_reachable # noqa: PLC0415
2045
2047
 
2048
+ # #2785: resolved per milestone via `milestone_oracle_loop`, not
2049
+ # the repo-level `has_driver` alone — see that function's
2050
+ # docstring. `block_reason` above already is this specific
2051
+ # milestone's Gate-A existence probe (confirmed `None`, or this tick
2052
+ # would already have `continue`d above), so reuse it rather than
2053
+ # re-fetching.
2046
2054
  plan = md.plan_dispatch(
2047
2055
  ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
2048
- oracle_loop=config.acceptance.has_driver(repo_name),
2056
+ oracle_loop=md.milestone_oracle_loop(
2057
+ repo_cfg, config, gate_a_satisfied=block_reason is None
2058
+ ),
2049
2059
  credential_fetcher=claude_credential_reachable,
2050
2060
  )
2051
2061
  # #3376 review round 1: this drain tick is a real production
@@ -2129,13 +2139,30 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
2129
2139
  hold-and-report: it logs why it cannot advance and leaves the record
2130
2140
  where it is. Nothing here silently falls through.
2131
2141
 
2132
- ``plan_dispatch`` is called with ``oracle_loop=config.acceptance.
2133
- has_driver(repo_cfg.name)`` (#2542) — for a repo under oracle-loop
2134
- control this caps the tick's dispatch at one ready-frontier entry, so
2135
- this walk (docs/ORACLE_LOOP.md's "oracle drive", #1453 — the documented
2136
- primary driver for an oracle-loop milestone) can never launch two
2137
- same-milestone entries into their JIT slice-authoring phase in the same
2138
- tick, racing on the shared ``tests/acceptance/ms-N/manifest.yml``.
2142
+ ``plan_dispatch`` is called with ``oracle_loop=md.milestone_oracle_loop
2143
+ (repo_cfg, config, gate_a_satisfied=mg.GATE_A in record.cleared)`` (#2542,
2144
+ resolved per milestone rather than repo-wide since #2785) — for a
2145
+ milestone under oracle-loop control this caps the tick's dispatch at one
2146
+ ready-frontier entry, so this walk (docs/ORACLE_LOOP.md's "oracle
2147
+ drive", #1453 — the documented primary driver for an oracle-loop
2148
+ milestone) can never launch two same-milestone entries into their JIT
2149
+ slice-authoring phase in the same tick, racing on the shared
2150
+ ``tests/acceptance/ms-N/manifest.yml``.
2151
+
2152
+ #2785 review: this reads ``GATE_A in record.cleared`` — the *durable*
2153
+ record of whether this milestone's Gate-A contract has already been
2154
+ confirmed to exist — rather than re-deriving it from a fresh
2155
+ ``probes.gate_a_blocked`` live probe. The ``work`` gate is only
2156
+ reachable after ``evaluate_gate`` already advanced this record past
2157
+ ``GATE_A`` (which stamps ``GATE_A`` into ``cleared``, see
2158
+ ``apply_step``), so the two answers agree on the happy path — but
2159
+ ``probe_milestone`` unconditionally re-fetches Gate A on *every* tick
2160
+ regardless of the milestone's current gate, so a single tick's transient
2161
+ GitHub read failure would otherwise flip ``gate_a_satisfied`` to
2162
+ ``False`` for that tick alone, un-capping the one-entry-per-tick limit
2163
+ and reopening #2542's manifest race exactly when GitHub is least
2164
+ reliable. The durable record can't flap tick to tick the way a live
2165
+ re-probe can.
2139
2166
 
2140
2167
  Deliberately **not** gated on ``config.milestone.auto_dispatch`` — that
2141
2168
  flag gates the legacy standalone drain (:func:`_milestone_drain_tick`),
@@ -2244,9 +2271,29 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
2244
2271
  from coord.dispatch_liveness import github_issue_liveness_fetcher # noqa: PLC0415
2245
2272
  from coord.network import claude_credential_reachable # noqa: PLC0415
2246
2273
 
2274
+ # #2785: resolved per milestone via `milestone_oracle_loop`,
2275
+ # not the repo-level `has_driver` alone — see that
2276
+ # function's docstring.
2277
+ #
2278
+ # #2785 review: reads the DURABLE `record.cleared` (has
2279
+ # GATE_A already been stamped as cleared for this milestone?)
2280
+ # rather than `probes.gate_a_blocked` — that field is a
2281
+ # fresh live Gate-A re-probe recomputed on EVERY tick
2282
+ # (`probe_milestone`'s own docstring), and a single tick's
2283
+ # transient GitHub read failure there would silently drop
2284
+ # `oracle_loop` to False for that tick's dispatch, un-capping
2285
+ # the one-entry-per-tick limit right when GitHub flakiness
2286
+ # makes caution matter most. The `work` gate is only
2287
+ # reachable after `evaluate_gate` already advanced this
2288
+ # record past GATE_A (which appends it to `cleared` —
2289
+ # `apply_step`), so this durable signal is exactly as
2290
+ # accurate on the happy path and immune to that flap.
2247
2291
  plan = md.plan_dispatch(
2248
2292
  ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
2249
- oracle_loop=config.acceptance.has_driver(repo_cfg.name),
2293
+ oracle_loop=md.milestone_oracle_loop(
2294
+ repo_cfg, config,
2295
+ gate_a_satisfied=mg.GATE_A in record.cleared,
2296
+ ),
2250
2297
  credential_fetcher=claude_credential_reachable,
2251
2298
  )
2252
2299
  # #3376 review round 1: same issue-liveness wiring as the