code-coordinator 0.5.535__tar.gz → 0.5.537__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 (911) hide show
  1. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/gate_a.py +51 -2
  5. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/merge.py +64 -121
  6. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/merge_queue.py +19 -15
  7. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/milestone_dispatch.py +72 -4
  8. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_gate_a.py +34 -0
  9. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_merge.py +46 -32
  10. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_milestone_dispatch.py +156 -0
  11. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_revalidate.py +64 -263
  12. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/.gitignore +0 -0
  25. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/GOAL.md +0 -0
  27. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/LICENSE +0 -0
  28. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/README.md +0 -0
  30. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/backup.py +0 -0
  50. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/board_schema.py +0 -0
  52. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/claude_setup_token.py +0 -0
  64. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/client.py +0 -0
  66. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/codegen.py +0 -0
  67. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/backup.py +0 -0
  73. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/ci.py +0 -0
  75. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/codegen.py +0 -0
  76. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/machine.py +0 -0
  85. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/config.py +0 -0
  104. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/db.py +0 -0
  114. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/events.py +0 -0
  155. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/__init__.py +0 -0
  171. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/aggregate.py +0 -0
  172. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/__init__.py +0 -0
  173. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/_ci_pin.py +0 -0
  174. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/agent_install.py +0 -0
  175. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/cargo_targets.py +0 -0
  176. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/claude_binary.py +0 -0
  177. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/config_drift.py +0 -0
  178. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  179. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/coord_web_ci_pin.py +0 -0
  180. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/deploy_lane_facts.py +0 -0
  181. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/disk.py +0 -0
  182. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/fleet_board.py +0 -0
  183. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  184. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/fleet_phantom.py +0 -0
  185. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/fleet_unit_drift.py +0 -0
  186. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/graph.py +0 -0
  187. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/graphify_cli.py +0 -0
  188. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/index_lock.py +0 -0
  189. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/issues_sync_staleness.py +0 -0
  190. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/local_machine_identity.py +0 -0
  191. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/milestone_chat.py +0 -0
  224. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/milestone_gate.py +0 -0
  225. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/milestone_order.py +0 -0
  226. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/mock_author.py +0 -0
  227. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/models.py +0 -0
  228. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/network.py +0 -0
  229. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/new_issue_chat.py +0 -0
  230. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/__init__.py +0 -0
  231. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/baseline.py +0 -0
  232. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/cli.py +0 -0
  233. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/collect.py +0 -0
  234. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/digest.py +0 -0
  235. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/models.py +0 -0
  236. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/predicate.py +0 -0
  237. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/service.py +0 -0
  238. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/store.py +0 -0
  239. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notifier/transport.py +0 -0
  240. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/notify.py +0 -0
  241. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/openapi.py +0 -0
  242. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/overlap_fence.py +0 -0
  243. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/overlap_predict.py +0 -0
  244. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/parentage.py +0 -0
  245. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/parentage_github.py +0 -0
  246. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/pipeline.py +0 -0
  247. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/plan_parser.py +0 -0
  248. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/plans.py +0 -0
  249. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/platform_paths.py +0 -0
  250. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/portal_bridge.py +0 -0
  251. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/portal_store.py +0 -0
  252. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/portal_sync.py +0 -0
  253. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/pr_body_lint.py +0 -0
  254. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/prereqs.py +0 -0
  255. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/progress.py +0 -0
  256. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/providers/__init__.py +0 -0
  257. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/providers/base.py +0 -0
  258. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/providers/claude.py +0 -0
  259. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/providers/claude_pty.py +0 -0
  260. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/providers/opencode.py +0 -0
  261. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/queue_diagnose.py +0 -0
  262. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/reconcile.py +0 -0
  263. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/reconcile_tick.py +0 -0
  264. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/refine_chat.py +0 -0
  265. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/release_cordon.py +0 -0
  266. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/release_propagate.py +0 -0
  267. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/release_verify.py +0 -0
  268. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/release_window.py +0 -0
  269. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/repo_dormancy.py +0 -0
  270. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/repo_edit.py +0 -0
  271. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/repo_onboard.py +0 -0
  272. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/reports.py +0 -0
  273. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/rest_schema.py +0 -0
  274. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/restart_cmd.py +0 -0
  275. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/revalidate.py +0 -0
  276. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/review.py +0 -0
  277. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/scorecard.py +0 -0
  278. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/self_health.py +0 -0
  279. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/serve_app.py +0 -0
  280. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  281. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  282. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  283. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  285. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/portal-followup/SKILL.md +0 -0
  286. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/release-now/SKILL.md +0 -0
  287. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  288. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  289. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/skills/update-issue/SKILL.md +0 -0
  290. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/smoke.py +0 -0
  291. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/spend_ceiling.py +0 -0
  292. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/split_work.py +0 -0
  293. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/sql.py +0 -0
  294. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/stage_projection.py +0 -0
  295. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/state.py +0 -0
  296. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/store_migrate.py +0 -0
  297. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/store_parity.py +0 -0
  298. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/templates/deploy-cloudflare.node.yml +0 -0
  299. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/test_author.py +0 -0
  300. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/test_chat.py +0 -0
  301. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/test_orchestrator.py +0 -0
  302. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/test_report.py +0 -0
  303. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/tui_release.py +0 -0
  304. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/uat_checks.py +0 -0
  305. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/usage.py +0 -0
  306. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/usage_limits.py +0 -0
  307. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/usage_rollup.py +0 -0
  308. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coord/worker_events.py +0 -0
  309. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/coordinator.example.yml +0 -0
  310. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-agent.service +0 -0
  311. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-backup.service +0 -0
  312. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-backup.timer +0 -0
  313. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-db-backup.service +0 -0
  314. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-db-backup.sh +0 -0
  315. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-db-backup.timer +0 -0
  316. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-dr-verify.service +0 -0
  317. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-dr-verify.timer +0 -0
  318. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-drive-queue.service +0 -0
  319. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-drive-queue.timer +0 -0
  320. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-failure-notify.service +0 -0
  321. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-failure-notify.sh +0 -0
  322. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-fleet-watchdog.service +0 -0
  323. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-fleet-watchdog.timer +0 -0
  324. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-notify.service +0 -0
  325. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-notify.timer +0 -0
  326. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-release-propagate.service +0 -0
  327. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-release-propagate.timer +0 -0
  328. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-release-window.service +0 -0
  329. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-release-window.timer +0 -0
  330. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-serve.service +0 -0
  331. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.service +0 -0
  332. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.sh +0 -0
  333. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.timer +0 -0
  334. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-web-rollback.sh +0 -0
  335. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/coord-web.service +0 -0
  336. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/deploy/node-shim.sh +0 -0
  337. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ADR_COORD_TUI_CI.md +0 -0
  338. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  339. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_CI.md +0 -0
  340. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_DIST.md +0 -0
  341. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  342. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/AGENT_OPERATIONS.md +0 -0
  343. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ARCHITECTURE.md +0 -0
  344. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ARCH_SECURITY_GATES.md +0 -0
  345. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/COCKPIT.md +0 -0
  346. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/CONTROL_CENTER.md +0 -0
  347. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/COST_DISCIPLINE.md +0 -0
  348. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/CROSS_PLATFORM.md +0 -0
  349. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/CUSTOMER_FACING_APPS.md +0 -0
  350. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/CUSTOMER_PORTAL.md +0 -0
  351. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/DATA_STORE_SELECTION.md +0 -0
  352. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/DISASTER_RECOVERY.md +0 -0
  353. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/DRIVE_QUEUE.md +0 -0
  354. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/EPHEMERAL_WORKERS.md +0 -0
  355. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/FORGE_MIGRATION.md +0 -0
  356. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/GRAPHIFY_SETUP.md +0 -0
  357. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ISSUE_GUIDANCE.md +0 -0
  358. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/MAC_MINI.md +0 -0
  359. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  360. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/NOTIFIER.md +0 -0
  361. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/OPENCODE_VERIFICATION.md +0 -0
  362. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/OPERATING_GOTCHAS.md +0 -0
  363. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/OPERATOR_GUIDES.md +0 -0
  364. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/ORACLE_LOOP.md +0 -0
  365. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/PHONE_WEBAPP.md +0 -0
  366. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/PIPELINE_V2.md +0 -0
  367. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/PLATFORM_EVOLUTION.md +0 -0
  368. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/SECOND_BACKEND.md +0 -0
  369. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/STORE_SERVICE.md +0 -0
  370. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  371. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/WEB_CONTROL_CENTER.md +0 -0
  372. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/WSL_WINDOWS_WORKER.md +0 -0
  373. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/mocks/web/README.md +0 -0
  374. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/mocks/web/_tokens.css +0 -0
  375. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/mocks/web/issue-detail.html +0 -0
  376. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/mocks/web/pipeline-narrow.html +0 -0
  377. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/docs/mocks/web/pipeline-wide.html +0 -0
  378. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/graphify-out/.gitignore +0 -0
  379. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/install-agent.sh +0 -0
  380. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/pyproject.toml +0 -0
  381. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/audit_review_verdict_overrides.py +0 -0
  382. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  383. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/build-worker-image.sh +0 -0
  384. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/coordinator-machine.py +0 -0
  385. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/dr-down.sh +0 -0
  386. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/dr-up.sh +0 -0
  387. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/epic-down.sh +0 -0
  388. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/epic-up.sh +0 -0
  389. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/preflight.sh +0 -0
  390. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/provision-server.sh +0 -0
  391. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/provision-worker.sh +0 -0
  392. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  393. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  394. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/throwaway-vm.sh +0 -0
  395. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/azure-workers/verify-github-token.sh +0 -0
  396. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/check_gh_argv_containment.py +0 -0
  397. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/codegen.py +0 -0
  398. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-test-runner.sh +0 -0
  399. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  400. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  401. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  402. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  403. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/coord-venv-rollback.sh +0 -0
  404. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/drive-batch.sh +0 -0
  405. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/extract-coord-tui.sh +0 -0
  406. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/fleet_watchdog.py +0 -0
  407. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/gen_board_fixture.py +0 -0
  408. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/gen_mock_index.py +0 -0
  409. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/lib/provision-core.sh +0 -0
  410. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/next_release_tag.py +0 -0
  411. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/provision-machine.sh +0 -0
  412. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/run_tests_in_populated_home.sh +0 -0
  413. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/run_tests_without_gh.sh +0 -0
  414. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/setup-macmini.sh +0 -0
  415. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/smoke_437_interactive.py +0 -0
  416. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/verify-provision-noble.sh +0 -0
  417. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/verify_878_review_capture.py +0 -0
  418. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/verify_release_published.py +0 -0
  419. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/scripts/verify_release_wheel.py +0 -0
  420. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/setup.cfg +0 -0
  421. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/SMOKE_SET.md +0 -0
  422. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/__init__.py +0 -0
  423. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-37/conftest.py +0 -0
  424. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-37/contract.md +0 -0
  425. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-37/manifest.yml +0 -0
  426. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  427. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  428. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/contract.md +0 -0
  429. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  430. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  431. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/manifest.yml +0 -0
  432. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-51/tsconfig.json +0 -0
  434. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  435. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/backends.py +0 -0
  436. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/conftest.py +0 -0
  437. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/board-pipeline-basic.json +0 -0
  438. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  439. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  440. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  441. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  442. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/all_pass.json +0 -0
  443. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  444. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/mixed_fail.json +0 -0
  445. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  446. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  447. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/skip.json +0 -0
  448. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/playwright/truncated.json +0 -0
  449. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  450. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  451. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  452. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  453. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  454. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  455. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  456. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  457. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  458. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_acceptance.py +0 -0
  459. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_acceptance_drivers.py +0 -0
  460. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent.py +0 -0
  461. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_api_error.py +0 -0
  462. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_app.py +0 -0
  463. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_branch_base.py +0 -0
  464. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_branch_capture.py +0 -0
  465. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_config_free_1712.py +0 -0
  466. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_deploy_units_endpoint.py +0 -0
  467. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_dirty_worktree.py +0 -0
  468. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  469. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_graph_self_heal.py +0 -0
  470. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_health_h3.py +0 -0
  471. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_idle_restart.py +0 -0
  472. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_push_failure.py +0 -0
  473. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_reap.py +0 -0
  474. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_repos_and_pull.py +0 -0
  475. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_restart_services_endpoint.py +0 -0
  476. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_skills_self_heal.py +0 -0
  477. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_startup_diagnostics.py +0 -0
  478. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_update.py +0 -0
  479. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_update_bluegreen.py +0 -0
  480. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_usage_limit.py +0 -0
  481. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_agent_zero_commit.py +0 -0
  482. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ambient_home_isolation.py +0 -0
  483. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approve_capability_reroute_3241.py +0 -0
  484. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approve_dependency_busy_2804.py +0 -0
  485. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approve_reject_plan.py +0 -0
  486. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approve_usage_gate.py +0 -0
  487. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approved_work_2532.py +0 -0
  488. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_approved_work_2996.py +0 -0
  489. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_assignment_already_recorded_daemon.py +0 -0
  490. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_audit_log.py +0 -0
  491. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_audit_outcome.py +0 -0
  492. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_audit_query.py +0 -0
  493. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_auto_loop.py +0 -0
  494. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_auto_release_publish_2035.py +0 -0
  495. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_backend_selection.py +0 -0
  496. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_backup.py +0 -0
  497. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_base_checkout_restore.py +0 -0
  498. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_block_log.py +0 -0
  499. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_cap_762.py +0 -0
  500. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_fixture.py +0 -0
  501. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_read_path.py +0 -0
  502. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_schema.py +0 -0
  503. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_service.py +0 -0
  504. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_state.py +0 -0
  505. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_board_wire.py +0 -0
  506. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_brain.py +0 -0
  507. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_branch_model.py +0 -0
  508. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_bug_intake.py +0 -0
  509. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_build_worker_image_env_update.py +0 -0
  510. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cargo_cache.py +0 -0
  511. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_check_gh_argv_containment.py +0 -0
  512. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_acceptance_gate_1950.py +0 -0
  513. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_fix.py +0 -0
  514. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_github.py +0 -0
  515. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_gitlab.py +0 -0
  516. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_parity_2091.py +0 -0
  517. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_ci_store.py +0 -0
  518. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_claim.py +0 -0
  519. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_claude_md_budget.py +0 -0
  520. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_claude_setup_token.py +0 -0
  521. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_acceptance.py +0 -0
  522. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_assign.py +0 -0
  523. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  524. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_assign_interactive_remote.py +0 -0
  525. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_assign_provider.py +0 -0
  526. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  527. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_audit.py +0 -0
  528. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_chat_continue.py +0 -0
  529. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_ci.py +0 -0
  530. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_codegen.py +0 -0
  531. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_decide.py +0 -0
  532. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_capability_rules.py +0 -0
  533. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_config_provenance.py +0 -0
  534. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_forge_availability.py +0 -0
  535. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_self.py +0 -0
  537. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_diagnose_test_coverage.py +0 -0
  538. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_doctor.py +0 -0
  539. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_doctor_config_free_1801.py +0 -0
  540. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  541. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  542. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_drive.py +0 -0
  543. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_drive_queue.py +0 -0
  544. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_escalate.py +0 -0
  545. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_fix_headless_review.py +0 -0
  546. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_issue_comment.py +0 -0
  549. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_issue_create_label.py +0 -0
  550. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_issue_reopen.py +0 -0
  551. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_issue_view_list.py +0 -0
  552. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_issues.py +0 -0
  553. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_assign.py +0 -0
  554. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_capture.py +0 -0
  555. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_chat_add_child.py +0 -0
  556. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_dispatch.py +0 -0
  557. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_gate_b.py +0 -0
  558. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_gate_c.py +0 -0
  559. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_order.py +0 -0
  560. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  561. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_milestone_ship.py +0 -0
  562. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_network.py +0 -0
  563. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_new_issue_chat.py +0 -0
  564. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_plans.py +0 -0
  565. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_portal.py +0 -0
  566. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_pr.py +0 -0
  567. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_pull_artifact.py +0 -0
  568. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_queue.py +0 -0
  569. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_reattach_sessions.py +0 -0
  570. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_refine_board.py +0 -0
  571. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_release_preflight.py +0 -0
  572. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_release_propagate.py +0 -0
  573. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_release_window.py +0 -0
  574. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_repo_2220.py +0 -0
  575. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  576. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_scorecard.py +0 -0
  577. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_serve_store_backend_3084.py +0 -0
  578. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_set_review_findings.py +0 -0
  579. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_advisory_terminal.py +0 -0
  580. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_contested_tag.py +0 -0
  581. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_invariant_alarms.py +0 -0
  582. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_machine_fault.py +0 -0
  583. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_merge_queue.py +0 -0
  584. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_provider.py +0 -0
  585. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_retried_3340.py +0 -0
  586. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_review_finalizing.py +0 -0
  587. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_supervisor_3366.py +0 -0
  588. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_test_failed_tag.py +0 -0
  589. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_status_usage_limit.py +0 -0
  590. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_sync_comments_873.py +0 -0
  591. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_test_plan.py +0 -0
  592. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_track.py +0 -0
  593. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_tui_update.py +0 -0
  594. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cli_wait.py +0 -0
  595. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_client.py +0 -0
  596. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_client_base_install.py +0 -0
  597. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_client_config_cache_atomic_3052.py +0 -0
  598. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_client_resource_migration_1946.py +0 -0
  599. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_commands_common.py +0 -0
  600. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_comments.py +0 -0
  601. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_completion_summary.py +0 -0
  602. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config.py +0 -0
  603. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_acceptance.py +0 -0
  604. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_audit.py +0 -0
  605. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_drift_check.py +0 -0
  606. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_effective.py +0 -0
  607. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_pricing.py +0 -0
  608. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  609. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_config_usage_gate.py +0 -0
  610. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_confirm_test.py +0 -0
  611. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_conflict_fix.py +0 -0
  612. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_conflict_fix_semantic.py +0 -0
  613. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  614. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test.py +0 -0
  615. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  616. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test_runner_baseline.py +0 -0
  617. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test_runner_populated_home.py +0 -0
  618. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test_runner_routing.py +0 -0
  619. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_test_runner_toolchain.py +0 -0
  620. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_uat.py +0 -0
  621. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coord_web_sse_restart_live.py +0 -0
  622. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_coordinator_machine.py +0 -0
  623. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_cross_platform_imports.py +0 -0
  624. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dao.py +0 -0
  625. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard.py +0 -0
  626. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard_api.py +0 -0
  627. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard_fixture.py +0 -0
  628. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard_server.py +0 -0
  629. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard_terminal.py +0 -0
  630. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dashboard_terminal_live.py +0 -0
  631. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_db.py +0 -0
  632. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dead_end.py +0 -0
  633. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_decomposition_chat.py +0 -0
  634. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_coord_db_backup.py +0 -0
  635. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_coord_web_dist.py +0 -0
  636. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_coord_web_rollback.py +0 -0
  637. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_db_backup_unit.py +0 -0
  638. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_drive_queue_unit.py +0 -0
  639. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_failure_notify_unit.py +0 -0
  640. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_manifest.py +0 -0
  641. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_notify_unit.py +0 -0
  642. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_units_lane.py +0 -0
  643. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deploy_web_unit.py +0 -0
  644. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deprecation_telemetry.py +0 -0
  645. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_deps.py +0 -0
  646. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_diagnose.py +0 -0
  647. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dispatch.py +0 -0
  648. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dispatch_liveness.py +0 -0
  649. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dispatch_target_validation.py +0 -0
  650. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dispatch_workers.py +0 -0
  651. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dist_name.py +0 -0
  652. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_done_housekeeping.py +0 -0
  653. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dr_azure_scripts.py +0 -0
  654. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dr_promote.py +0 -0
  655. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_dr_verify.py +0 -0
  656. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive.py +0 -0
  657. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_machine_fault.py +0 -0
  658. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue.py +0 -0
  659. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_blocked_rendering.py +0 -0
  660. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_launch_argv.py +0 -0
  661. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_max_parallel_config.py +0 -0
  662. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  663. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_roll_pending.py +0 -0
  664. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  665. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_sessions_snapshot.py +0 -0
  666. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_state.py +0 -0
  667. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_drive_tmux.py +0 -0
  668. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_epic_up_capability_detection.py +0 -0
  669. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  670. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_epic_up_image_provenance.py +0 -0
  671. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_errors.py +0 -0
  672. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_events.py +0 -0
  673. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_failure_class.py +0 -0
  674. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_failure_classifier.py +0 -0
  675. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_filelock.py +0 -0
  676. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  677. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fix_escalation_classifier.py +0 -0
  678. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fix_of_force_override.py +0 -0
  679. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fleet_config_health.py +0 -0
  680. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fleet_health_probes.py +0 -0
  681. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fleet_health_snapshot.py +0 -0
  682. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_fleet_watchdog.py +0 -0
  683. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_forge_availability.py +0 -0
  684. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_freshness.py +0 -0
  685. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gate_a.py +0 -0
  686. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gate_b.py +0 -0
  687. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gate_snapshot_staleness.py +0 -0
  688. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gates.py +0 -0
  689. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  690. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_gen_mock_index.py +0 -0
  691. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_generated_rust_fixture.py +0 -0
  692. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_generated_rust_requests.py +0 -0
  693. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_generated_types_fixture.py +0 -0
  694. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_github_ops.py +0 -0
  695. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_github_throttle.py +0 -0
  696. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_goal.py +0 -0
  697. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_graph_health.py +0 -0
  698. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_graph_selfheal_absent_2237.py +0 -0
  699. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_handoff.py +0 -0
  700. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_checks.py +0 -0
  701. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_cli.py +0 -0
  702. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_cli_graph.py +0 -0
  703. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_config.py +0 -0
  704. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_context.py +0 -0
  705. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_coord_tui_ci_pin.py +0 -0
  706. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_coord_web_ci_pin.py +0 -0
  707. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_deploy_lane_facts.py +0 -0
  708. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_fix.py +0 -0
  709. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_incident_regression.py +0 -0
  710. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_issues_sync_staleness.py +0 -0
  711. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_pr_churn.py +0 -0
  712. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_pypi.py +0 -0
  713. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_registry.py +0 -0
  714. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_release_cordon_probe.py +0 -0
  715. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_timer_active.py +0 -0
  716. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_toolchain.py +0 -0
  717. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_unit_drift.py +0 -0
  718. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_unit_enablement.py +0 -0
  719. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_health_wedged_drive_queue.py +0 -0
  720. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_hooks.py +0 -0
  721. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_housekeeping.py +0 -0
  722. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_human_attended_437.py +0 -0
  723. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_init.py +0 -0
  724. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_install_agent_venv_2911.py +0 -0
  725. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_integration.py +0 -0
  726. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive.py +0 -0
  727. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_briefing_echo.py +0 -0
  728. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_pane_log_2541.py +0 -0
  729. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_prefill_state.py +0 -0
  730. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_session_relaunch.py +0 -0
  731. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_test_verdict_backstop.py +0 -0
  732. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_token_attribution.py +0 -0
  733. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_interactive_worktree.py +0 -0
  734. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_invariant_alarms.py +0 -0
  735. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_issue_store_seam.py +0 -0
  736. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_issues_sync_status.py +0 -0
  737. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_liveness_auditor.py +0 -0
  738. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_liveness_notify.py +0 -0
  739. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_lock_contention_ratchet.py +0 -0
  740. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_machine_fault.py +0 -0
  741. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_machine_metrics.py +0 -0
  742. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_machine_onboard.py +0 -0
  743. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_machine_pause.py +0 -0
  744. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_machine_stats.py +0 -0
  745. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_merge_queue.py +0 -0
  746. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_merge_verify.py +0 -0
  747. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_milestone_chat.py +0 -0
  748. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_milestone_gate.py +0 -0
  749. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_milestone_order.py +0 -0
  750. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_milestone_seam.py +0 -0
  751. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_mock_author.py +0 -0
  752. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_model_tiering.py +0 -0
  753. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_models.py +0 -0
  754. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_models_config_labels.py +0 -0
  755. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_needs_attention.py +0 -0
  756. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_network.py +0 -0
  757. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_new_issue_chat.py +0 -0
  758. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_next_release_tag.py +0 -0
  759. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_node_shim.py +0 -0
  760. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_baseline.py +0 -0
  761. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_cli.py +0 -0
  762. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_collect.py +0 -0
  763. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_config.py +0 -0
  764. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_drive_seam.py +0 -0
  765. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_isolation.py +0 -0
  766. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_predicate.py +0 -0
  767. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notifier_service.py +0 -0
  769. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notify.py +0 -0
  770. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_notify_drain.py +0 -0
  771. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_openapi.py +0 -0
  772. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_operational_defaults.py +0 -0
  773. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_overlap_fence.py +0 -0
  774. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_overlap_predict.py +0 -0
  775. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_packaged_deploy_units.py +0 -0
  776. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_parentage.py +0 -0
  777. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_paste_landed.py +0 -0
  778. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  779. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_pipeline.py +0 -0
  780. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_plan_followup_approve_plan_command.py +0 -0
  781. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_plan_followup_pr_command.py +0 -0
  782. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_plan_followup_review_command.py +0 -0
  783. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_plan_only.py +0 -0
  784. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_plan_parser.py +0 -0
  785. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_platform_paths.py +0 -0
  786. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_portal_bridge.py +0 -0
  787. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_portal_config.py +0 -0
  788. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_portal_store.py +0 -0
  789. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_portal_sync.py +0 -0
  790. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_pr_body_lint.py +0 -0
  791. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_prereqs.py +0 -0
  792. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_production_db_guard.py +0 -0
  793. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_progress.py +0 -0
  794. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_provider_seam.py +0 -0
  795. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_providers.py +0 -0
  796. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_providers_config_labels.py +0 -0
  797. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_providers_pty.py +0 -0
  798. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_provision_core.py +0 -0
  799. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_provision_machine.py +0 -0
  800. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_py_rust_mirror_inventory.py +0 -0
  801. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_quiet_hours.py +0 -0
  802. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_quiet_hours_store_2146.py +0 -0
  803. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reap_merged_sessions.py +0 -0
  804. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reap_stale_interactive_tick.py +0 -0
  805. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile.py +0 -0
  806. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_branch.py +0 -0
  807. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_completions.py +0 -0
  808. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  809. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_merges.py +0 -0
  810. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_no_agent_record.py +0 -0
  811. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_tick.py +0 -0
  812. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reconcile_usage_limit_done.py +0 -0
  813. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_refine_chat.py +0 -0
  814. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_cordon_2101.py +0 -0
  815. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  816. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_cordon_deadlock_2240.py +0 -0
  817. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  818. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_cordon_stuck_2490.py +0 -0
  819. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_propagate.py +0 -0
  820. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_propagate_threshold.py +0 -0
  821. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_roll_between_legs_2854.py +0 -0
  822. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_roll_window_handoff.py +0 -0
  823. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_unified_1242.py +0 -0
  824. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_verify.py +0 -0
  825. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_release_window.py +0 -0
  826. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_remote_auto_prune.py +0 -0
  827. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_remote_interactive_reaper.py +0 -0
  828. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_add.py +0 -0
  829. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_dormancy.py +0 -0
  830. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_edit_2220.py +0 -0
  831. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_graph_fleet_2237.py +0 -0
  832. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_max_parallel_3423.py +0 -0
  833. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_repo_onboard_2220.py +0 -0
  834. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_report_result_push.py +0 -0
  835. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_reports.py +0 -0
  836. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_restart_cmd.py +0 -0
  837. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_retry.py +0 -0
  838. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_retry_advisory_1606.py +0 -0
  839. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_retry_escalation_classify_3360.py +0 -0
  840. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_retry_type_1636.py +0 -0
  841. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review.py +0 -0
  842. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_end_review_without_verdict.py +0 -0
  843. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_parse_failure_diagnostic.py +0 -0
  844. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_reaffirm.py +0 -0
  845. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_state.py +0 -0
  846. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_verdict_backstop.py +0 -0
  847. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_verdict_override_audit.py +0 -0
  848. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_verdict_relay.py +0 -0
  849. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_review_zero_commits.py +0 -0
  850. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_scoped_review_wiring.py +0 -0
  851. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_scorecard.py +0 -0
  852. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_self_health.py +0 -0
  853. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_serve.py +0 -0
  854. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_serve_app.py +0 -0
  855. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_serve_app_board_trim.py +0 -0
  856. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_serve_rest_routes.py +0 -0
  857. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_session.py +0 -0
  858. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_slice_issue_attribution.py +0 -0
  859. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_smoke.py +0 -0
  860. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  861. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_smoke_live_checkout_restore.py +0 -0
  862. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_smoke_workflow.py +0 -0
  863. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_spend_ceiling.py +0 -0
  864. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_spend_ceiling_coordinator.py +0 -0
  865. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_split.py +0 -0
  866. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_split_work.py +0 -0
  867. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_sql_dialect.py +0 -0
  868. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_sqlite_connect_ratchet.py +0 -0
  869. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stage_projection.py +0 -0
  870. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stale_busy_reviewer_697.py +0 -0
  871. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stalled_pipeline.py +0 -0
  872. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_state.py +0 -0
  873. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_state_review_findings_daemon.py +0 -0
  874. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_status_fleet_footer.py +0 -0
  875. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stop_1567.py +0 -0
  876. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_store_contract.py +0 -0
  877. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_store_migrate.py +0 -0
  878. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stuck.py +0 -0
  879. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  880. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_terminal_command.py +0 -0
  881. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_author.py +0 -0
  882. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_chat.py +0 -0
  883. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_orchestrator.py +0 -0
  884. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_report.py +0 -0
  885. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_verdict_parsing.py +0 -0
  886. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_test_verdict_transcript_floor.py +0 -0
  887. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_text_io_encoding_audit.py +0 -0
  888. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_thin_client_board_audit.py +0 -0
  889. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_thin_client_config_load_1080.py +0 -0
  890. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_thin_client_daemon_routing_906.py +0 -0
  891. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_throwaway_vm.py +0 -0
  892. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_tmux_host.py +0 -0
  893. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_tmux_session.py +0 -0
  894. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_transcript_floor.py +0 -0
  895. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_uat_checks.py +0 -0
  896. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_usage.py +0 -0
  897. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.535 → code_coordinator-0.5.537}/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.535
3
+ Version: 0.5.537
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.535
3
+ Version: 0.5.537
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.535",
2
+ "tag": "0.5.537",
3
3
  "distance": 0,
4
- "node": "gb4633aa4d9fe33c39961caa7723f8214fa8b67d0",
4
+ "node": "g0b0484bb17ec9c86ad41ee4d4d8123042044c389",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-30"
@@ -137,17 +137,46 @@ def _fetch_contract(repo_cfg, config, milestone_number: int) -> str | None:
137
137
  number doesn't say whether it's a directory-discovered driver's slice
138
138
  (shared repo-root tree) or an entrypoint-linked driver's relocated one,
139
139
  so this checks each candidate :func:`coord.acceptance.
140
- gate_a_contract_candidates` returns until one exists."""
140
+ gate_a_contract_candidates` returns until one exists.
141
+
142
+ Returns ``None`` only when every candidate genuinely 404'd — a
143
+ confirmed absence. Raises :class:`coord.github_ops.GhTransientError`
144
+ (unchanged) when a candidate's read failed because ``gh`` classified it
145
+ as a GitHub rate limit (:func:`coord.github_ops._classify_rate_limit`,
146
+ surfaced as :class:`coord.github_ops.GhRateLimitError`) rather than a
147
+ 404: #2973's bug was exactly this distinction getting lost — a
148
+ rate-limited read was folded into the same ``except RuntimeError:
149
+ continue`` as a real 404, so "I could not tell" silently became "it
150
+ does not exist". A transient failure on ANY candidate makes the whole
151
+ read inconclusive (a later candidate 404'ing doesn't confirm the
152
+ transiently-failed one is absent too), so it takes priority over a
153
+ clean ``None`` even if a later candidate genuinely 404s.
154
+
155
+ Narrower than it may sound: only a rate limit is currently classified
156
+ this way — a plain non-zero ``gh`` exit that isn't a rate limit (a bad
157
+ token, a genuine network failure, ``gh`` missing) still raises a plain
158
+ ``RuntimeError``/:class:`coord.github_ops.GhError` and is still folded
159
+ into ``continue`` below, same as before this fix. Tracked as a
160
+ follow-up rather than widened here, since ``_is_transient_error``-style
161
+ reclassification of those cases is a broader, separately-reviewable
162
+ change to ``coord.github_ops._gh`` itself.
163
+ """
141
164
  from coord import github_ops # noqa: PLC0415
142
165
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
143
166
 
167
+ transient: github_ops.GhTransientError | None = None
144
168
  for path in gate_a_contract_candidates(config, repo_cfg.name, milestone_number):
145
169
  try:
146
170
  return github_ops.get_repo_file(
147
171
  repo_cfg.github, path, branch=repo_cfg.default_branch,
148
172
  )
173
+ except github_ops.GhTransientError as e:
174
+ transient = transient or e
175
+ continue
149
176
  except RuntimeError:
150
177
  continue
178
+ if transient is not None:
179
+ raise transient
151
180
  return None
152
181
 
153
182
 
@@ -216,7 +245,27 @@ def gate_a(
216
245
  sys.exit(2)
217
246
  milestone_number = int(milestone_number)
218
247
 
219
- contract_text = _fetch_contract(repo_cfg, cfg, milestone_number)
248
+ try:
249
+ contract_text = _fetch_contract(repo_cfg, cfg, milestone_number)
250
+ except github_ops.GhTransientError as e:
251
+ # #2973: a failed READ is a different claim than a confirmed
252
+ # ABSENCE — only the latter justifies telling the caller to
253
+ # dispatch `coord acceptance mock` (which, against a milestone
254
+ # that already has an approved contract, produces a duplicate/
255
+ # conflicting one). Mirror the issue-fetch path just above, which
256
+ # already reports this correctly: name the real cause and ask for
257
+ # a retry, print no remedy.
258
+ click.echo(
259
+ f"error: could not read the Gate-A contract for ms-{milestone_number} "
260
+ f"({repo}#{tracking_issue}): {e}",
261
+ err=True,
262
+ )
263
+ click.echo(
264
+ " This is a failed read, not a confirmed absence — the contract "
265
+ "may well exist. Retry once the rate limit clears.",
266
+ err=True,
267
+ )
268
+ sys.exit(1)
220
269
  if contract_text is None:
221
270
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
222
271
 
@@ -137,7 +137,6 @@ def _apply_revalidation(items, board, config, gh_ops, *, dry_run: bool, skip_rev
137
137
 
138
138
  def _apply_ci_revalidation(
139
139
  items, board, config, ci_store, gh_ops, *, dry_run: bool,
140
- poll_sleep=None, poll_clock=None,
141
140
  ) -> set[str]:
142
141
  """#1851: the ``--revalidate`` arm for CI staleness — the CI analogue of
143
142
  :func:`_apply_revalidation`'s stale-local-verdict arm, resolving a
@@ -147,64 +146,35 @@ def _apply_ci_revalidation(
147
146
  outlive the base it actually validated even when the local Test verdict
148
147
  is perfectly fresh).
149
148
 
150
- Unlike :func:`_apply_revalidation` there is nothing to compose and no
151
- local suite to run — the remedy is :meth:`coord.ci_store.CiStore.
152
- rerun_for_pr`, a ``gh run rerun`` that costs CI minutes on GitHub's own
153
- runners, not a routed Test-stage agent. Strictly cheaper than what
154
- :func:`_apply_revalidation` does for the same reason CI should always be
155
- preferred when both would establish the same fact (#1851's "Cost
156
- framing").
149
+ #3276: every candidate :func:`coord.merge_queue.ci_revalidation_candidates`
150
+ returns is, by that function's own contract, blocked *solely* on CI
151
+ staleness — and the remedy that would have been here,
152
+ :meth:`coord.ci_store.CiStore.rerun_for_pr`, is a same-base ``gh run
153
+ rerun`` that a staleness reading (the base moved; the check didn't) can
154
+ never satisfy. #3266 already established exactly that and fixed the two
155
+ unattended call sites (``merge_queue.process()``'s own #2197 auto-rerun
156
+ and ``coord.commands.drive_queue._run_auto_revalidate_checks_stale``) to
157
+ stop spending a CI cycle on it — see ``MAX_CI_STALE_RERUNS``'s comment in
158
+ ``coord/merge_queue.py``. This CLI arm was left as a disclosed scope cut
159
+ (opt-in, human-invoked, no budget counter) with a docstring promising a
160
+ "tracked follow-up" that was never filed as an issue — #3276 is that
161
+ follow-up. So: no candidate here is ever handed to ``rerun_for_pr``
162
+ anymore. Each one gets the rebase remedy on stdout instead, both under
163
+ ``--dry-run`` and for real — the two cases are identical now because
164
+ nothing is actually triggered either way (#3276's acceptance: ``--dry-
165
+ run`` must say the same thing it would do).
157
166
 
158
167
  Opt-in behind ``--revalidate`` exactly like :func:`_apply_revalidation`
159
- — never called from auto-drain (see ``docs/DRIVE_QUEUE.md``). Under
160
- ``--dry-run`` this only *names* what it would trigger; no ``gh`` mutation
161
- runs.
162
-
163
- #1925: triggering a rerun and then handing the entry straight to
164
- ``merge_queue.process()`` used to fail-close on the rerun's OWN
165
- registration gap — ``gh pr checks`` errors for the few seconds before
166
- GitHub has created any check-run record, which reads as the #1525
167
- synthetic ``unknown`` conclusion and blocks exactly like a genuinely
168
- broken CI would. :func:`coord.ci_store.wait_for_ci_settle` closes that
169
- gap with a bounded poll right here, so the caller's subsequent
170
- ``process()`` call sees a real, resolved result — pass or fail — for the
171
- common case.
172
-
173
- Returns the ``assignment_id``s whose wait ran out the budget while STILL
174
- only seeing the registration-gap symptom (never a real check) —
175
- :func:`wait_for_ci_settle`'s ``registering=True`` case. The caller must
176
- exclude these from the ``process()`` call that follows: evaluating the
177
- gate against that exact symptom is the bug this fixes, so it must not
178
- reappear at the timeout edge just because the wait gave up. The entry
179
- stays ``PENDING`` with an explanatory ``entry.error`` instead — legible
180
- as "come back shortly", never as "checks failed" (#1925's acceptance:
181
- an ``unknown`` this command caused must not be presented identically to
182
- an ``unknown`` from genuinely broken CI).
183
-
184
- #3266 — KNOWN FOLLOW-UP, not fixed here: every candidate this selects
185
- (via :func:`coord.merge_queue.ci_revalidation_candidates`) is blocked
186
- *solely* on CI staleness, and the ``rerun_for_pr`` call below is a
187
- same-base ``gh run rerun`` that a staleness reading, by definition,
188
- can never satisfy — see ``MAX_CI_STALE_RERUNS``'s comment in
189
- ``coord/merge_queue.py``, which #3266 fixed identically at
190
- ``merge_queue.process()`` and at ``coord.commands.drive_queue.
191
- _run_auto_revalidate_checks_stale`` (the unattended periodic call
192
- site). This CLI arm is the one remaining caller still spending a real
193
- CI cycle on that guaranteed no-op. Left unfixed here on purpose for
194
- this round — it is opt-in and human-invoked, unlike the unattended
195
- drive-queue path, and the misleading ``ci_stale_reason`` remedy text
196
- that used to point an operator at ``--revalidate`` *for this specific
197
- condition* was already removed by #3266 — but an operator who runs
198
- ``--revalidate`` for an unrelated reason (a genuine infra-failure
199
- retry) on a PR that also happens to be ``checks_stale`` still silently
200
- burns a no-op CI cycle for that PR. Tracked as a follow-up: the fix
201
- would be to drop this entry from *candidates* (or from what gets
202
- rerun) whenever the ONLY reason it is here is staleness, so
203
- ``--revalidate`` never fires `rerun_for_pr` for a condition it cannot
204
- clear.
168
+ — never called from auto-drain (see ``docs/DRIVE_QUEUE.md``).
169
+
170
+ Returns an empty set always now — kept as a ``set[str]`` return (rather
171
+ than ``None``) so the two call sites' "entries this arm deferred, exclude
172
+ them from this pass's ``process()`` call" plumbing (#1925's ``registering``
173
+ case, from when this arm still triggered a rerun and had to wait out its
174
+ own registration gap) needs no change; there is simply never anything to
175
+ defer any more, since nothing is triggered.
205
176
  """
206
177
  from coord import merge_queue as _mq # noqa: PLC0415
207
- from coord.ci_store import wait_for_ci_settle # noqa: PLC0415
208
178
 
209
179
  deferred: set[str] = set()
210
180
  if ci_store is None or not ci_store.is_available:
@@ -218,61 +188,31 @@ def _apply_ci_revalidation(
218
188
  return deferred
219
189
  for entry in candidates:
220
190
  label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
221
- if dry_run:
222
- click.echo(
223
- f" --revalidate: would re-run CI for {label} "
224
- f"(PR #{entry.pr_number}) — checks predate the current base"
225
- )
226
- continue
227
- ok = ci_store.rerun_for_pr(entry.repo_github, entry.pr_number)
228
- if not ok:
229
- click.echo(
230
- f" --revalidate: could not trigger a CI re-run for {label} "
231
- f"(PR #{entry.pr_number}) — see gh output above",
232
- err=True,
233
- )
234
- continue
235
191
  click.echo(
236
- f" --revalidate: triggered a CI re-run for {label} "
237
- f"(PR #{entry.pr_number})"
238
- )
239
- result = wait_for_ci_settle(
240
- ci_store, entry.repo_github, entry.pr_number,
241
- echo=click.echo, sleep=poll_sleep, clock=poll_clock,
192
+ f" --revalidate: skipping {label} (PR #{entry.pr_number}) — "
193
+ "blocked solely on stale CI checks; a re-run replays the same "
194
+ "run against the same base it already ran against and can "
195
+ "never clear this (#3276). Rebase (or push a new commit) to "
196
+ "get a check against the current base."
242
197
  )
243
- if result.settled:
244
- click.echo(
245
- f" --revalidate: CI re-run for {label} settled after "
246
- f"{result.waited_seconds:.0f}s — the merge gate will "
247
- "evaluate the fresh result"
248
- )
249
- elif result.registering:
250
- entry.error = (
251
- f"{label}: the CI re-run --revalidate just triggered "
252
- f"(PR #{entry.pr_number}) has not registered on GitHub yet "
253
- f"after {result.waited_seconds:.0f}s — this is the re-run "
254
- "THIS command started, not a CI failure; re-run `coord "
255
- "merge --revalidate` (or plain `coord merge`) shortly (#1925)"
256
- )
257
- deferred.add(entry.assignment_id)
258
- click.echo(f" --revalidate: {entry.error}")
259
- else:
260
- click.echo(
261
- f" --revalidate: CI re-run for {label} is still running "
262
- f"after {result.waited_seconds:.0f}s — leaving it to the "
263
- "merge gate this pass (will report as CI still running)"
264
- )
265
198
  return deferred
266
199
 
267
200
 
268
201
  def _reload_board_after_wait(board, *, dry_run: bool):
269
- """#2143: force a fresh board read after ``_apply_ci_revalidation``'s
270
- ``wait_for_ci_settle`` poll — which, like ``_apply_revalidation``'s
271
- composite/solo suite runs, can hold the caller for minutes.
202
+ """#2143: force a fresh board read after ``--revalidate``'s CI-staleness
203
+ arm (:func:`_apply_ci_revalidation`) — which, like
204
+ :func:`_apply_revalidation`'s composite/solo suite runs, used to be able
205
+ to hold the caller for minutes via a post-rerun settle poll.
206
+
207
+ #3276: that poll is gone — :func:`_apply_ci_revalidation` no longer
208
+ triggers a rerun at all (see its own docstring), so it returns quickly.
209
+ This reload stays anyway: :func:`_apply_revalidation`'s local-suite arm,
210
+ called just before this in both callers, can still run for minutes, and
211
+ the same staleness argument below applies to it too.
272
212
 
273
213
  ``_apply_revalidation`` already refreshes the board it hands back, but
274
- only when *it* recorded a new verdict; it has no way to know a CI-settle
275
- wait ran afterwards. Real state can change on GitHub during that wait —
214
+ only when *it* recorded a new verdict; it has no way to know what ran
215
+ after it. Real state can change on GitHub while either arm is running —
276
216
  most dangerously a review approval landing, or a concurrent merge driver
277
217
  (the drive-queue timer, another operator) merging the exact branch this
278
218
  run is about to act on — and `merge_queue.process()` must not evaluate
@@ -283,9 +223,9 @@ def _reload_board_after_wait(board, *, dry_run: bool):
283
223
  Unconditional (not "only when something looks stale"): the risk here is
284
224
  a stale *read*, and there's no cheap way to tell "nothing changed" from
285
225
  "something changed but we didn't notice" without just re-reading. One
286
- extra ``load_board()`` is a rounding error next to the suite run(s) or
287
- the CI-settle poll that just happened. Under ``--dry-run`` nothing was
288
- triggered (no wait actually ran), so the board is left untouched.
226
+ extra ``load_board()`` is a rounding error next to the suite run(s) that
227
+ just happened. Under ``--dry-run`` nothing was triggered (no suite run
228
+ actually ran), so the board is left untouched.
289
229
  """
290
230
  if dry_run:
291
231
  return board
@@ -2392,15 +2332,16 @@ def merge(
2392
2332
  only_items, board_only, cfg_only, ci_store_only, gh_ops,
2393
2333
  dry_run=dry_run,
2394
2334
  )
2395
- # #2143: the CI-settle wait just above can run for minutes —
2396
- # re-read the board so the gates `process()` runs below see
2397
- # whatever landed on GitHub during it, not the pre-wait snapshot.
2335
+ # #2143: `_apply_revalidation`'s local-suite run just above can
2336
+ # run for minutes — re-read the board so the gates `process()`
2337
+ # runs below see whatever landed on GitHub during it, not a
2338
+ # pre-run snapshot. (#3276: `_apply_ci_revalidation` itself no
2339
+ # longer triggers a rerun, so this is no longer also covering a
2340
+ # CI-settle wait — see its own docstring.)
2398
2341
  board_only = _reload_board_after_wait(board_only, dry_run=dry_run)
2399
- # #1925: an entry deferred by the CI-settle wait above must not go
2400
- # through process() this pass — that would immediately re-derive the
2401
- # exact self-triggered "unknown" reading the wait was just trying to
2402
- # avoid handing to the gate. It stays PENDING with the explanatory
2403
- # `entry.error` _apply_ci_revalidation already set.
2342
+ # #1925/#3276: `deferred_ci` is always empty now that
2343
+ # `_apply_ci_revalidation` never triggers a rerun — kept so this
2344
+ # exclusion needs no change if that ever stops being true.
2404
2345
  if only_entry.assignment_id in deferred_ci:
2405
2346
  events_only = []
2406
2347
  else:
@@ -2841,15 +2782,17 @@ def merge(
2841
2782
  deferred_ci = _apply_ci_revalidation(
2842
2783
  pending, board, cfg, ci_store, gh_ops, dry_run=dry_run,
2843
2784
  )
2844
- # #2143: the CI-settle wait just above can run for minutes —
2845
- # re-read the board so the gates `process()` runs below see
2846
- # whatever landed on GitHub during it, not the pre-wait snapshot.
2785
+ # #2143: `_apply_revalidation`'s local-suite run just above can run
2786
+ # for minutes — re-read the board so the gates `process()` runs
2787
+ # below see whatever landed on GitHub during it, not a pre-run
2788
+ # snapshot. (#3276: `_apply_ci_revalidation` itself no longer
2789
+ # triggers a rerun, so this is no longer also covering a CI-settle
2790
+ # wait — see its own docstring.)
2847
2791
  board = _reload_board_after_wait(board, dry_run=dry_run)
2848
- # #1925: entries the CI-settle wait above gave up on while still only
2849
- # seeing the registration-gap symptom must not go through process() this
2850
- # pass — see `_apply_ci_revalidation`'s docstring. They keep their
2851
- # PENDING state and the explanatory `entry.error` it already set; `items`
2852
- # (unfiltered) still carries them through to the save step below.
2792
+ # #1925/#3276: `deferred_ci` is always empty now that
2793
+ # `_apply_ci_revalidation` never triggers a rerun — kept so this
2794
+ # exclusion needs no change if that ever stops being true. `items`
2795
+ # (unfiltered) still carries every entry through to the save step below.
2853
2796
  process_items = (
2854
2797
  [x for x in items if x.assignment_id not in deferred_ci]
2855
2798
  if deferred_ci else items
@@ -2539,9 +2539,12 @@ MAX_CI_INFRA_RERUNS = 2
2539
2539
  # all. Kept defined — rather than deleted — because `QueuedMerge.
2540
2540
  # ci_stale_reruns` still exists for rows written before this fix (see its
2541
2541
  # own comment) and because `coord.commands.merge._apply_ci_revalidation`
2542
- # (the opt-in ``--revalidate`` CLI arm) still references it; that caller is
2543
- # lower severity (opt-in, human-invoked) and is a tracked follow-up, not
2544
- # something this fix's file scope covers.
2542
+ # (the opt-in ``--revalidate`` CLI arm) still references it in its own
2543
+ # docstring. #3276 closed the gap #3266 left open there: that caller now
2544
+ # reports the rebase remedy for a staleness-only candidate instead of
2545
+ # calling `rerun_for_pr` for it either — the third and last of this
2546
+ # primitive's call sites, so nothing left in this module calls `rerun_for_pr`
2547
+ # for a condition it can never clear.
2545
2548
  MAX_CI_STALE_RERUNS = 2
2546
2549
 
2547
2550
  # #2252: at most one auto-rerun per failure streak before a genuinely-
@@ -3804,12 +3807,12 @@ def ci_revalidation_candidates(
3804
3807
  `rerun_for_pr` replays the same run against the same base it already
3805
3808
  used, so it can never see the new one. `process()`'s OWN #2197
3806
3809
  auto-rerun for this trigger was dropped for that reason (see
3807
- `MAX_CI_STALE_RERUNS`'s comment). The one remaining caller that still
3808
- calls `rerun_for_pr` on what this returns is `coord.commands.merge
3809
- ._apply_ci_revalidation` (the opt-in ``--revalidate`` CI arm) — equally
3810
- unable to clear the block, but lower severity since a human has to
3811
- explicitly ask for it. Left as-is here: fixing it is a change to that
3812
- module, out of this function's/file's scope, and a tracked follow-up.
3810
+ `MAX_CI_STALE_RERUNS`'s comment). `coord.commands.merge
3811
+ ._apply_ci_revalidation` (the opt-in ``--revalidate`` CI arm) was the one
3812
+ remaining caller that still called `rerun_for_pr` on what this returns —
3813
+ #3276 fixed it too: it now reports the rebase remedy for every entry this
3814
+ function returns (all of them are staleness-only, by this function's own
3815
+ contract above) instead of spending a guaranteed no-op CI cycle.
3813
3816
 
3814
3817
  #3396: `coord.commands.drive_queue._run_auto_revalidate_checks_stale`
3815
3818
  (the unattended periodic call site) still calls this function to find
@@ -4099,12 +4102,13 @@ class QueuedMerge:
4099
4102
  # this column.
4100
4103
  #
4101
4104
  # `coord.commands.merge._apply_ci_revalidation` (the opt-in
4102
- # ``--revalidate`` CLI arm) is the one remaining caller of
4103
- # `ci_revalidation_candidates` that still calls `rerun_for_pr` for this
4104
- # exact condition — it does not touch this counter (no budget, no cap;
4105
- # a human invoked it once, on purpose), but it is equally unable to
4106
- # clear a staleness block for the reason above, and is a tracked,
4107
- # lower-severity follow-up (see its own docstring).
4105
+ # ``--revalidate`` CLI arm) never touched this counter (no budget, no
4106
+ # cap; a human invoked it once, on purpose) but, until #3276, was the
4107
+ # one remaining caller of `ci_revalidation_candidates` that still called
4108
+ # `rerun_for_pr` for this exact unclearable condition. #3276 fixed it:
4109
+ # that arm now reports the rebase remedy for a staleness-only candidate
4110
+ # instead of re-running, so nothing in the codebase calls `rerun_for_pr`
4111
+ # for a block only a rebase can clear.
4108
4112
  ci_stale_reruns: int = 0
4109
4113
  # #2252: count of automatic `CiStore.rerun_failed_for_pr` calls
4110
4114
  # `process()` has issued for this entry's CURRENT streak of genuinely-
@@ -197,6 +197,11 @@ def is_milestone_complete(ctx: MilestoneContext) -> bool:
197
197
 
198
198
  # (repo_github, path, branch) -> True if the file exists at that ref.
199
199
  # Injected so tests never hit `gh` — mirrors ``coord.claim``'s BranchLookup.
200
+ #
201
+ # #2973: may also raise ``coord.github_ops.GhTransientError`` — a failed
202
+ # read (auth, network, a GitHub rate limit) is a different claim than a
203
+ # confirmed 404, and callers (``gate_a_status``) must not fold the two
204
+ # together the way the pre-#2973 default implementation did.
200
205
  GateAFileExists = Callable[[str, str, str], bool]
201
206
 
202
207
 
@@ -206,6 +211,11 @@ def _default_gate_a_file_exists(repo_github: str, path: str, branch: str) -> boo
206
211
  try:
207
212
  github_ops.get_repo_file(repo_github, path, branch=branch)
208
213
  return True
214
+ except github_ops.GhTransientError:
215
+ # #2973: a rate-limited (or otherwise transient) read is NOT a
216
+ # confirmed absence — let it propagate so `gate_a_status` can tell
217
+ # the two apart, instead of silently becoming `False` here.
218
+ raise
209
219
  except RuntimeError:
210
220
  return False
211
221
 
@@ -235,17 +245,42 @@ def gate_a_status(
235
245
  checking only the legacy repo-root path and reporting a false "Gate A
236
246
  not satisfied" for a milestone whose contract already exists, just
237
247
  somewhere else.
248
+
249
+ #2973: a candidate whose read *fails* (auth, network, a GitHub rate
250
+ limit — :class:`coord.github_ops.GhTransientError`) is a different claim
251
+ than a candidate that genuinely 404s, and only the latter justifies the
252
+ "run `coord acceptance mock`" remedy below — that remedy dispatches a
253
+ duplicate mock-author against a milestone that may already have an
254
+ approved contract. Mirrors :func:`coord.commands.gate_a._fetch_contract`:
255
+ a confirmed existence on ANY candidate wins outright (even after an
256
+ earlier candidate's transient failure), but a transient failure on any
257
+ checked candidate makes the whole read inconclusive when nothing else
258
+ confirms existence — reported distinctly, with no dispatch-a-mock-author
259
+ remedy attached.
238
260
  """
239
261
  if not config.acceptance.has_driver(repo_cfg.name):
240
262
  return None
241
263
 
264
+ from coord import github_ops # noqa: PLC0415
242
265
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
243
266
 
244
267
  candidates = gate_a_contract_candidates(config, repo_cfg.name, milestone_number)
245
268
  check = file_exists or _default_gate_a_file_exists
269
+ transient: github_ops.GhTransientError | None = None
246
270
  for path in candidates:
247
- if check(repo_cfg.github, path, repo_cfg.default_branch):
248
- return None
271
+ try:
272
+ if check(repo_cfg.github, path, repo_cfg.default_branch):
273
+ return None
274
+ except github_ops.GhTransientError as e:
275
+ transient = transient or e
276
+ continue
277
+ if transient is not None:
278
+ return (
279
+ f"Gate A undetermined: could not read {repo_cfg.name}'s Gate-A "
280
+ f"contract on {repo_cfg.default_branch!r} ({transient}). This is "
281
+ "a failed read, not a confirmed absence — the contract may well "
282
+ "exist. Retry once the rate limit clears."
283
+ )
249
284
  named = " or ".join(repr(p) for p in candidates)
250
285
  return (
251
286
  f"Gate A not satisfied: {named} does not exist yet on "
@@ -257,6 +292,17 @@ def gate_a_status(
257
292
 
258
293
  # (repo_github, path, branch) -> file content, or None if it doesn't exist.
259
294
  # Injected so tests never hit `gh` — mirrors GateAFileExists above.
295
+ #
296
+ # #2973: may also raise ``coord.github_ops.GhTransientError`` — same reason
297
+ # as ``GateAFileExists`` above. ``gate_a_signoff_status`` and
298
+ # ``issue_oracle_ready`` both build a ``GateAFileExists`` closure on top of
299
+ # this fetch (memoised, so the existence probe and the content read share
300
+ # one call), so this must propagate the same distinction they'd otherwise
301
+ # lose. Callers that only want *content*, never existence — the manifest/
302
+ # exempt reads in ``_fetch_manifest_data`` and the contract-hashing loop in
303
+ # ``gate_a_signoff`` — catch it locally and keep degrading to ``None``,
304
+ # their pre-#2973 behaviour: those reads are advisory/best-effort, not the
305
+ # gate whose misreporting #2973 is about.
260
306
  ManifestFetch = Callable[[str, str, str], "str | None"]
261
307
 
262
308
 
@@ -265,6 +311,8 @@ def _default_fetch_repo_file(repo_github: str, path: str, branch: str) -> str |
265
311
 
266
312
  try:
267
313
  return github_ops.get_repo_file(repo_github, path, branch=branch)
314
+ except github_ops.GhTransientError:
315
+ raise
268
316
  except RuntimeError:
269
317
  return None
270
318
 
@@ -313,6 +361,7 @@ def _fetch_manifest_data(
313
361
  legacy manifest and/or fragment file; a milestone's data lives under
314
362
  exactly one, so the first root that produces anything wins.
315
363
  """
364
+ from coord import github_ops # noqa: PLC0415
316
365
  from coord.acceptance import ( # noqa: PLC0415
317
366
  ACCEPTANCE_DIRNAME,
318
367
  MANIFEST_FRAGMENTS_DIRNAME,
@@ -326,7 +375,14 @@ def _fetch_manifest_data(
326
375
  def _fetch_one(dir_path: str, filename_stem: str) -> "tuple[ManifestData, bool]":
327
376
  for ext in (".yml", ".yaml", ".json"):
328
377
  path = f"{dir_path}/{filename_stem}{ext}"
329
- content = fetch(repo_github, path, branch)
378
+ try:
379
+ content = fetch(repo_github, path, branch)
380
+ except github_ops.GhTransientError:
381
+ # #2973: this is an advisory manifest/exempt read, not the
382
+ # contract-existence gate — a transient GitHub error here
383
+ # degrades to "no manifest data yet" exactly like a genuine
384
+ # 404 always has, rather than crashing dispatch.
385
+ content = None
330
386
  if content is None:
331
387
  continue
332
388
  try:
@@ -433,11 +489,23 @@ def gate_a_signoff(
433
489
  for the common single-candidate case).
434
490
  """
435
491
  from coord import gate_a as gate_a_mod # noqa: PLC0415
492
+ from coord import github_ops # noqa: PLC0415
436
493
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
437
494
 
438
495
  contract_text: str | None = None
439
496
  for path in gate_a_contract_candidates(config, repo_cfg.name, milestone_number):
440
- contract_text = fetch(repo_cfg.github, path, repo_cfg.default_branch)
497
+ try:
498
+ contract_text = fetch(repo_cfg.github, path, repo_cfg.default_branch)
499
+ except github_ops.GhTransientError:
500
+ # #2973: by the time this runs, `gate_a_status` has already
501
+ # confirmed SOME candidate exists (that's the precondition every
502
+ # caller of this checks first) — a transient failure re-reading
503
+ # a candidate here (this loop re-walks the same list, and a
504
+ # not-yet-memoised path can still hit a fresh rate limit) just
505
+ # means this particular candidate isn't the hashable one; keep
506
+ # walking rather than letting the read crash the signoff check.
507
+ contract_text = None
508
+ continue
441
509
  if contract_text is not None:
442
510
  break
443
511
  return gate_a_mod.evaluate(
@@ -209,6 +209,40 @@ class TestGateACommand:
209
209
  assert result.exit_code == 1
210
210
  assert "coord acceptance mock" in result.output
211
211
 
212
+ def test_a_rate_limited_read_is_not_reported_as_a_missing_contract(
213
+ self, config_file: Path, coord_db
214
+ ) -> None:
215
+ """#2973: a failed contents-API read (GitHub secondary rate limit)
216
+ must not be folded into the same "does not exist" outcome as a
217
+ genuine 404 — the file was on `main` the whole time; only the read
218
+ failed. Reporting it as absent recommends `coord acceptance mock`,
219
+ which against an already-approved milestone dispatches a duplicate
220
+ mock-author."""
221
+ from coord.github_ops import GhRateLimitError
222
+
223
+ def _repo_file(repo: str, path: str, branch: str | None = None) -> str:
224
+ raise GhRateLimitError(
225
+ "gh api repos/acme/api/contents/tests/acceptance/ms-37/"
226
+ "contract.md?ref=main failed: API rate limit exceeded for "
227
+ "user ID 12345",
228
+ secondary=True,
229
+ )
230
+
231
+ with patch(
232
+ "coord.github_ops.get_issue",
233
+ return_value={"title": "ms-37 epic", "milestone": {"number": 37}, "labels": []},
234
+ ), patch("coord.github_ops.get_repo_file", side_effect=_repo_file):
235
+ result = CliRunner().invoke(
236
+ main,
237
+ ["gate-a", "--approved", "api", "900", "--config", str(config_file)],
238
+ )
239
+
240
+ assert result.exit_code == 1
241
+ assert "does not exist" not in result.output
242
+ assert "coord acceptance mock" not in result.output
243
+ assert "rate limit" in result.output.lower()
244
+ assert "retry" in result.output.lower()
245
+
212
246
  def test_unknown_repo_exits_two(self, config_file: Path, coord_db) -> None:
213
247
  result = _run(config_file, ["--approved", "nope", "900"])
214
248
  assert result.exit_code == 2