code-coordinator 0.5.560__tar.gz → 0.5.562__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 (929) hide show
  1. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/acceptance.py +60 -0
  5. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_store.py +12 -5
  6. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dispatch.py +73 -34
  7. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/merge_queue.py +91 -8
  8. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_dispatch.py +49 -2
  9. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/conftest.py +30 -0
  10. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_acceptance.py +58 -0
  11. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_acceptance_drivers.py +26 -0
  12. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch.py +136 -31
  13. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue.py +21 -0
  14. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_wsl_bridge_3515.py +30 -0
  15. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_merge_queue.py +128 -2
  16. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_throwaway_vm.py +29 -4
  17. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/board.md +0 -0
  18. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/complete-session.md +0 -0
  19. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/coordinator.md +0 -0
  20. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/_lib.sh +0 -0
  21. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-checkout +0 -0
  22. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-commit +0 -0
  23. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-merge +0 -0
  24. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/coord-ci-acceptance.yml +0 -0
  26. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/auto-release.yml +0 -0
  27. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/publish.yml +0 -0
  28. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/test.yml +0 -0
  29. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.gitignore +0 -0
  30. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/GOAL.md +0 -0
  32. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/LICENSE +0 -0
  33. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/README.md +0 -0
  35. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/SOURCES.txt +0 -0
  36. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/scm_file_list.json +0 -0
  40. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/backup.py +0 -0
  54. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_schema.py +0 -0
  56. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_wire.py +0 -0
  58. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/brain.py +0 -0
  59. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/branch_model.py +0 -0
  60. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/bug_intake.py +0 -0
  61. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/bugbash.py +0 -0
  62. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/cargo_cache.py +0 -0
  63. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_fix.py +0 -0
  64. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_github.py +0 -0
  65. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_gitlab.py +0 -0
  66. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/claim.py +0 -0
  67. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/claude_setup_token.py +0 -0
  68. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/cli.py +0 -0
  69. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/client.py +0 -0
  70. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/codegen.py +0 -0
  71. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/__init__.py +0 -0
  72. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/_common.py +0 -0
  73. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/acceptance.py +0 -0
  74. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/agent_ops.py +0 -0
  75. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/audit.py +0 -0
  76. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/backup.py +0 -0
  77. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/bugbash.py +0 -0
  78. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/chat.py +0 -0
  79. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/ci.py +0 -0
  80. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/codegen.py +0 -0
  81. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dispatch.py +0 -0
  82. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dispatch_workers.py +0 -0
  83. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dr.py +0 -0
  84. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/drive.py +0 -0
  85. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/drive_queue.py +0 -0
  86. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/gate_a.py +0 -0
  87. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/gates.py +0 -0
  88. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/issues.py +0 -0
  89. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/lifecycle.py +0 -0
  90. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/machine.py +0 -0
  91. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/merge.py +0 -0
  92. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/milestone.py +0 -0
  93. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/plan_followup.py +0 -0
  94. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/plans.py +0 -0
  95. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/portal.py +0 -0
  96. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/pr.py +0 -0
  97. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/release.py +0 -0
  98. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/repo.py +0 -0
  99. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/report.py +0 -0
  100. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/review.py +0 -0
  101. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/scorecard.py +0 -0
  102. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/sessions.py +0 -0
  103. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/setup.py +0 -0
  104. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/status.py +0 -0
  105. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/store_migrate.py +0 -0
  106. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/terminal.py +0 -0
  107. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/test_gate.py +0 -0
  108. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/tui.py +0 -0
  109. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/comments.py +0 -0
  110. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/config.py +0 -0
  111. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/config_reload.py +0 -0
  112. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/confirm_test.py +0 -0
  113. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/conflict_fix.py +0 -0
  114. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dao.py +0 -0
  115. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/__init__.py +0 -0
  116. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/fixture.py +0 -0
  117. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/index.html +0 -0
  118. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/server.py +0 -0
  119. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/terminal.py +0 -0
  120. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/db.py +0 -0
  121. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dead_end.py +0 -0
  122. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/decomposition_chat.py +0 -0
  123. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/README.md +0 -0
  124. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-agent.service +0 -0
  125. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-backup.service +0 -0
  126. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-backup.timer +0 -0
  127. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.service +0 -0
  128. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.sh +0 -0
  129. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.timer +0 -0
  130. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-dr-verify.service +0 -0
  131. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-dr-verify.timer +0 -0
  132. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-drive-queue.service +0 -0
  133. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-drive-queue.timer +0 -0
  134. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-failure-notify.service +0 -0
  135. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-fleet-watchdog.service +0 -0
  136. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  137. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-notify.service +0 -0
  138. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-notify.timer +0 -0
  139. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-propagate.service +0 -0
  140. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-propagate.timer +0 -0
  141. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-window.service +0 -0
  142. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-window.timer +0 -0
  143. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-serve.service +0 -0
  144. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web-dist-build.service +0 -0
  145. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web-dist-build.timer +0 -0
  146. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web.service +0 -0
  147. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy_manifest.py +0 -0
  148. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy_units.py +0 -0
  149. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deprecation_telemetry.py +0 -0
  150. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deps.py +0 -0
  151. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/diagnose.py +0 -0
  152. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dispatch_liveness.py +0 -0
  153. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dist_name.py +0 -0
  154. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dr_promote.py +0 -0
  155. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dr_verify.py +0 -0
  156. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive.py +0 -0
  157. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_queue.py +0 -0
  158. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_sessions_snapshot.py +0 -0
  159. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_state.py +0 -0
  160. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/events.py +0 -0
  161. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/failure_class.py +0 -0
  162. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/failure_classifier.py +0 -0
  163. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/filelock.py +0 -0
  164. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/fleet_config_health.py +0 -0
  165. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/forge_availability.py +0 -0
  166. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/freshness.py +0 -0
  167. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_a.py +0 -0
  168. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_b.py +0 -0
  169. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_snapshot.py +0 -0
  170. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gates.py +0 -0
  171. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gen_board_fixture.py +0 -0
  172. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/github_ops.py +0 -0
  173. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/github_throttle.py +0 -0
  174. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/goal.py +0 -0
  175. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/graph_health.py +0 -0
  176. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gtk_native_driver.py +0 -0
  177. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/__init__.py +0 -0
  178. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/aggregate.py +0 -0
  179. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/__init__.py +0 -0
  180. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/_ci_pin.py +0 -0
  181. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/agent_install.py +0 -0
  182. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/cargo_targets.py +0 -0
  183. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/claude_binary.py +0 -0
  184. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/config_drift.py +0 -0
  185. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  186. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/coord_web_ci_pin.py +0 -0
  187. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/deploy_lane_facts.py +0 -0
  188. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/disk.py +0 -0
  189. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_board.py +0 -0
  190. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  191. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_phantom.py +0 -0
  192. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_unit_drift.py +0 -0
  193. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/graph.py +0 -0
  194. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/graphify_cli.py +0 -0
  195. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/index_lock.py +0 -0
  196. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/issues_sync_staleness.py +0 -0
  197. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/local_machine_identity.py +0 -0
  198. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/plan_usage.py +0 -0
  199. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/pr_churn.py +0 -0
  200. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/release_cordon.py +0 -0
  201. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/repo_state.py +0 -0
  202. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/spawned_coord.py +0 -0
  203. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/stalled_pipeline.py +0 -0
  204. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/timer_active.py +0 -0
  205. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/toolchain.py +0 -0
  206. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/unit_drift.py +0 -0
  207. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/unit_enablement.py +0 -0
  208. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/wedged_drive_queue.py +0 -0
  209. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/worktrees.py +0 -0
  210. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/cli.py +0 -0
  211. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/context.py +0 -0
  212. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/fleet_snapshot.py +0 -0
  213. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/models.py +0 -0
  214. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/pypi.py +0 -0
  215. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/registry.py +0 -0
  216. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/render.py +0 -0
  217. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/units.py +0 -0
  218. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/hooks.py +0 -0
  219. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/housekeeping.py +0 -0
  220. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/interactive.py +0 -0
  221. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/invariant_alarms.py +0 -0
  222. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/issue_store.py +0 -0
  223. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/issues_sync_status.py +0 -0
  224. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/liveness_auditor.py +0 -0
  225. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/mac_native_driver.py +0 -0
  226. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_fault.py +0 -0
  227. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_metrics.py +0 -0
  228. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_onboard.py +0 -0
  229. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_pause.py +0 -0
  230. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_stats.py +0 -0
  231. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_chat.py +0 -0
  232. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_gate.py +0 -0
  233. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_order.py +0 -0
  234. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/mock_author.py +0 -0
  235. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/models.py +0 -0
  236. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/network.py +0 -0
  237. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/new_issue_chat.py +0 -0
  238. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/__init__.py +0 -0
  239. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/baseline.py +0 -0
  240. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/cli.py +0 -0
  241. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/collect.py +0 -0
  242. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/digest.py +0 -0
  243. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/models.py +0 -0
  244. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/predicate.py +0 -0
  245. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/service.py +0 -0
  246. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/store.py +0 -0
  247. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/transport.py +0 -0
  248. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notify.py +0 -0
  249. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/openapi.py +0 -0
  250. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/overlap_fence.py +0 -0
  251. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/overlap_predict.py +0 -0
  252. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/parentage.py +0 -0
  253. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/parentage_github.py +0 -0
  254. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/pipeline.py +0 -0
  255. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/plan_parser.py +0 -0
  256. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/plans.py +0 -0
  257. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/platform_paths.py +0 -0
  258. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_bridge.py +0 -0
  259. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_store.py +0 -0
  260. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_sync.py +0 -0
  261. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/pr_body_lint.py +0 -0
  262. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/prereqs.py +0 -0
  263. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/progress.py +0 -0
  264. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/__init__.py +0 -0
  265. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/base.py +0 -0
  266. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/claude.py +0 -0
  267. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/claude_pty.py +0 -0
  268. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/opencode.py +0 -0
  269. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/queue_diagnose.py +0 -0
  270. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reconcile.py +0 -0
  271. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reconcile_tick.py +0 -0
  272. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/refine_chat.py +0 -0
  273. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_cordon.py +0 -0
  274. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_gate.py +0 -0
  275. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_propagate.py +0 -0
  276. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_verify.py +0 -0
  277. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_window.py +0 -0
  278. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_dormancy.py +0 -0
  279. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_edit.py +0 -0
  280. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_onboard.py +0 -0
  281. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reports.py +0 -0
  282. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/rest_schema.py +0 -0
  283. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/restart_cmd.py +0 -0
  284. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/revalidate.py +0 -0
  285. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/review.py +0 -0
  286. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/scorecard.py +0 -0
  287. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/self_health.py +0 -0
  288. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/serve_app.py +0 -0
  289. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  290. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  291. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  292. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  293. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  294. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/portal-followup/SKILL.md +0 -0
  295. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/release-now/SKILL.md +0 -0
  296. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  297. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  298. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/update-issue/SKILL.md +0 -0
  299. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/smoke.py +0 -0
  300. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/smoke_tags.py +0 -0
  301. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/spend_ceiling.py +0 -0
  302. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/split_work.py +0 -0
  303. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/sql.py +0 -0
  304. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/stage_projection.py +0 -0
  305. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/state.py +0 -0
  306. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/store_migrate.py +0 -0
  307. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/store_parity.py +0 -0
  308. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/templates/deploy-cloudflare.node.yml +0 -0
  309. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_author.py +0 -0
  310. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_chat.py +0 -0
  311. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_orchestrator.py +0 -0
  312. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_report.py +0 -0
  313. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/tui_pty_driver.py +0 -0
  314. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/tui_release.py +0 -0
  315. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/uat_checks.py +0 -0
  316. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage.py +0 -0
  317. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage_limits.py +0 -0
  318. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage_rollup.py +0 -0
  319. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/win_native_bridge.py +0 -0
  320. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/win_native_driver.py +0 -0
  321. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/worker_events.py +0 -0
  322. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coordinator.example.yml +0 -0
  323. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-agent.service +0 -0
  324. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-backup.service +0 -0
  325. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-backup.timer +0 -0
  326. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.service +0 -0
  327. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.sh +0 -0
  328. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.timer +0 -0
  329. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-dr-verify.service +0 -0
  330. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-dr-verify.timer +0 -0
  331. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-drive-queue.service +0 -0
  332. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-drive-queue.timer +0 -0
  333. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-failure-notify.service +0 -0
  334. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-failure-notify.sh +0 -0
  335. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-fleet-watchdog.service +0 -0
  336. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-fleet-watchdog.timer +0 -0
  337. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-notify.service +0 -0
  338. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-notify.timer +0 -0
  339. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-propagate.service +0 -0
  340. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-propagate.timer +0 -0
  341. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-window.service +0 -0
  342. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-window.timer +0 -0
  343. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-serve.service +0 -0
  344. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.service +0 -0
  345. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.sh +0 -0
  346. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.timer +0 -0
  347. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-rollback.sh +0 -0
  348. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web.service +0 -0
  349. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/node-shim.sh +0 -0
  350. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_TUI_CI.md +0 -0
  351. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  352. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_CI.md +0 -0
  353. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_DIST.md +0 -0
  354. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  355. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/AGENT_OPERATIONS.md +0 -0
  356. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ARCHITECTURE.md +0 -0
  357. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ARCH_SECURITY_GATES.md +0 -0
  358. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/COCKPIT.md +0 -0
  359. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CONTROL_CENTER.md +0 -0
  360. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/COST_DISCIPLINE.md +0 -0
  361. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CROSS_PLATFORM.md +0 -0
  362. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CUSTOMER_FACING_APPS.md +0 -0
  363. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CUSTOMER_PORTAL.md +0 -0
  364. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DATA_STORE_SELECTION.md +0 -0
  365. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DISASTER_RECOVERY.md +0 -0
  366. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DRIVE_QUEUE.md +0 -0
  367. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/EPHEMERAL_WORKERS.md +0 -0
  368. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/FORGE_MIGRATION.md +0 -0
  369. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/GRAPHIFY_SETUP.md +0 -0
  370. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ISSUE_GUIDANCE.md +0 -0
  371. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/MAC_MINI.md +0 -0
  372. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  373. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/NOTIFIER.md +0 -0
  374. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPENCODE_VERIFICATION.md +0 -0
  375. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPERATING_GOTCHAS.md +0 -0
  376. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPERATOR_GUIDES.md +0 -0
  377. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ORACLE_LOOP.md +0 -0
  378. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PHONE_WEBAPP.md +0 -0
  379. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PIPELINE_V2.md +0 -0
  380. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PLATFORM_EVOLUTION.md +0 -0
  381. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/SECOND_BACKEND.md +0 -0
  382. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/STORE_SERVICE.md +0 -0
  383. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  384. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/WEB_CONTROL_CENTER.md +0 -0
  385. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/WSL_WINDOWS_WORKER.md +0 -0
  386. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/README.md +0 -0
  387. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/_tokens.css +0 -0
  388. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/issue-detail.html +0 -0
  389. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/pipeline-narrow.html +0 -0
  390. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/pipeline-wide.html +0 -0
  391. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/graphify-out/.gitignore +0 -0
  392. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/install-agent.sh +0 -0
  393. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/pyproject.toml +0 -0
  394. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/audit_review_verdict_overrides.py +0 -0
  395. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  396. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/build-worker-image.sh +0 -0
  397. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/coordinator-machine.py +0 -0
  398. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/dr-down.sh +0 -0
  399. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/dr-up.sh +0 -0
  400. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/epic-down.sh +0 -0
  401. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/epic-up.sh +0 -0
  402. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/preflight.sh +0 -0
  403. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/provision-server.sh +0 -0
  404. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/provision-worker.sh +0 -0
  405. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  406. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  407. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/throwaway-vm.sh +0 -0
  408. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/verify-github-token.sh +0 -0
  409. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/check_gh_argv_containment.py +0 -0
  410. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/codegen.py +0 -0
  411. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-test-runner.sh +0 -0
  412. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  413. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  414. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  415. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  416. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-venv-rollback.sh +0 -0
  417. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/drive-batch.sh +0 -0
  418. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/extract-coord-tui.sh +0 -0
  419. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/fleet_watchdog.py +0 -0
  420. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/gen_board_fixture.py +0 -0
  421. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/gen_mock_index.py +0 -0
  422. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/lib/provision-core.sh +0 -0
  423. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/next_release_tag.py +0 -0
  424. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/provision-machine.sh +0 -0
  425. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/run_tests_in_populated_home.sh +0 -0
  426. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/run_tests_without_gh.sh +0 -0
  427. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/setup-macmini.sh +0 -0
  428. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/smoke_437_interactive.py +0 -0
  429. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify-provision-noble.sh +0 -0
  430. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_878_review_capture.py +0 -0
  431. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_release_published.py +0 -0
  432. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_release_wheel.py +0 -0
  433. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/setup.cfg +0 -0
  434. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/SMOKE_SET.md +0 -0
  435. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/__init__.py +0 -0
  436. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/conftest.py +0 -0
  437. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/contract.md +0 -0
  438. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/manifest.yml +0 -0
  439. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  440. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  441. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/contract.md +0 -0
  442. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  443. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  444. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/manifest.yml +0 -0
  445. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  446. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/tsconfig.json +0 -0
  447. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  448. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/backends.py +0 -0
  449. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/board-pipeline-basic.json +0 -0
  450. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  451. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  452. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  453. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  454. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/all_pass.json +0 -0
  455. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  456. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/mixed_fail.json +0 -0
  457. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  458. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  459. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/skip.json +0 -0
  460. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/truncated.json +0 -0
  461. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  462. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  463. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  464. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  465. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  466. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  467. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  468. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  469. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  470. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent.py +0 -0
  471. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_api_error.py +0 -0
  472. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_app.py +0 -0
  473. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_branch_base.py +0 -0
  474. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_branch_capture.py +0 -0
  475. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_config_free_1712.py +0 -0
  476. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_deploy_units_endpoint.py +0 -0
  477. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_dirty_worktree.py +0 -0
  478. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  479. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_graph_self_heal.py +0 -0
  480. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_health_h3.py +0 -0
  481. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_idle_restart.py +0 -0
  482. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_push_failure.py +0 -0
  483. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_reap.py +0 -0
  484. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_repos_and_pull.py +0 -0
  485. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_restart_services_endpoint.py +0 -0
  486. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_skills_self_heal.py +0 -0
  487. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_startup_diagnostics.py +0 -0
  488. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_update.py +0 -0
  489. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_update_bluegreen.py +0 -0
  490. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_usage_limit.py +0 -0
  491. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_zero_commit.py +0 -0
  492. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ambient_home_isolation.py +0 -0
  493. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_capability_reroute_3241.py +0 -0
  494. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_dependency_busy_2804.py +0 -0
  495. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_reject_plan.py +0 -0
  496. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_usage_gate.py +0 -0
  497. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approved_work_2532.py +0 -0
  498. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approved_work_2996.py +0 -0
  499. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_assignment_already_recorded_daemon.py +0 -0
  500. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_log.py +0 -0
  501. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_outcome.py +0 -0
  502. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_query.py +0 -0
  503. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_auto_loop.py +0 -0
  504. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_auto_release_publish_2035.py +0 -0
  505. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_backend_selection.py +0 -0
  506. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_backup.py +0 -0
  507. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_block_log.py +0 -0
  509. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_cap_762.py +0 -0
  510. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_fixture.py +0 -0
  511. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_read_path.py +0 -0
  512. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_schema.py +0 -0
  513. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_service.py +0 -0
  514. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_state.py +0 -0
  515. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_wire.py +0 -0
  516. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_brain.py +0 -0
  517. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_branch_model.py +0 -0
  518. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_bug_intake.py +0 -0
  519. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_bugbash.py +0 -0
  520. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_build_worker_image_env_update.py +0 -0
  521. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cargo_cache.py +0 -0
  522. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_check_gh_argv_containment.py +0 -0
  523. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_acceptance_gate_1950.py +0 -0
  524. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_fix.py +0 -0
  525. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_github.py +0 -0
  526. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_gitlab.py +0 -0
  527. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_parity_2091.py +0 -0
  528. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_store.py +0 -0
  529. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claim.py +0 -0
  530. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claude_md_budget.py +0 -0
  531. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claude_setup_token.py +0 -0
  532. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_acceptance.py +0 -0
  533. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign.py +0 -0
  534. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  535. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_interactive_remote.py +0 -0
  536. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_provider.py +0 -0
  537. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  538. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_audit.py +0 -0
  539. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_chat_continue.py +0 -0
  540. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_ci.py +0 -0
  541. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_codegen.py +0 -0
  542. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_decide.py +0 -0
  543. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_capability_rules.py +0 -0
  544. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_config_provenance.py +0 -0
  545. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_forge_availability.py +0 -0
  546. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_graph.py +0 -0
  547. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_self.py +0 -0
  548. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_test_coverage.py +0 -0
  549. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor.py +0 -0
  550. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_config_free_1801.py +0 -0
  551. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  552. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  553. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_drive.py +0 -0
  554. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_drive_queue.py +0 -0
  555. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_escalate.py +0 -0
  556. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_fix_headless_review.py +0 -0
  557. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_gate_a.py +0 -0
  558. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_install_drift.py +0 -0
  559. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_install_skills.py +0 -0
  560. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_comment.py +0 -0
  561. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_create_label.py +0 -0
  562. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_reopen.py +0 -0
  563. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_view_list.py +0 -0
  564. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issues.py +0 -0
  565. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_merge.py +0 -0
  566. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_assign.py +0 -0
  567. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_capture.py +0 -0
  568. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_chat_add_child.py +0 -0
  569. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_dispatch.py +0 -0
  570. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_gate_b.py +0 -0
  571. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_gate_c.py +0 -0
  572. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_order.py +0 -0
  573. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  574. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_ship.py +0 -0
  575. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_network.py +0 -0
  576. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_new_issue_chat.py +0 -0
  577. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_plans.py +0 -0
  578. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_portal.py +0 -0
  579. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_pr.py +0 -0
  580. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_pull_artifact.py +0 -0
  581. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_queue.py +0 -0
  582. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_reattach_sessions.py +0 -0
  583. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_refine_board.py +0 -0
  584. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_preflight.py +0 -0
  585. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_propagate.py +0 -0
  586. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_window.py +0 -0
  587. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_repo_2220.py +0 -0
  588. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  589. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_scorecard.py +0 -0
  590. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_serve_store_backend_3084.py +0 -0
  591. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_set_review_findings.py +0 -0
  592. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_advisory_terminal.py +0 -0
  593. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_contested_tag.py +0 -0
  594. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_invariant_alarms.py +0 -0
  595. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_machine_fault.py +0 -0
  596. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_merge_queue.py +0 -0
  597. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_provider.py +0 -0
  598. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_retried_3340.py +0 -0
  599. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_review_finalizing.py +0 -0
  600. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_supervisor_3366.py +0 -0
  601. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_test_failed_tag.py +0 -0
  602. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_usage_limit.py +0 -0
  603. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_sync_comments_873.py +0 -0
  604. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_test_plan.py +0 -0
  605. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_track.py +0 -0
  606. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_tui_update.py +0 -0
  607. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_wait.py +0 -0
  608. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client.py +0 -0
  609. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_base_install.py +0 -0
  610. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_config_cache_atomic_3052.py +0 -0
  611. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_resource_migration_1946.py +0 -0
  612. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_commands_common.py +0 -0
  613. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_comments.py +0 -0
  614. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_completion_summary.py +0 -0
  615. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config.py +0 -0
  616. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_acceptance.py +0 -0
  617. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_audit.py +0 -0
  618. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_drift_check.py +0 -0
  619. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_effective.py +0 -0
  620. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_pricing.py +0 -0
  621. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  622. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_usage_gate.py +0 -0
  623. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_confirm_test.py +0 -0
  624. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_conflict_fix.py +0 -0
  625. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_conflict_fix_semantic.py +0 -0
  626. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  627. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test.py +0 -0
  628. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  629. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_baseline.py +0 -0
  630. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_populated_home.py +0 -0
  631. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_routing.py +0 -0
  632. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_toolchain.py +0 -0
  633. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_uat.py +0 -0
  634. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_web_sse_restart_live.py +0 -0
  635. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coordinator_machine.py +0 -0
  636. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cross_platform_imports.py +0 -0
  637. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dao.py +0 -0
  638. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard.py +0 -0
  639. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_api.py +0 -0
  640. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_fixture.py +0 -0
  641. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_server.py +0 -0
  642. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_terminal.py +0 -0
  643. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_terminal_live.py +0 -0
  644. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_db.py +0 -0
  645. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dead_end.py +0 -0
  646. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_decomposition_chat.py +0 -0
  647. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_db_backup.py +0 -0
  648. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_web_dist.py +0 -0
  649. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_web_rollback.py +0 -0
  650. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_db_backup_unit.py +0 -0
  651. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_drive_queue_unit.py +0 -0
  652. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_failure_notify_unit.py +0 -0
  653. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_manifest.py +0 -0
  654. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_notify_unit.py +0 -0
  655. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_units_lane.py +0 -0
  656. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_web_unit.py +0 -0
  657. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deprecation_telemetry.py +0 -0
  658. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deps.py +0 -0
  659. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_diagnose.py +0 -0
  660. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_liveness.py +0 -0
  661. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_target_validation.py +0 -0
  662. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_workers.py +0 -0
  663. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dist_name.py +0 -0
  664. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_done_housekeeping.py +0 -0
  665. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_azure_scripts.py +0 -0
  666. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_promote.py +0 -0
  667. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_verify.py +0 -0
  668. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive.py +0 -0
  669. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_machine_fault.py +0 -0
  670. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gtk_native_driver.py +0 -0
  711. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_handoff.py +0 -0
  712. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_checks.py +0 -0
  713. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_cli.py +0 -0
  714. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_cli_graph.py +0 -0
  715. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_config.py +0 -0
  716. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_context.py +0 -0
  717. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_coord_tui_ci_pin.py +0 -0
  718. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_coord_web_ci_pin.py +0 -0
  719. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_deploy_lane_facts.py +0 -0
  720. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_fix.py +0 -0
  721. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_incident_regression.py +0 -0
  722. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_issues_sync_staleness.py +0 -0
  723. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_pr_churn.py +0 -0
  724. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_pypi.py +0 -0
  725. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_registry.py +0 -0
  726. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_release_cordon_probe.py +0 -0
  727. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_timer_active.py +0 -0
  728. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_toolchain.py +0 -0
  729. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_unit_drift.py +0 -0
  730. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_unit_enablement.py +0 -0
  731. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_wedged_drive_queue.py +0 -0
  732. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_hooks.py +0 -0
  733. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_housekeeping.py +0 -0
  734. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_human_attended_437.py +0 -0
  735. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_init.py +0 -0
  736. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_capabilities_3515.py +0 -0
  737. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_venv_2911.py +0 -0
  738. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_integration.py +0 -0
  739. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive.py +0 -0
  740. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_briefing_echo.py +0 -0
  741. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_pane_log_2541.py +0 -0
  742. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_prefill_state.py +0 -0
  743. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_session_relaunch.py +0 -0
  744. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_test_verdict_backstop.py +0 -0
  745. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_token_attribution.py +0 -0
  746. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_worktree.py +0 -0
  747. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_invariant_alarms.py +0 -0
  748. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_issue_store_seam.py +0 -0
  749. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_issues_sync_status.py +0 -0
  750. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_liveness_auditor.py +0 -0
  751. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_liveness_notify.py +0 -0
  752. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_lock_contention_ratchet.py +0 -0
  753. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_mac_native_driver.py +0 -0
  754. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_fault.py +0 -0
  755. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_metrics.py +0 -0
  756. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_onboard.py +0 -0
  757. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_pause.py +0 -0
  758. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_stats.py +0 -0
  759. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_merge_verify.py +0 -0
  760. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_chat.py +0 -0
  761. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_dispatch.py +0 -0
  762. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_gate.py +0 -0
  763. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_order.py +0 -0
  764. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_seam.py +0 -0
  765. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_mock_author.py +0 -0
  766. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_model_tiering.py +0 -0
  767. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_models.py +0 -0
  768. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_models_config_labels.py +0 -0
  769. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_needs_attention.py +0 -0
  770. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_network.py +0 -0
  771. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_new_issue_chat.py +0 -0
  772. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_next_release_tag.py +0 -0
  773. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_node_shim.py +0 -0
  774. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_baseline.py +0 -0
  775. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_cli.py +0 -0
  776. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_collect.py +0 -0
  777. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_config.py +0 -0
  778. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_drive_seam.py +0 -0
  779. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_isolation.py +0 -0
  780. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_predicate.py +0 -0
  781. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_quiet_hours.py +0 -0
  782. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_service.py +0 -0
  783. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notify.py +0 -0
  784. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notify_drain.py +0 -0
  785. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_openapi.py +0 -0
  786. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_operational_defaults.py +0 -0
  787. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_overlap_fence.py +0 -0
  788. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_overlap_predict.py +0 -0
  789. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_packaged_deploy_units.py +0 -0
  790. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_parentage.py +0 -0
  791. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_paste_landed.py +0 -0
  792. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  793. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_pipeline.py +0 -0
  794. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_approve_plan_command.py +0 -0
  795. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_pr_command.py +0 -0
  796. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_review_command.py +0 -0
  797. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_only.py +0 -0
  798. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_parser.py +0 -0
  799. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_platform_paths.py +0 -0
  800. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_bridge.py +0 -0
  801. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_config.py +0 -0
  802. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_store.py +0 -0
  803. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_sync.py +0 -0
  804. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_pr_body_lint.py +0 -0
  805. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_prereqs.py +0 -0
  806. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_production_db_guard.py +0 -0
  807. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_progress.py +0 -0
  808. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provider_seam.py +0 -0
  809. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers.py +0 -0
  810. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers_config_labels.py +0 -0
  811. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers_pty.py +0 -0
  812. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provision_core.py +0 -0
  813. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provision_machine.py +0 -0
  814. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_py_rust_mirror_inventory.py +0 -0
  815. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_quiet_hours.py +0 -0
  816. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_quiet_hours_store_2146.py +0 -0
  817. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reap_merged_sessions.py +0 -0
  818. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reap_stale_interactive_tick.py +0 -0
  819. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile.py +0 -0
  820. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_branch.py +0 -0
  821. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_completions.py +0 -0
  822. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  823. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_merges.py +0 -0
  824. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_no_agent_record.py +0 -0
  825. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_tick.py +0 -0
  826. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_usage_limit_done.py +0 -0
  827. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_refine_chat.py +0 -0
  828. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_2101.py +0 -0
  829. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  830. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_deadlock_2240.py +0 -0
  831. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  832. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_stuck_2490.py +0 -0
  833. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_gate.py +0 -0
  834. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_propagate.py +0 -0
  835. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_propagate_threshold.py +0 -0
  836. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_roll_between_legs_2854.py +0 -0
  837. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_roll_window_handoff.py +0 -0
  838. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_unified_1242.py +0 -0
  839. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_verify.py +0 -0
  840. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_window.py +0 -0
  841. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_remote_auto_prune.py +0 -0
  842. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_remote_interactive_reaper.py +0 -0
  843. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_add.py +0 -0
  844. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_dormancy.py +0 -0
  845. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_edit_2220.py +0 -0
  846. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_graph_fleet_2237.py +0 -0
  847. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_max_parallel_3423.py +0 -0
  848. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_onboard_2220.py +0 -0
  849. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_report_result_push.py +0 -0
  850. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reports.py +0 -0
  851. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_restart_cmd.py +0 -0
  852. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry.py +0 -0
  853. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_advisory_1606.py +0 -0
  854. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_escalation_classify_3360.py +0 -0
  855. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_type_1636.py +0 -0
  856. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_revalidate.py +0 -0
  857. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review.py +0 -0
  858. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_end_review_without_verdict.py +0 -0
  859. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_parse_failure_diagnostic.py +0 -0
  860. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_reaffirm.py +0 -0
  861. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_state.py +0 -0
  862. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_backstop.py +0 -0
  863. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_override_audit.py +0 -0
  864. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_relay.py +0 -0
  865. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_zero_commits.py +0 -0
  866. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_scoped_review_wiring.py +0 -0
  867. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_scorecard.py +0 -0
  868. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_self_health.py +0 -0
  869. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve.py +0 -0
  870. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_app.py +0 -0
  871. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_app_board_trim.py +0 -0
  872. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_rest_routes.py +0 -0
  873. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_session.py +0 -0
  874. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_slice_issue_attribution.py +0 -0
  875. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke.py +0 -0
  876. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  877. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_live_checkout_restore.py +0 -0
  878. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_workflow.py +0 -0
  879. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_spend_ceiling.py +0 -0
  880. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_spend_ceiling_coordinator.py +0 -0
  881. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_split.py +0 -0
  882. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_split_work.py +0 -0
  883. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_sql_dialect.py +0 -0
  884. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_sqlite_connect_ratchet.py +0 -0
  885. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stage_projection.py +0 -0
  886. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stale_busy_reviewer_697.py +0 -0
  887. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stalled_pipeline.py +0 -0
  888. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_state.py +0 -0
  889. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_state_review_findings_daemon.py +0 -0
  890. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_status_fleet_footer.py +0 -0
  891. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stop_1567.py +0 -0
  892. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_store_contract.py +0 -0
  893. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_store_migrate.py +0 -0
  894. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stuck.py +0 -0
  895. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  896. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_terminal_command.py +0 -0
  897. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_author.py +0 -0
  898. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_chat.py +0 -0
  899. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_orchestrator.py +0 -0
  900. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_report.py +0 -0
  901. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_verdict_parsing.py +0 -0
  902. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_verdict_transcript_floor.py +0 -0
  903. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_text_io_encoding_audit.py +0 -0
  904. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_board_audit.py +0 -0
  905. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_config_load_1080.py +0 -0
  906. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_daemon_routing_906.py +0 -0
  907. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tmux_host.py +0 -0
  908. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tmux_session.py +0 -0
  909. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_transcript_floor.py +0 -0
  910. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tui_pty_driver.py +0 -0
  911. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_uat_checks.py +0 -0
  912. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage.py +0 -0
  913. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage_limits.py +0 -0
  914. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage_rollup.py +0 -0
  915. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_venv_live_install_2121.py +0 -0
  916. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_version_single_source.py +0 -0
  917. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_watch.py +0 -0
  918. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_win_native_bridge.py +0 -0
  919. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_win_native_driver.py +0 -0
  920. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  921. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_env_venv_isolation.py +0 -0
  922. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_events.py +0 -0
  923. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_image_pin_sync.py +0 -0
  924. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_safety.py +0 -0
  925. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_test_scoping.py +0 -0
  926. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worktree.py +0 -0
  927. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  928. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_write_parity.py +0 -0
  929. {code_coordinator-0.5.560 → code_coordinator-0.5.562}/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.560
3
+ Version: 0.5.562
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.560
3
+ Version: 0.5.562
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.560",
2
+ "tag": "0.5.562",
3
3
  "distance": 0,
4
- "node": "g5666afa7cb4eb204e33eebc0db6a4970b8c18242",
4
+ "node": "g4c48decab602ab760461ff8d55ddd5db5baccd46",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-02"
@@ -877,6 +877,66 @@ def oracle_loop_contract_block(
877
877
  if ms_dir is None:
878
878
  return ""
879
879
 
880
+ return _render_oracle_contract_block(
881
+ repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
882
+ )
883
+
884
+
885
+ def oracle_loop_contract_block_for_slice(
886
+ repo_name: str,
887
+ issue_number: int,
888
+ *,
889
+ has_slice: bool,
890
+ exempt: bool,
891
+ ms_dir: str,
892
+ acceptance_dirname: str = ACCEPTANCE_DIRNAME,
893
+ ) -> str:
894
+ """(#2166) The exact same worker-briefing contract text
895
+ :func:`oracle_loop_contract_block` renders, but driven by an already-
896
+ resolved verdict (*has_slice*/*exempt*/*ms_dir*/*acceptance_dirname*)
897
+ instead of scanning a local checkout for one.
898
+
899
+ Exists so :func:`coord.dispatch.dispatch` can build the briefing block
900
+ from the EXACT SAME read :func:`coord.milestone_dispatch.
901
+ issue_oracle_ready` already did for the #1138 hard gate (default
902
+ branch, over ``gh``, one memoised fetch seam) rather than a second,
903
+ independent local-checkout scan that can silently disagree with it —
904
+ the #2166 split-brain: a dispatching host whose base checkout lagged
905
+ the default branch by a few commits had this (the old
906
+ ``oracle_loop_contract_block(Path, ...)`` call) come back ``""`` while
907
+ the gate, reading the default branch directly, had already let the
908
+ issue through — so the worker got dispatched with no oracle contract
909
+ at all, silently.
910
+
911
+ Returns ``""`` when *ms_dir* is empty (the gate never resolved a
912
+ milestone for this issue — ``OracleReadiness.applies`` was ``False``)
913
+ or neither *has_slice* nor *exempt* is set (no contract to point at
914
+ yet). Callers that have a full ``OracleReadiness`` in hand should pass
915
+ its ``has_slice``/``exempt``/``ms_dir``/``acceptance_dirname`` fields
916
+ straight through.
917
+ """
918
+ if not ms_dir or not (has_slice or exempt):
919
+ return ""
920
+ return _render_oracle_contract_block(
921
+ repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
922
+ )
923
+
924
+
925
+ def _render_oracle_contract_block(
926
+ repo_name: str,
927
+ issue_number: int,
928
+ ms_dir: str,
929
+ acceptance_dirname: str,
930
+ *,
931
+ exempt: bool,
932
+ ) -> str:
933
+ """Shared template for :func:`oracle_loop_contract_block` (local-
934
+ checkout scan) and :func:`oracle_loop_contract_block_for_slice`
935
+ (gate-verdict-driven, #2166) — ONE rendering so the text a worker sees
936
+ can never drift between the two slice-presence sources, even though
937
+ which SOURCE decided "there is a slice" differs between the two
938
+ callers.
939
+ """
880
940
  dirname = acceptance_dirname.rstrip("/") if acceptance_dirname else ACCEPTANCE_DIRNAME
881
941
  contract_path = f"{dirname}/{ms_dir}/contract.md"
882
942
  mocks_dir = f"{dirname}/{ms_dir}/mocks"
@@ -733,7 +733,7 @@ def is_verdictless_job(check: CheckRun, job: JobRun | None) -> bool:
733
733
 
734
734
 
735
735
  def checks_are_stale(checks: list[CheckRun], base_commit_time: float | None) -> bool:
736
- """True when a **green** *checks* result predates *base_commit_time* (#1851).
736
+ """True when *checks* predate *base_commit_time* (#1851).
737
737
 
738
738
  GitHub attaches ``pull_request`` check runs to the PR's *head* SHA and
739
739
  re-runs them on head ``synchronize`` — never on base movement — so a
@@ -742,10 +742,17 @@ def checks_are_stale(checks: list[CheckRun], base_commit_time: float | None) ->
742
742
  what matters is what the base looked like when the run *began*, not when
743
743
  it finished.
744
744
 
745
- Callers should apply :func:`failed_checks`/:func:`in_flight_checks`
746
- first — this function assumes *checks* is the all-passing remainder and
747
- doesn't re-derive that itself, so it never contradicts "CI failed"/"CI
748
- running" with a third, competing reading of the same checks. An empty
745
+ Originally written for the caller's all-**passing** remainder — apply
746
+ :func:`failed_checks`/:func:`in_flight_checks` first and pass what's
747
+ left, so this never contradicts "CI failed"/"CI running" with a third,
748
+ competing reading of the same checks. #1986 also calls this with the
749
+ FAILED remainder instead (``coord.merge_queue``'s ``checks_failed``
750
+ path): the comparison itself never inspects ``conclusion``, only
751
+ ``started_at``, so "did this run predate the base?" is the identical
752
+ question either way — there is no second notion of CI staleness for the
753
+ red case, only a second caller asking the same one (#2096: one question,
754
+ one answer). Which verdict a stale run carries decides what the caller's
755
+ message says; it never decides whether the merge blocks. An empty
749
756
  *checks* list (nothing to compare) reads as not-stale; the caller's own
750
757
  "no checks" handling covers that case — see :meth:`CiStore.expects_checks`
751
758
  and ``coord.merge_queue``'s ``checks_absent`` gate (#1904), which now
@@ -12,6 +12,8 @@ import httpx
12
12
  if TYPE_CHECKING:
13
13
  from datetime import datetime
14
14
 
15
+ from coord.milestone_dispatch import OracleReadiness
16
+
15
17
  from coord import github_ops
16
18
  from coord.comments import (
17
19
  format_advisory,
@@ -112,7 +114,7 @@ class DispatchRefused(ValueError):
112
114
 
113
115
  def enforce_oracle_readiness(
114
116
  *, proposal_type: str, repo: Repo | None, config: Config, issue_number: int,
115
- ) -> None:
117
+ ) -> "OracleReadiness | None":
116
118
  """#1138: hard-gate a ``type="work"`` dispatch on the issue-level oracle
117
119
  gate (:func:`coord.milestone_dispatch.issue_oracle_ready`) — refuses an
118
120
  issue that belongs to an oracle-opted-in milestone (Gate A already
@@ -147,11 +149,23 @@ def enforce_oracle_readiness(
147
149
  hard stop would turn a GitHub hiccup into a fleet-wide outage for every
148
150
  oracle-configured repo, which is a worse failure mode than the gap
149
151
  #1138 closes.
152
+
153
+ Returns the :class:`coord.milestone_dispatch.OracleReadiness` verdict
154
+ it computed (``None`` for every cheap-no-op / fail-open case above) —
155
+ (#2166) so ``dispatch()`` can build the worker-briefing oracle-loop
156
+ contract block from THIS SAME verdict instead of re-deriving "does a
157
+ slice exist" via a second, independent read. Before this, the gate
158
+ read the default branch over ``gh`` while the briefing separately
159
+ scanned the dispatching host's local base checkout for a manifest —
160
+ two sources that silently disagreed whenever that checkout lagged
161
+ (#2166's split-brain). One call, reused for both the pass/fail
162
+ decision and the text the worker sees, makes that disagreement
163
+ structurally impossible rather than merely rare.
150
164
  """
151
165
  if proposal_type != "work" or repo is None:
152
- return
166
+ return None
153
167
  if not config.acceptance.has_driver(repo.name):
154
- return
168
+ return None
155
169
 
156
170
  from coord import github_ops # noqa: PLC0415
157
171
  from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
@@ -159,7 +173,7 @@ def enforce_oracle_readiness(
159
173
  try:
160
174
  issue_data = github_ops.get_issue(repo.github, issue_number)
161
175
  except RuntimeError:
162
- return
176
+ return None
163
177
 
164
178
  milestone_number = (issue_data.get("milestone") or {}).get("number")
165
179
  issue_labels = [lbl.get("name", "") for lbl in (issue_data.get("labels") or [])]
@@ -169,6 +183,7 @@ def enforce_oracle_readiness(
169
183
  )
170
184
  if readiness.reason is not None:
171
185
  raise DispatchRefused(readiness.reason)
186
+ return readiness
172
187
 
173
188
 
174
189
  def enforce_epic_dispatch_guard(
@@ -784,7 +799,11 @@ def dispatch(
784
799
  # a driver kind this install doesn't implement. Placed early / before
785
800
  # the TOS gate below so a refusal never depends on provider resolution
786
801
  # succeeding first.
787
- enforce_oracle_readiness(
802
+ #
803
+ # #2166: the returned verdict is reused below to build the worker-
804
+ # briefing oracle-loop contract block — the SAME read this gate just
805
+ # used, not a second independent one — so the two can never disagree.
806
+ oracle_readiness = enforce_oracle_readiness(
788
807
  proposal_type=proposal.type, repo=repo, config=config,
789
808
  issue_number=proposal.issue_number,
790
809
  )
@@ -994,44 +1013,64 @@ def dispatch(
994
1013
  # a milestone-level flag, so "driver configured for this repo" is the
995
1014
  # signal, mirroring the tests/acceptance/ auto-seal above) AND this issue
996
1015
  # already has an authored slice, OR (#3212) is exempted from one —
997
- # oracle_loop_contract_block covers both and returns "" only when neither
998
- # applies (e.g. before Gate A/#931 has run for it at all). An exemption
999
- # waives the automated gate, not the design contract the milestone's
1000
- # mocks define, so the worker still needs the pointer — see
1001
- # oracle_loop_contract_block's docstring for the exempted-issue variant.
1016
+ # oracle_loop_contract_block_for_slice covers both and returns "" only
1017
+ # when neither applies (e.g. before Gate A/#931 has run for it at all).
1018
+ # An exemption waives the automated gate, not the design contract the
1019
+ # milestone's mocks define, so the worker still needs the pointer — see
1020
+ # oracle_loop_contract_block_for_slice's docstring for the exempted-issue
1021
+ # variant.
1022
+ #
1023
+ # #2166: this used to re-derive "does a slice exist" by scanning the
1024
+ # dispatching HOST's local base checkout (`repo_root / search_root`) —
1025
+ # a second, independent read from the #1138 gate above, which reads the
1026
+ # default branch over `gh`. A stale base checkout (nothing refreshes it
1027
+ # automatically — see docs/ORACLE_LOOP.md) made the two disagree: the
1028
+ # gate let a dispatch through because the slice existed on the default
1029
+ # branch, while this scan came back `""` because the local clone hadn't
1030
+ # pulled it yet, silently sending the worker with no oracle contract at
1031
+ # all. Now this builds the block from `oracle_readiness` — the EXACT
1032
+ # verdict the gate above already computed — so there is only one read
1033
+ # and the two can never diverge again.
1002
1034
  briefing_text = proposal.briefing
1003
1035
  if proposal.type == "work" and proposal.issue_number:
1004
- from pathlib import Path # noqa: PLC0415
1005
-
1006
1036
  from coord.state import issue_context_block # noqa: PLC0415
1007
1037
 
1008
1038
  oracle_contract = ""
1009
1039
  if config.acceptance.has_driver(proposal.repo_name):
1010
- from coord.acceptance import oracle_loop_contract_block # noqa: PLC0415
1011
-
1012
- # #2896: the issue's slice may live under the shared repo-root
1013
- # tree (a directory-discovered driver, e.g. ms-37's cli-pytest
1014
- # suite) OR under an entrypoint-linked driver's own sibling
1015
- # `acceptance/` dir (e.g. ms-65's tui-tuidriver suite, relocated
1016
- # out of the repo root) — this dispatch call has no single path
1017
- # in hand to pick a route ahead of time (proposal.issue_number
1018
- # alone doesn't say which), so it tries every search root this
1019
- # repo declares and uses whichever one actually has the slice.
1020
- # A local checkout scan (no `gh`), so trying more than one root
1021
- # costs nothing but a stat/read against a directory that
1022
- # usually doesn't exist.
1023
- repo_root = Path(repo_path).expanduser()
1024
- for search_root in config.acceptance.acceptance_search_roots(
1025
- proposal.repo_name
1026
- ):
1027
- oracle_contract = oracle_loop_contract_block(
1028
- repo_root / search_root,
1040
+ from coord.acceptance import ( # noqa: PLC0415
1041
+ oracle_loop_contract_block_for_slice,
1042
+ )
1043
+
1044
+ if oracle_readiness is not None and oracle_readiness.applies:
1045
+ oracle_contract = oracle_loop_contract_block_for_slice(
1029
1046
  proposal.repo_name,
1030
1047
  proposal.issue_number,
1031
- acceptance_dirname=search_root,
1048
+ has_slice=oracle_readiness.has_slice,
1049
+ exempt=oracle_readiness.exempt,
1050
+ ms_dir=oracle_readiness.ms_dir,
1051
+ acceptance_dirname=oracle_readiness.acceptance_dirname,
1032
1052
  )
1033
- if oracle_contract:
1034
- break
1053
+ # #2166 acceptance criterion: a gate must be able to fail,
1054
+ # and unconfirmed success is a defect — if the gate's own
1055
+ # verdict says there's a slice (or an exemption) to point
1056
+ # at, rendering the block must not silently come back
1057
+ # empty. That combination can only mean a bug in the
1058
+ # renderer above, not "no slice yet" (which `applies`/
1059
+ # `has_slice`/`exempt` already ruled out) — refuse loudly
1060
+ # rather than dispatch a worker with a hollow briefing.
1061
+ if (
1062
+ oracle_readiness.has_slice or oracle_readiness.exempt
1063
+ ) and not oracle_contract:
1064
+ raise DispatchRefused(
1065
+ f"#2166: internal inconsistency building the "
1066
+ f"oracle-loop briefing for {proposal.repo_name}#"
1067
+ f"{proposal.issue_number} — the gate found a "
1068
+ "slice/exemption (ms_dir="
1069
+ f"{oracle_readiness.ms_dir!r}) but rendering the "
1070
+ "contract block came back empty. Refusing rather "
1071
+ "than dispatching a worker with no oracle "
1072
+ "contract."
1073
+ )
1035
1074
 
1036
1075
  # #1720: dispatch-time file-overlap fence — the union of file
1037
1076
  # footprints of every OTHER currently-running work-like assignment
@@ -2770,9 +2770,19 @@ def _ci_checks_are_stale(
2770
2770
  *,
2771
2771
  fail_closed: bool = True,
2772
2772
  ) -> bool:
2773
- """True when *checks* — already confirmed by the caller to have no
2774
- failed/in-flight entries — are stale relative to *target_branch*'s
2775
- current base (#1851).
2773
+ """True when *checks* are stale relative to *target_branch*'s current
2774
+ base (#1851).
2775
+
2776
+ Originally written for the caller's all-PASSING remainder (no
2777
+ failed/in-flight entries) — the ``checks_stale`` path below. #1986 reuses
2778
+ it unchanged for the FAILED remainder too: the underlying comparison
2779
+ (``started_at`` vs. the base's current commit time, via
2780
+ :func:`coord.ci_store.checks_are_stale`) never reads ``conclusion``, so
2781
+ "did this run see the base's current tip?" has exactly one answer
2782
+ regardless of which way the run concluded (#2096: one question, one
2783
+ answer). A stale FAILING check still blocks the merge either way — this
2784
+ only changes whether the refusal names the staleness, never the
2785
+ pass/fail verdict itself.
2776
2786
 
2777
2787
  GitHub does not re-run ``pull_request`` workflows on a base-only move
2778
2788
  (only on head ``synchronize``), so a green check can silently outlive the
@@ -2906,6 +2916,50 @@ def ci_stale_reason(
2906
2916
  )
2907
2917
 
2908
2918
 
2919
+ def checks_failed_stale_suffix(
2920
+ failed: "list[CheckRun]",
2921
+ gh_ops: "GhOps | None",
2922
+ repo_github: str | None,
2923
+ target_branch: str | None,
2924
+ ) -> str:
2925
+ """Clause appended to a ``checks failed: ...`` refusal when the failing
2926
+ run(s) predate *target_branch*'s current base (#1986).
2927
+
2928
+ Hit while merging #1895: a `windows` check was red for `ModuleNotFoundError:
2929
+ No module named 'fcntl'` — a bug #1156 had already fixed on `main` 33
2930
+ commits before this branch's base. The gate reported it as a bare,
2931
+ current-looking failure, inviting either pointless debugging of a defect
2932
+ that no longer exists, or a `--force-merge` reasoned on "it's probably
2933
+ just flaky" — neither of which an operator should have to guess at when
2934
+ the gate already has the evidence.
2935
+
2936
+ #1851/:func:`ci_stale_reason` already answers "did this run see the
2937
+ base's current tip?" for a stale PASSING check; this is the exact same
2938
+ question for a FAILING one, so it reuses :func:`ci_staleness_note` for
2939
+ the anchor wording rather than inventing a second rendering of "predates
2940
+ the base" (#2096: one question, one answer). Callers decide staleness
2941
+ first via :func:`_ci_checks_are_stale` — this never makes that call
2942
+ itself, only renders the clause once asked to.
2943
+
2944
+ Returns ``""`` when the anchors can't be read — the same unreadable case
2945
+ :func:`ci_staleness_note` itself falls back on — so the caller's plain
2946
+ ``checks failed: ...`` message prints unchanged rather than asserting
2947
+ staleness evidence this can't actually produce. Either way the refusal
2948
+ still BLOCKS: this only ever adds provenance to an existing block, never
2949
+ removes or downgrades it.
2950
+ """
2951
+ note = ci_staleness_note(failed, gh_ops, repo_github, target_branch)
2952
+ if not note:
2953
+ return ""
2954
+ branch = target_branch or "the target branch"
2955
+ return (
2956
+ " — but that run predates the current base" + note + " — rebase "
2957
+ f"onto {branch} and push (`git push --force-with-lease`) and let CI "
2958
+ "re-run before trusting this result; a CI re-run against the same "
2959
+ "base cannot see a moved base"
2960
+ )
2961
+
2962
+
2909
2963
  # #1826: `--force-merge` still overrides the CI gate, but the override must
2910
2964
  # never be SILENT — the same posture `epic_closing_keyword_in_commit_forced`
2911
2965
  # already takes for the #1318 gate. A waived stale-CI merge is precisely the
@@ -7649,11 +7703,26 @@ def process(
7649
7703
  summary = ", ".join(
7650
7704
  f"{c.name} ({c.conclusion})" for c in failed
7651
7705
  )
7652
- msg = (
7653
- unreadable_reason
7654
- or infra_reason
7655
- or f"checks failed: {summary}"
7656
- )
7706
+ if unreadable_reason:
7707
+ msg = unreadable_reason
7708
+ elif infra_reason:
7709
+ msg = infra_reason
7710
+ else:
7711
+ # #1986: preview the same staleness
7712
+ # provenance the live path now adds to a
7713
+ # bare `checks failed: ...` — see
7714
+ # `checks_failed_stale_suffix`'s docstring.
7715
+ # Preview-only: never mutates, just shows
7716
+ # what a real attempt would compute.
7717
+ msg = f"checks failed: {summary}"
7718
+ if _ci_checks_are_stale(
7719
+ failed, gh_ops, entry.repo_github,
7720
+ entry.target_branch, _smoke,
7721
+ ):
7722
+ msg += checks_failed_stale_suffix(
7723
+ failed, gh_ops, entry.repo_github,
7724
+ entry.target_branch,
7725
+ )
7657
7726
  events.append(MergeEvent(
7658
7727
  entry, "checks_failed",
7659
7728
  f"(dry run) would be blocked: {msg}",
@@ -8283,6 +8352,20 @@ def process(
8283
8352
  # this already-confirmed streak as a flake.
8284
8353
  entry.ci_flaky_pending = ""
8285
8354
  msg = f"checks failed: {summary}"
8355
+ # #1986: a RED check can be exactly as stale as a GREEN
8356
+ # one (#1851) — it just looks like a current defect
8357
+ # instead of an obvious re-test candidate, which is what
8358
+ # invites either pointless debugging of a bug already
8359
+ # fixed on the current base, or a wrong `--force-merge`.
8360
+ # Reports provenance only; the entry still blocks either
8361
+ # way (see `checks_failed_stale_suffix`'s docstring).
8362
+ if _ci_checks_are_stale(
8363
+ failed, gh_ops, entry.repo_github, entry.target_branch,
8364
+ smoke,
8365
+ ):
8366
+ msg += checks_failed_stale_suffix(
8367
+ failed, gh_ops, entry.repo_github, entry.target_branch,
8368
+ )
8286
8369
  entry.error = msg
8287
8370
  events.append(MergeEvent(entry, "checks_failed", msg))
8288
8371
  continue # #292: skip, don't halt the group
@@ -433,6 +433,7 @@ def _fetch_manifest_data(
433
433
  *,
434
434
  issue_number: int | None = None,
435
435
  roots: Iterable[str] | None = None,
436
+ root_out: "list[str] | None" = None,
436
437
  ):
437
438
  """*milestone_number*'s manifest data via *fetch* (a raw-content GitHub
438
439
  fetch, no local checkout, no directory listing) — the legacy single-file
@@ -468,6 +469,16 @@ def _fetch_manifest_data(
468
469
  unchanged from before #2896. Tries each root until one actually has a
469
470
  legacy manifest and/or fragment file; a milestone's data lives under
470
471
  exactly one, so the first root that produces anything wins.
472
+
473
+ *root_out* (#2166), when given, has the matched root dir appended —
474
+ the SAME root this data actually came from — so a caller rendering the
475
+ worker-briefing contract block (which needs to name a repo-relative
476
+ dirname in the text, e.g. ``tests/acceptance/ms-37/contract.md``) can
477
+ do so without a second, independent search. Appends the first
478
+ candidate root (or the legacy single-root default) when nothing
479
+ matched, mirroring the fall-through return below — there is no "right"
480
+ root to name for a slice that doesn't exist, so the caller must check
481
+ ``has_slice``/``exempt`` before trusting this for message text.
471
482
  """
472
483
  from coord import github_ops # noqa: PLC0415
473
484
  from coord.acceptance import ( # noqa: PLC0415
@@ -511,6 +522,8 @@ def _fetch_manifest_data(
511
522
  legacy, legacy_found = _fetch_one(f"{root_dir}/{ms_dir}", "manifest")
512
523
  if issue_number is None:
513
524
  if legacy_found:
525
+ if root_out is not None:
526
+ root_out.append(root_dir)
514
527
  return legacy
515
528
  continue
516
529
  fragment, fragment_found = _fetch_one(
@@ -518,10 +531,14 @@ def _fetch_manifest_data(
518
531
  str(issue_number),
519
532
  )
520
533
  if legacy_found or fragment_found:
534
+ if root_out is not None:
535
+ root_out.append(root_dir)
521
536
  return merge_manifest_data(legacy, fragment)
522
537
 
523
538
  # No root produced anything — degrade to empty data, same as the old
524
539
  # single-root "not found" behaviour.
540
+ if root_out is not None:
541
+ root_out.append(search_roots[0])
525
542
  return legacy if issue_number is None else merge_manifest_data(legacy, fragment)
526
543
 
527
544
 
@@ -714,6 +731,19 @@ class OracleReadiness:
714
731
  #: gate doesn't apply. ``"approved"``/``"exempt"`` are the only values
715
732
  #: that let ``reason`` be ``None``.
716
733
  gate_a_state: str = ""
734
+ #: (#2166) The milestone this readiness verdict was computed against,
735
+ #: and the ``ms-NN`` directory name / repo-relative acceptance-root
736
+ #: dirname the slice (or exemption) it found actually lives under —
737
+ #: set whenever ``applies`` is ``True``. Exists so a caller that needs
738
+ #: to RENDER the worker-briefing contract block
739
+ #: (:func:`coord.acceptance.oracle_loop_contract_block_for_slice`) can
740
+ #: do so from THIS SAME verdict instead of re-deriving "does a slice
741
+ #: exist" from a second, independent read (previously a scan of the
742
+ #: dispatching host's local checkout, #2166's split-brain) — one
743
+ #: fetch, one source of truth, per #2096 "one question, one answer".
744
+ milestone_number: int | None = None
745
+ ms_dir: str = ""
746
+ acceptance_dirname: str = ""
717
747
 
718
748
 
719
749
  def _gate_a_exempt_trade_off_note(
@@ -857,14 +887,27 @@ def issue_oracle_ready(
857
887
  from coord.acceptance import test_ids_for_issue # noqa: PLC0415
858
888
  from coord.acceptance_drivers import SUPPORTED_KINDS # noqa: PLC0415
859
889
 
890
+ # #2166: capture WHICH search root this issue's manifest data actually
891
+ # came from, so the verdict below can carry enough to let a caller
892
+ # render the worker-briefing contract block from THIS read — the same
893
+ # `gh`-fetched-from-the-default-branch source the gate itself just
894
+ # used — instead of a second, independent local-checkout scan that can
895
+ # silently disagree with it (the #2166 split-brain).
896
+ matched_roots: list[str] = []
860
897
  manifest = _fetch_manifest_data(
861
898
  repo_cfg.github, milestone_number, repo_cfg.default_branch, fetch,
862
899
  issue_number=issue_number,
863
900
  roots=config.acceptance.acceptance_search_roots(repo_cfg.name),
901
+ root_out=matched_roots,
864
902
  )
865
903
  has_slice = bool(test_ids_for_issue(manifest.tests, issue_number))
866
904
  exempt = issue_number in manifest.exempt or "oracle:exempt" in set(issue_labels)
867
905
 
906
+ from coord.acceptance import ACCEPTANCE_DIRNAME, ms_dirname # noqa: PLC0415
907
+
908
+ ms_dir = ms_dirname(milestone_number)
909
+ acceptance_dirname = matched_roots[0] if matched_roots else ACCEPTANCE_DIRNAME
910
+
868
911
  entry = config.acceptance.drivers.get(repo_cfg.name)
869
912
  unsupported = _unsupported_driver_kinds(entry) if entry is not None else ()
870
913
 
@@ -887,13 +930,16 @@ def issue_oracle_ready(
887
930
  return OracleReadiness(
888
931
  applies=True, exempt=exempt, has_slice=has_slice,
889
932
  unsupported_kinds=unsupported, reason=signoff.reason,
890
- gate_a_state=signoff.state,
933
+ gate_a_state=signoff.state, milestone_number=milestone_number,
934
+ ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
891
935
  )
892
936
 
893
937
  if exempt:
894
938
  return OracleReadiness(
895
939
  applies=True, exempt=True, has_slice=has_slice,
896
940
  unsupported_kinds=unsupported, gate_a_state=signoff.state,
941
+ milestone_number=milestone_number, ms_dir=ms_dir,
942
+ acceptance_dirname=acceptance_dirname,
897
943
  )
898
944
 
899
945
  reason: str | None = None
@@ -920,7 +966,8 @@ def issue_oracle_ready(
920
966
  return OracleReadiness(
921
967
  applies=True, exempt=False, has_slice=has_slice,
922
968
  unsupported_kinds=unsupported, reason=reason,
923
- gate_a_state=signoff.state,
969
+ gate_a_state=signoff.state, milestone_number=milestone_number,
970
+ ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
924
971
  )
925
972
 
926
973
 
@@ -1304,3 +1304,33 @@ def _no_frozen_coord_dir_constants():
1304
1304
  _scrub_lazy_coord_dir_constants()
1305
1305
  yield
1306
1306
  _scrub_lazy_coord_dir_constants()
1307
+
1308
+
1309
+ @pytest.fixture(autouse=True)
1310
+ def _non_wsl_host_by_default(monkeypatch):
1311
+ """#3532: ``coord.win_native_bridge.is_wsl_host`` detects the REAL host
1312
+ it's running on (``WSL_DISTRO_NAME``/``/proc/version``) — fine for
1313
+ production, but it means every ``win-native`` acceptance-driver test
1314
+ that doesn't scripts its own ``run_native_spec``/bridge fake implicitly
1315
+ assumed "whatever machine runs this test suite is not WSL". That held
1316
+ for every machine except dell64 (a genuine WSL2 host with a working
1317
+ Windows-side Python, #3519): there, ``is_wsl_host()`` legitimately
1318
+ returns ``True`` and ``coord.acceptance_drivers._run_win_native`` takes
1319
+ the real WSL->Windows bridge path instead of the scripted fake these
1320
+ tests set up on ``coord.win_native_driver.run_native_spec`` — a
1321
+ baseline-red latch (#3386), not a test bug in the assertions themselves.
1322
+
1323
+ Forcing the DEFAULT to non-WSL here, once, is the same "one question,
1324
+ one answer" posture as this file's other ``_no_real_*``/``_no_live_*``
1325
+ fixtures: every test in the suite gets a hermetic answer to "is this
1326
+ host WSL" regardless of which machine actually runs it. A test that
1327
+ means to exercise the WSL/bridge branch (``TestRunDriverWinNativeWslBridge``
1328
+ in ``tests/test_acceptance_drivers.py``) monkeypatches
1329
+ ``win_native_bridge.is_wsl_host`` back to ``True`` itself, inside the
1330
+ test body — that call reuses this same function-scoped ``monkeypatch``
1331
+ fixture and so simply wins (last ``setattr`` on the same attribute),
1332
+ no ordering trick needed.
1333
+ """
1334
+ import coord.win_native_bridge as win_native_bridge
1335
+
1336
+ monkeypatch.setattr(win_native_bridge, "is_wsl_host", lambda: False)
@@ -48,6 +48,7 @@ from coord.acceptance import (
48
48
  ms_dir_for_exempt_issue,
49
49
  ms_dir_for_issue,
50
50
  oracle_loop_contract_block,
51
+ oracle_loop_contract_block_for_slice,
51
52
  oracle_loop_contract_reviewer_note,
52
53
  parse_manifest_text,
53
54
  resolve_for_path,
@@ -1467,6 +1468,63 @@ class TestOracleLoopContractBlock:
1467
1468
  assert "`tests/acceptance/" not in block
1468
1469
 
1469
1470
 
1471
+ class TestOracleLoopContractBlockForSlice:
1472
+ """(#2166) :func:`oracle_loop_contract_block_for_slice` renders the
1473
+ exact same text :func:`oracle_loop_contract_block` does, but from an
1474
+ already-resolved verdict (no local checkout) — the version
1475
+ `coord.dispatch.dispatch` now uses so the worker-briefing block can
1476
+ never drift from the #1138 gate's own read."""
1477
+
1478
+ def test_empty_when_ms_dir_missing(self) -> None:
1479
+ # OracleReadiness.applies == False (e.g. no milestone) -> ms_dir
1480
+ # is "" -> nothing to render, same as oracle_loop_contract_block's
1481
+ # "no manifest found" case.
1482
+ assert oracle_loop_contract_block_for_slice(
1483
+ "api", 945, has_slice=False, exempt=False, ms_dir="",
1484
+ ) == ""
1485
+
1486
+ def test_empty_when_neither_slice_nor_exempt(self) -> None:
1487
+ # A milestone resolved (ms_dir set) but this issue has no slice and
1488
+ # isn't exempted — the #1138 gate's own "no acceptance slice yet"
1489
+ # refusal covers this case; nothing to point the worker at.
1490
+ assert oracle_loop_contract_block_for_slice(
1491
+ "api", 945, has_slice=False, exempt=False, ms_dir="ms-25",
1492
+ ) == ""
1493
+
1494
+ def test_renders_same_text_as_the_local_checkout_scan(
1495
+ self, tmp_path: Path,
1496
+ ) -> None:
1497
+ root = tmp_path / "tests" / "acceptance"
1498
+ (root / "ms25").mkdir(parents=True)
1499
+ (root / "ms25" / "manifest.yml").write_text("tests:\n ms25::a: 945\n")
1500
+ from_disk = oracle_loop_contract_block(root, "api", 945)
1501
+ from_verdict = oracle_loop_contract_block_for_slice(
1502
+ "api", 945, has_slice=True, exempt=False, ms_dir="ms25",
1503
+ acceptance_dirname=ACCEPTANCE_DIRNAME,
1504
+ )
1505
+ assert from_disk == from_verdict
1506
+ assert "coord acceptance run --repo api --issue 945" in from_verdict
1507
+
1508
+ def test_renders_the_exempt_variant(self) -> None:
1509
+ block = oracle_loop_contract_block_for_slice(
1510
+ "api", 1125, has_slice=False, exempt=True, ms_dir="ms-37",
1511
+ acceptance_dirname="tests/acceptance",
1512
+ )
1513
+ assert "(exempted issue, #3212)" in block
1514
+ assert "tests/acceptance/ms-37/contract.md" in block
1515
+ # The exempted variant deliberately drops the "run coord
1516
+ # acceptance run" instruction (there is no slice of its own).
1517
+ assert "coord acceptance run" not in block
1518
+
1519
+ def test_acceptance_dirname_names_a_relocated_slice(self) -> None:
1520
+ block = oracle_loop_contract_block_for_slice(
1521
+ "coord-tui", 2282, has_slice=True, exempt=False, ms_dir="ms-65",
1522
+ acceptance_dirname="tui/tests/acceptance/",
1523
+ )
1524
+ assert "tui/tests/acceptance/ms-65/contract.md" in block
1525
+ assert "`tests/acceptance/" not in block
1526
+
1527
+
1470
1528
  class TestMsDirForExemptIssue:
1471
1529
  """#3212: sibling to ms_dir_for_issue, but for an issue named in a
1472
1530
  manifest's `exempt:` list rather than one with a test mapping."""