code-coordinator 0.5.536__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.536 → code_coordinator-0.5.537}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/gate_a.py +51 -2
  5. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/milestone_dispatch.py +72 -4
  6. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_gate_a.py +34 -0
  7. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_milestone_dispatch.py +156 -0
  8. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/.gitignore +0 -0
  21. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/GOAL.md +0 -0
  23. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/LICENSE +0 -0
  24. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/README.md +0 -0
  26. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/approved_work.py +0 -0
  43. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/backup.py +0 -0
  46. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/ci_fix.py +0 -0
  55. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/claude_setup_token.py +0 -0
  60. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/client.py +0 -0
  62. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/codegen.py +0 -0
  63. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/backup.py +0 -0
  69. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/ci.py +0 -0
  71. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/codegen.py +0 -0
  72. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/dispatch.py +0 -0
  73. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/dispatch_workers.py +0 -0
  74. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/dr.py +0 -0
  75. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/machine.py +0 -0
  81. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/pr.py +0 -0
  87. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/config.py +0 -0
  101. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/db.py +0 -0
  111. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dead_end.py +0 -0
  112. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/decomposition_chat.py +0 -0
  113. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-backup.service +0 -0
  116. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-backup.timer +0 -0
  117. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-dr-verify.service +0 -0
  121. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-dr-verify.timer +0 -0
  122. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-drive-queue.service +0 -0
  123. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-drive-queue.timer +0 -0
  124. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-failure-notify.service +0 -0
  125. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-fleet-watchdog.service +0 -0
  126. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  127. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-notify.service +0 -0
  128. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-notify.timer +0 -0
  129. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-release-propagate.service +0 -0
  130. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-release-propagate.timer +0 -0
  131. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-release-window.service +0 -0
  132. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-release-window.timer +0 -0
  133. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-serve.service +0 -0
  134. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-web-dist-build.service +0 -0
  135. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-web-dist-build.timer +0 -0
  136. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy/coord-web.service +0 -0
  137. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy_manifest.py +0 -0
  138. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deploy_units.py +0 -0
  139. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deprecation_telemetry.py +0 -0
  140. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/deps.py +0 -0
  141. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/diagnose.py +0 -0
  142. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dispatch.py +0 -0
  143. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dispatch_liveness.py +0 -0
  144. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dist_name.py +0 -0
  145. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dr_promote.py +0 -0
  146. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/dr_verify.py +0 -0
  147. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/drive.py +0 -0
  148. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/drive_queue.py +0 -0
  149. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/drive_sessions_snapshot.py +0 -0
  150. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/drive_state.py +0 -0
  151. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/events.py +0 -0
  152. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/failure_class.py +0 -0
  153. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/failure_classifier.py +0 -0
  154. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/filelock.py +0 -0
  155. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/fleet_config_health.py +0 -0
  156. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/forge_availability.py +0 -0
  157. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/freshness.py +0 -0
  158. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/gate_a.py +0 -0
  159. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/gate_b.py +0 -0
  160. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/gate_snapshot.py +0 -0
  161. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/gates.py +0 -0
  162. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/gen_board_fixture.py +0 -0
  163. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/github_ops.py +0 -0
  164. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/github_throttle.py +0 -0
  165. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/goal.py +0 -0
  166. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/graph_health.py +0 -0
  167. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/__init__.py +0 -0
  168. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/aggregate.py +0 -0
  169. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/__init__.py +0 -0
  170. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/_ci_pin.py +0 -0
  171. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/agent_install.py +0 -0
  172. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/cargo_targets.py +0 -0
  173. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/claude_binary.py +0 -0
  174. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/config_drift.py +0 -0
  175. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  176. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/coord_web_ci_pin.py +0 -0
  177. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/deploy_lane_facts.py +0 -0
  178. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/disk.py +0 -0
  179. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/fleet_board.py +0 -0
  180. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  181. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/fleet_phantom.py +0 -0
  182. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/fleet_unit_drift.py +0 -0
  183. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/graph.py +0 -0
  184. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/graphify_cli.py +0 -0
  185. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/index_lock.py +0 -0
  186. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/issues_sync_staleness.py +0 -0
  187. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/local_machine_identity.py +0 -0
  188. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/plan_usage.py +0 -0
  189. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/pr_churn.py +0 -0
  190. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/release_cordon.py +0 -0
  191. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/repo_state.py +0 -0
  192. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/spawned_coord.py +0 -0
  193. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/stalled_pipeline.py +0 -0
  194. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/timer_active.py +0 -0
  195. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/toolchain.py +0 -0
  196. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/unit_drift.py +0 -0
  197. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/unit_enablement.py +0 -0
  198. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/wedged_drive_queue.py +0 -0
  199. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/checks/worktrees.py +0 -0
  200. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/cli.py +0 -0
  201. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/context.py +0 -0
  202. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/fleet_snapshot.py +0 -0
  203. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/models.py +0 -0
  204. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/pypi.py +0 -0
  205. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/registry.py +0 -0
  206. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/render.py +0 -0
  207. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/health/units.py +0 -0
  208. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/hooks.py +0 -0
  209. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/housekeeping.py +0 -0
  210. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/interactive.py +0 -0
  211. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/invariant_alarms.py +0 -0
  212. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/issue_store.py +0 -0
  213. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/issues_sync_status.py +0 -0
  214. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/liveness_auditor.py +0 -0
  215. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/machine_fault.py +0 -0
  216. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/machine_metrics.py +0 -0
  217. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/machine_onboard.py +0 -0
  218. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/machine_pause.py +0 -0
  219. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/machine_stats.py +0 -0
  220. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/merge_queue.py +0 -0
  221. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/milestone_chat.py +0 -0
  222. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/milestone_gate.py +0 -0
  223. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/milestone_order.py +0 -0
  224. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/mock_author.py +0 -0
  225. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/models.py +0 -0
  226. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/network.py +0 -0
  227. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/new_issue_chat.py +0 -0
  228. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/__init__.py +0 -0
  229. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/baseline.py +0 -0
  230. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/cli.py +0 -0
  231. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/collect.py +0 -0
  232. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/digest.py +0 -0
  233. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/models.py +0 -0
  234. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/predicate.py +0 -0
  235. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/service.py +0 -0
  236. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/store.py +0 -0
  237. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notifier/transport.py +0 -0
  238. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/notify.py +0 -0
  239. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/openapi.py +0 -0
  240. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/overlap_fence.py +0 -0
  241. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/overlap_predict.py +0 -0
  242. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/parentage.py +0 -0
  243. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/parentage_github.py +0 -0
  244. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/pipeline.py +0 -0
  245. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/plan_parser.py +0 -0
  246. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/plans.py +0 -0
  247. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/platform_paths.py +0 -0
  248. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/portal_bridge.py +0 -0
  249. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/portal_store.py +0 -0
  250. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/portal_sync.py +0 -0
  251. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/pr_body_lint.py +0 -0
  252. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/prereqs.py +0 -0
  253. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/progress.py +0 -0
  254. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/providers/__init__.py +0 -0
  255. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/providers/base.py +0 -0
  256. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/providers/claude.py +0 -0
  257. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/providers/claude_pty.py +0 -0
  258. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/providers/opencode.py +0 -0
  259. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/queue_diagnose.py +0 -0
  260. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/reconcile.py +0 -0
  261. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/reconcile_tick.py +0 -0
  262. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/refine_chat.py +0 -0
  263. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/release_cordon.py +0 -0
  264. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/release_propagate.py +0 -0
  265. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/release_verify.py +0 -0
  266. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/release_window.py +0 -0
  267. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/repo_dormancy.py +0 -0
  268. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/repo_edit.py +0 -0
  269. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/repo_onboard.py +0 -0
  270. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/reports.py +0 -0
  271. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/rest_schema.py +0 -0
  272. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/restart_cmd.py +0 -0
  273. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/revalidate.py +0 -0
  274. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/review.py +0 -0
  275. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/scorecard.py +0 -0
  276. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/self_health.py +0 -0
  277. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/serve_app.py +0 -0
  278. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  279. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  280. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  281. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/portal-followup/SKILL.md +0 -0
  284. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/release-now/SKILL.md +0 -0
  285. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  286. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  287. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/skills/update-issue/SKILL.md +0 -0
  288. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/smoke.py +0 -0
  289. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/spend_ceiling.py +0 -0
  290. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/split_work.py +0 -0
  291. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/sql.py +0 -0
  292. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/stage_projection.py +0 -0
  293. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/state.py +0 -0
  294. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/store_migrate.py +0 -0
  295. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/store_parity.py +0 -0
  296. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/templates/deploy-cloudflare.node.yml +0 -0
  297. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/test_author.py +0 -0
  298. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/test_chat.py +0 -0
  299. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/test_orchestrator.py +0 -0
  300. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/test_report.py +0 -0
  301. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/tui_release.py +0 -0
  302. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/uat_checks.py +0 -0
  303. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/usage.py +0 -0
  304. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/usage_limits.py +0 -0
  305. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/usage_rollup.py +0 -0
  306. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coord/worker_events.py +0 -0
  307. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/coordinator.example.yml +0 -0
  308. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-agent.service +0 -0
  309. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-backup.service +0 -0
  310. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-backup.timer +0 -0
  311. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-db-backup.service +0 -0
  312. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-db-backup.sh +0 -0
  313. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-db-backup.timer +0 -0
  314. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-dr-verify.service +0 -0
  315. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-dr-verify.timer +0 -0
  316. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-drive-queue.service +0 -0
  317. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-drive-queue.timer +0 -0
  318. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-failure-notify.service +0 -0
  319. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-failure-notify.sh +0 -0
  320. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-fleet-watchdog.service +0 -0
  321. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-fleet-watchdog.timer +0 -0
  322. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-notify.service +0 -0
  323. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-notify.timer +0 -0
  324. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-release-propagate.service +0 -0
  325. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-release-propagate.timer +0 -0
  326. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-release-window.service +0 -0
  327. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-release-window.timer +0 -0
  328. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-serve.service +0 -0
  329. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.service +0 -0
  330. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.sh +0 -0
  331. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-web-dist-build.timer +0 -0
  332. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-web-rollback.sh +0 -0
  333. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/coord-web.service +0 -0
  334. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/deploy/node-shim.sh +0 -0
  335. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ADR_COORD_TUI_CI.md +0 -0
  336. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  337. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_CI.md +0 -0
  338. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ADR_COORD_WEB_DIST.md +0 -0
  339. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  340. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/AGENT_OPERATIONS.md +0 -0
  341. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ARCHITECTURE.md +0 -0
  342. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ARCH_SECURITY_GATES.md +0 -0
  343. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/COCKPIT.md +0 -0
  344. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/CONTROL_CENTER.md +0 -0
  345. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/COST_DISCIPLINE.md +0 -0
  346. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/CROSS_PLATFORM.md +0 -0
  347. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/CUSTOMER_FACING_APPS.md +0 -0
  348. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/CUSTOMER_PORTAL.md +0 -0
  349. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/DATA_STORE_SELECTION.md +0 -0
  350. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/DISASTER_RECOVERY.md +0 -0
  351. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/DRIVE_QUEUE.md +0 -0
  352. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/EPHEMERAL_WORKERS.md +0 -0
  353. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/FORGE_MIGRATION.md +0 -0
  354. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/GRAPHIFY_SETUP.md +0 -0
  355. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ISSUE_GUIDANCE.md +0 -0
  356. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/MAC_MINI.md +0 -0
  357. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  358. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/NOTIFIER.md +0 -0
  359. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/OPENCODE_VERIFICATION.md +0 -0
  360. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/OPERATING_GOTCHAS.md +0 -0
  361. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/OPERATOR_GUIDES.md +0 -0
  362. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/ORACLE_LOOP.md +0 -0
  363. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/PHONE_WEBAPP.md +0 -0
  364. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/PIPELINE_V2.md +0 -0
  365. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/PLATFORM_EVOLUTION.md +0 -0
  366. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/SECOND_BACKEND.md +0 -0
  367. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/STORE_SERVICE.md +0 -0
  368. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  369. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/WEB_CONTROL_CENTER.md +0 -0
  370. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/WSL_WINDOWS_WORKER.md +0 -0
  371. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/mocks/web/README.md +0 -0
  372. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/mocks/web/_tokens.css +0 -0
  373. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/mocks/web/issue-detail.html +0 -0
  374. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/mocks/web/pipeline-narrow.html +0 -0
  375. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/docs/mocks/web/pipeline-wide.html +0 -0
  376. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/graphify-out/.gitignore +0 -0
  377. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/install-agent.sh +0 -0
  378. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/pyproject.toml +0 -0
  379. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/audit_review_verdict_overrides.py +0 -0
  380. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  381. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/build-worker-image.sh +0 -0
  382. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/coordinator-machine.py +0 -0
  383. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/dr-down.sh +0 -0
  384. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/dr-up.sh +0 -0
  385. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/epic-down.sh +0 -0
  386. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/epic-up.sh +0 -0
  387. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/preflight.sh +0 -0
  388. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/provision-server.sh +0 -0
  389. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/provision-worker.sh +0 -0
  390. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  391. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  392. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/throwaway-vm.sh +0 -0
  393. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/azure-workers/verify-github-token.sh +0 -0
  394. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/check_gh_argv_containment.py +0 -0
  395. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/codegen.py +0 -0
  396. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-test-runner.sh +0 -0
  397. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  398. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  399. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  400. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  401. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/coord-venv-rollback.sh +0 -0
  402. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/drive-batch.sh +0 -0
  403. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/extract-coord-tui.sh +0 -0
  404. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/fleet_watchdog.py +0 -0
  405. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/gen_board_fixture.py +0 -0
  406. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/gen_mock_index.py +0 -0
  407. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/lib/provision-core.sh +0 -0
  408. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/next_release_tag.py +0 -0
  409. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/provision-machine.sh +0 -0
  410. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/run_tests_in_populated_home.sh +0 -0
  411. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/run_tests_without_gh.sh +0 -0
  412. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/setup-macmini.sh +0 -0
  413. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/smoke_437_interactive.py +0 -0
  414. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/verify-provision-noble.sh +0 -0
  415. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/verify_878_review_capture.py +0 -0
  416. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/verify_release_published.py +0 -0
  417. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/scripts/verify_release_wheel.py +0 -0
  418. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/setup.cfg +0 -0
  419. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/SMOKE_SET.md +0 -0
  420. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/__init__.py +0 -0
  421. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-37/conftest.py +0 -0
  422. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-37/contract.md +0 -0
  423. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-37/manifest.yml +0 -0
  424. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  425. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  426. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/contract.md +0 -0
  427. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  428. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  429. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/manifest.yml +0 -0
  430. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  431. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-51/tsconfig.json +0 -0
  432. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/backends.py +0 -0
  434. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/conftest.py +0 -0
  435. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/board-pipeline-basic.json +0 -0
  436. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  437. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  438. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  439. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  440. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/all_pass.json +0 -0
  441. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  442. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/mixed_fail.json +0 -0
  443. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  444. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  445. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/skip.json +0 -0
  446. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/playwright/truncated.json +0 -0
  447. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  448. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  449. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  450. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  451. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  452. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  453. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  454. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  455. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  456. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_acceptance.py +0 -0
  457. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_acceptance_drivers.py +0 -0
  458. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent.py +0 -0
  459. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_api_error.py +0 -0
  460. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_app.py +0 -0
  461. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_branch_base.py +0 -0
  462. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_branch_capture.py +0 -0
  463. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_config_free_1712.py +0 -0
  464. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_deploy_units_endpoint.py +0 -0
  465. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_dirty_worktree.py +0 -0
  466. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  467. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_graph_self_heal.py +0 -0
  468. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_health_h3.py +0 -0
  469. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_idle_restart.py +0 -0
  470. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_push_failure.py +0 -0
  471. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_reap.py +0 -0
  472. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_repos_and_pull.py +0 -0
  473. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_restart_services_endpoint.py +0 -0
  474. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_skills_self_heal.py +0 -0
  475. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_startup_diagnostics.py +0 -0
  476. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_update.py +0 -0
  477. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_update_bluegreen.py +0 -0
  478. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_usage_limit.py +0 -0
  479. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_agent_zero_commit.py +0 -0
  480. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ambient_home_isolation.py +0 -0
  481. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approve_capability_reroute_3241.py +0 -0
  482. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approve_dependency_busy_2804.py +0 -0
  483. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approve_reject_plan.py +0 -0
  484. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approve_usage_gate.py +0 -0
  485. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approved_work_2532.py +0 -0
  486. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_approved_work_2996.py +0 -0
  487. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_assignment_already_recorded_daemon.py +0 -0
  488. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_audit_log.py +0 -0
  489. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_audit_outcome.py +0 -0
  490. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_audit_query.py +0 -0
  491. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_auto_loop.py +0 -0
  492. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_auto_release_publish_2035.py +0 -0
  493. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_backend_selection.py +0 -0
  494. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_backup.py +0 -0
  495. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_base_checkout_restore.py +0 -0
  496. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_block_log.py +0 -0
  497. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_cap_762.py +0 -0
  498. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_fixture.py +0 -0
  499. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_read_path.py +0 -0
  500. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_schema.py +0 -0
  501. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_service.py +0 -0
  502. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_state.py +0 -0
  503. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_board_wire.py +0 -0
  504. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_brain.py +0 -0
  505. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_branch_model.py +0 -0
  506. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_bug_intake.py +0 -0
  507. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_build_worker_image_env_update.py +0 -0
  508. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cargo_cache.py +0 -0
  509. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_check_gh_argv_containment.py +0 -0
  510. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_acceptance_gate_1950.py +0 -0
  511. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_fix.py +0 -0
  512. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_github.py +0 -0
  513. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_gitlab.py +0 -0
  514. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_parity_2091.py +0 -0
  515. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_ci_store.py +0 -0
  516. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_claim.py +0 -0
  517. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_claude_md_budget.py +0 -0
  518. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_claude_setup_token.py +0 -0
  519. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_acceptance.py +0 -0
  520. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_assign.py +0 -0
  521. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  522. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_assign_interactive_remote.py +0 -0
  523. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_assign_provider.py +0 -0
  524. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  525. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_audit.py +0 -0
  526. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_chat_continue.py +0 -0
  527. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_ci.py +0 -0
  528. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_codegen.py +0 -0
  529. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_decide.py +0 -0
  530. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_capability_rules.py +0 -0
  531. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_config_provenance.py +0 -0
  532. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_forge_availability.py +0 -0
  533. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_self.py +0 -0
  535. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_diagnose_test_coverage.py +0 -0
  536. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  540. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_drive.py +0 -0
  541. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_drive_queue.py +0 -0
  542. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_escalate.py +0 -0
  543. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_fix_headless_review.py +0 -0
  544. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_install_drift.py +0 -0
  545. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_install_skills.py +0 -0
  546. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_issue_comment.py +0 -0
  547. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_issue_create_label.py +0 -0
  548. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_issue_reopen.py +0 -0
  549. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_issue_view_list.py +0 -0
  550. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_issues.py +0 -0
  551. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_merge.py +0 -0
  552. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_assign.py +0 -0
  553. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_capture.py +0 -0
  554. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_chat_add_child.py +0 -0
  555. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_dispatch.py +0 -0
  556. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_gate_b.py +0 -0
  557. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_gate_c.py +0 -0
  558. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_order.py +0 -0
  559. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  560. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_milestone_ship.py +0 -0
  561. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_network.py +0 -0
  562. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_new_issue_chat.py +0 -0
  563. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_plans.py +0 -0
  564. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_portal.py +0 -0
  565. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_pr.py +0 -0
  566. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_pull_artifact.py +0 -0
  567. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_queue.py +0 -0
  568. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_reattach_sessions.py +0 -0
  569. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_refine_board.py +0 -0
  570. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_release_preflight.py +0 -0
  571. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_release_propagate.py +0 -0
  572. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_release_window.py +0 -0
  573. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_repo_2220.py +0 -0
  574. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  575. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_scorecard.py +0 -0
  576. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_serve_store_backend_3084.py +0 -0
  577. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_set_review_findings.py +0 -0
  578. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_advisory_terminal.py +0 -0
  579. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_contested_tag.py +0 -0
  580. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_invariant_alarms.py +0 -0
  581. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_machine_fault.py +0 -0
  582. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_merge_queue.py +0 -0
  583. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_provider.py +0 -0
  584. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_retried_3340.py +0 -0
  585. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_review_finalizing.py +0 -0
  586. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_supervisor_3366.py +0 -0
  587. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_test_failed_tag.py +0 -0
  588. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_status_usage_limit.py +0 -0
  589. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_sync_comments_873.py +0 -0
  590. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_test_plan.py +0 -0
  591. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_track.py +0 -0
  592. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_tui_update.py +0 -0
  593. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cli_wait.py +0 -0
  594. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_client.py +0 -0
  595. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_client_base_install.py +0 -0
  596. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_client_config_cache_atomic_3052.py +0 -0
  597. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_client_resource_migration_1946.py +0 -0
  598. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_commands_common.py +0 -0
  599. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_comments.py +0 -0
  600. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_completion_summary.py +0 -0
  601. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config.py +0 -0
  602. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_acceptance.py +0 -0
  603. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_audit.py +0 -0
  604. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_drift_check.py +0 -0
  605. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_effective.py +0 -0
  606. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_pricing.py +0 -0
  607. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  608. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_config_usage_gate.py +0 -0
  609. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_confirm_test.py +0 -0
  610. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_conflict_fix.py +0 -0
  611. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_conflict_fix_semantic.py +0 -0
  612. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  613. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test.py +0 -0
  614. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  615. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test_runner_baseline.py +0 -0
  616. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test_runner_populated_home.py +0 -0
  617. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test_runner_routing.py +0 -0
  618. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_test_runner_toolchain.py +0 -0
  619. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_uat.py +0 -0
  620. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coord_web_sse_restart_live.py +0 -0
  621. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_coordinator_machine.py +0 -0
  622. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_cross_platform_imports.py +0 -0
  623. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dao.py +0 -0
  624. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard.py +0 -0
  625. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard_api.py +0 -0
  626. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard_fixture.py +0 -0
  627. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard_server.py +0 -0
  628. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard_terminal.py +0 -0
  629. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dashboard_terminal_live.py +0 -0
  630. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_db.py +0 -0
  631. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dead_end.py +0 -0
  632. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_decomposition_chat.py +0 -0
  633. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_coord_db_backup.py +0 -0
  634. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_coord_web_dist.py +0 -0
  635. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_coord_web_rollback.py +0 -0
  636. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_db_backup_unit.py +0 -0
  637. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_drive_queue_unit.py +0 -0
  638. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_failure_notify_unit.py +0 -0
  639. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_manifest.py +0 -0
  640. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_notify_unit.py +0 -0
  641. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_units_lane.py +0 -0
  642. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deploy_web_unit.py +0 -0
  643. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deprecation_telemetry.py +0 -0
  644. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_deps.py +0 -0
  645. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_diagnose.py +0 -0
  646. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dispatch.py +0 -0
  647. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dispatch_liveness.py +0 -0
  648. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dispatch_target_validation.py +0 -0
  649. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dispatch_workers.py +0 -0
  650. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dist_name.py +0 -0
  651. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_done_housekeeping.py +0 -0
  652. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dr_azure_scripts.py +0 -0
  653. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dr_promote.py +0 -0
  654. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_dr_verify.py +0 -0
  655. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive.py +0 -0
  656. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_machine_fault.py +0 -0
  657. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue.py +0 -0
  658. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_blocked_rendering.py +0 -0
  659. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_launch_argv.py +0 -0
  660. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_max_parallel_config.py +0 -0
  661. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  662. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_roll_pending.py +0 -0
  663. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  664. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_sessions_snapshot.py +0 -0
  665. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_state.py +0 -0
  666. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_drive_tmux.py +0 -0
  667. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_epic_up_capability_detection.py +0 -0
  668. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  669. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_epic_up_image_provenance.py +0 -0
  670. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_errors.py +0 -0
  671. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_events.py +0 -0
  672. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_failure_class.py +0 -0
  673. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_failure_classifier.py +0 -0
  674. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_filelock.py +0 -0
  675. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  676. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fix_escalation_classifier.py +0 -0
  677. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fix_of_force_override.py +0 -0
  678. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fleet_config_health.py +0 -0
  679. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fleet_health_probes.py +0 -0
  680. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fleet_health_snapshot.py +0 -0
  681. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_fleet_watchdog.py +0 -0
  682. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_forge_availability.py +0 -0
  683. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_freshness.py +0 -0
  684. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gate_a.py +0 -0
  685. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gate_b.py +0 -0
  686. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gate_snapshot_staleness.py +0 -0
  687. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gates.py +0 -0
  688. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  689. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_gen_mock_index.py +0 -0
  690. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_generated_rust_fixture.py +0 -0
  691. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_generated_rust_requests.py +0 -0
  692. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_generated_types_fixture.py +0 -0
  693. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_github_ops.py +0 -0
  694. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_github_throttle.py +0 -0
  695. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_goal.py +0 -0
  696. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_graph_health.py +0 -0
  697. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_graph_selfheal_absent_2237.py +0 -0
  698. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_handoff.py +0 -0
  699. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_checks.py +0 -0
  700. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_cli.py +0 -0
  701. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_cli_graph.py +0 -0
  702. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_config.py +0 -0
  703. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_context.py +0 -0
  704. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_coord_tui_ci_pin.py +0 -0
  705. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_coord_web_ci_pin.py +0 -0
  706. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_deploy_lane_facts.py +0 -0
  707. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_fix.py +0 -0
  708. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_incident_regression.py +0 -0
  709. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_issues_sync_staleness.py +0 -0
  710. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_pr_churn.py +0 -0
  711. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_pypi.py +0 -0
  712. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_registry.py +0 -0
  713. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_release_cordon_probe.py +0 -0
  714. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_timer_active.py +0 -0
  715. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_toolchain.py +0 -0
  716. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_unit_drift.py +0 -0
  717. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_unit_enablement.py +0 -0
  718. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_health_wedged_drive_queue.py +0 -0
  719. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_hooks.py +0 -0
  720. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_housekeeping.py +0 -0
  721. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_human_attended_437.py +0 -0
  722. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_init.py +0 -0
  723. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_install_agent_venv_2911.py +0 -0
  724. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_integration.py +0 -0
  725. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive.py +0 -0
  726. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_briefing_echo.py +0 -0
  727. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_pane_log_2541.py +0 -0
  728. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_prefill_state.py +0 -0
  729. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_session_relaunch.py +0 -0
  730. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_test_verdict_backstop.py +0 -0
  731. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_token_attribution.py +0 -0
  732. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_interactive_worktree.py +0 -0
  733. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_invariant_alarms.py +0 -0
  734. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_issue_store_seam.py +0 -0
  735. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_issues_sync_status.py +0 -0
  736. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_liveness_auditor.py +0 -0
  737. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_liveness_notify.py +0 -0
  738. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_lock_contention_ratchet.py +0 -0
  739. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_machine_fault.py +0 -0
  740. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_machine_metrics.py +0 -0
  741. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_machine_onboard.py +0 -0
  742. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_machine_pause.py +0 -0
  743. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_machine_stats.py +0 -0
  744. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_merge_queue.py +0 -0
  745. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_merge_verify.py +0 -0
  746. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_milestone_chat.py +0 -0
  747. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_milestone_gate.py +0 -0
  748. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_milestone_order.py +0 -0
  749. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_milestone_seam.py +0 -0
  750. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_mock_author.py +0 -0
  751. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_model_tiering.py +0 -0
  752. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_models.py +0 -0
  753. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_models_config_labels.py +0 -0
  754. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_needs_attention.py +0 -0
  755. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_network.py +0 -0
  756. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_new_issue_chat.py +0 -0
  757. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_next_release_tag.py +0 -0
  758. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_node_shim.py +0 -0
  759. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_baseline.py +0 -0
  760. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_cli.py +0 -0
  761. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_collect.py +0 -0
  762. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_config.py +0 -0
  763. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_drive_seam.py +0 -0
  764. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_isolation.py +0 -0
  765. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_predicate.py +0 -0
  766. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_quiet_hours.py +0 -0
  767. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notifier_service.py +0 -0
  768. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notify.py +0 -0
  769. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_notify_drain.py +0 -0
  770. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_openapi.py +0 -0
  771. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_operational_defaults.py +0 -0
  772. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_overlap_fence.py +0 -0
  773. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_overlap_predict.py +0 -0
  774. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_packaged_deploy_units.py +0 -0
  775. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_parentage.py +0 -0
  776. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_paste_landed.py +0 -0
  777. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  778. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_pipeline.py +0 -0
  779. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_plan_followup_approve_plan_command.py +0 -0
  780. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_plan_followup_pr_command.py +0 -0
  781. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_plan_followup_review_command.py +0 -0
  782. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_plan_only.py +0 -0
  783. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_plan_parser.py +0 -0
  784. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_platform_paths.py +0 -0
  785. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_portal_bridge.py +0 -0
  786. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_portal_config.py +0 -0
  787. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_portal_store.py +0 -0
  788. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_portal_sync.py +0 -0
  789. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_pr_body_lint.py +0 -0
  790. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_prereqs.py +0 -0
  791. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_production_db_guard.py +0 -0
  792. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_progress.py +0 -0
  793. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_provider_seam.py +0 -0
  794. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_providers.py +0 -0
  795. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_providers_config_labels.py +0 -0
  796. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_providers_pty.py +0 -0
  797. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_provision_core.py +0 -0
  798. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_provision_machine.py +0 -0
  799. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_py_rust_mirror_inventory.py +0 -0
  800. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_quiet_hours.py +0 -0
  801. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_quiet_hours_store_2146.py +0 -0
  802. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reap_merged_sessions.py +0 -0
  803. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reap_stale_interactive_tick.py +0 -0
  804. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile.py +0 -0
  805. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_branch.py +0 -0
  806. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_completions.py +0 -0
  807. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  808. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_merges.py +0 -0
  809. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_no_agent_record.py +0 -0
  810. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_tick.py +0 -0
  811. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reconcile_usage_limit_done.py +0 -0
  812. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_refine_chat.py +0 -0
  813. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_cordon_2101.py +0 -0
  814. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  815. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_cordon_deadlock_2240.py +0 -0
  816. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  817. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_cordon_stuck_2490.py +0 -0
  818. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_propagate.py +0 -0
  819. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_propagate_threshold.py +0 -0
  820. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_roll_between_legs_2854.py +0 -0
  821. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_roll_window_handoff.py +0 -0
  822. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_unified_1242.py +0 -0
  823. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_verify.py +0 -0
  824. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_release_window.py +0 -0
  825. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_remote_auto_prune.py +0 -0
  826. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_remote_interactive_reaper.py +0 -0
  827. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_add.py +0 -0
  828. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_dormancy.py +0 -0
  829. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_edit_2220.py +0 -0
  830. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_graph_fleet_2237.py +0 -0
  831. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_max_parallel_3423.py +0 -0
  832. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_repo_onboard_2220.py +0 -0
  833. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_report_result_push.py +0 -0
  834. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_reports.py +0 -0
  835. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_restart_cmd.py +0 -0
  836. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_retry.py +0 -0
  837. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_retry_advisory_1606.py +0 -0
  838. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_retry_escalation_classify_3360.py +0 -0
  839. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_retry_type_1636.py +0 -0
  840. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_revalidate.py +0 -0
  841. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review.py +0 -0
  842. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_end_review_without_verdict.py +0 -0
  843. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_parse_failure_diagnostic.py +0 -0
  844. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_reaffirm.py +0 -0
  845. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_state.py +0 -0
  846. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_verdict_backstop.py +0 -0
  847. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_verdict_override_audit.py +0 -0
  848. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_verdict_relay.py +0 -0
  849. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_review_zero_commits.py +0 -0
  850. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_scoped_review_wiring.py +0 -0
  851. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_scorecard.py +0 -0
  852. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_self_health.py +0 -0
  853. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_serve.py +0 -0
  854. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_serve_app.py +0 -0
  855. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_serve_app_board_trim.py +0 -0
  856. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_serve_rest_routes.py +0 -0
  857. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_session.py +0 -0
  858. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_slice_issue_attribution.py +0 -0
  859. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_smoke.py +0 -0
  860. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  861. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_smoke_live_checkout_restore.py +0 -0
  862. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_smoke_workflow.py +0 -0
  863. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_spend_ceiling.py +0 -0
  864. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_spend_ceiling_coordinator.py +0 -0
  865. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_split.py +0 -0
  866. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_split_work.py +0 -0
  867. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_sql_dialect.py +0 -0
  868. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_sqlite_connect_ratchet.py +0 -0
  869. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stage_projection.py +0 -0
  870. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stale_busy_reviewer_697.py +0 -0
  871. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stalled_pipeline.py +0 -0
  872. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_state.py +0 -0
  873. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_state_review_findings_daemon.py +0 -0
  874. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_status_fleet_footer.py +0 -0
  875. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stop_1567.py +0 -0
  876. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_store_contract.py +0 -0
  877. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_store_migrate.py +0 -0
  878. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stuck.py +0 -0
  879. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  880. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_terminal_command.py +0 -0
  881. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_author.py +0 -0
  882. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_chat.py +0 -0
  883. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_orchestrator.py +0 -0
  884. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_report.py +0 -0
  885. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_verdict_parsing.py +0 -0
  886. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_test_verdict_transcript_floor.py +0 -0
  887. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_text_io_encoding_audit.py +0 -0
  888. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_thin_client_board_audit.py +0 -0
  889. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_thin_client_config_load_1080.py +0 -0
  890. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_thin_client_daemon_routing_906.py +0 -0
  891. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_throwaway_vm.py +0 -0
  892. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_tmux_host.py +0 -0
  893. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_tmux_session.py +0 -0
  894. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_transcript_floor.py +0 -0
  895. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_uat_checks.py +0 -0
  896. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_usage.py +0 -0
  897. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.536 → code_coordinator-0.5.537}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.536 → 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.536
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.536
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.536",
2
+ "tag": "0.5.537",
3
3
  "distance": 0,
4
- "node": "g88b4c49256bda59316741a2cfccb7ac352b3e665",
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
 
@@ -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
@@ -450,6 +450,33 @@ class TestGateAStatus:
450
450
  reason = gate_a_status(repo, cfg, 9)
451
451
  assert reason is None
452
452
 
453
+ def test_rate_limited_read_is_not_reported_as_a_missing_contract(self) -> None:
454
+ """#2973: `coord milestone dispatch`/`coord milestone gate-b` echo
455
+ this reason verbatim to a human. A rate-limited read must not be
456
+ folded into "does not exist" — that outcome recommends `coord
457
+ acceptance mock`, which against a milestone that already has an
458
+ approved contract dispatches a duplicate mock-author."""
459
+ from coord.github_ops import GhRateLimitError
460
+
461
+ cfg = self._cfg(with_driver=True)
462
+ repo = cfg.repo("api")
463
+ with patch(
464
+ "coord.github_ops.get_repo_file",
465
+ side_effect=GhRateLimitError(
466
+ "gh api repos/acme/api/contents/tests/acceptance/ms-9/"
467
+ "contract.md?ref=main failed: API rate limit exceeded for "
468
+ "user ID 12345",
469
+ secondary=True,
470
+ ),
471
+ ):
472
+ reason = gate_a_status(repo, cfg, 9)
473
+ assert reason is not None
474
+ assert "does not exist" not in reason
475
+ assert "coord acceptance mock" not in reason
476
+ assert "rate limit" in reason.lower()
477
+ assert "retry" in reason.lower()
478
+
479
+
453
480
 
454
481
  class TestGateAStatusRelocatedSlices:
455
482
  """#2896: a repo with an entrypoint-linked route (the relocated
@@ -510,6 +537,53 @@ class TestGateAStatusRelocatedSlices:
510
537
  assert "tests/acceptance/ms-65/contract.md" in reason
511
538
  assert "tui/tests/acceptance/ms-65/contract.md" in reason
512
539
 
540
+ def test_a_later_candidate_confirming_existence_wins_over_an_earlier_rate_limit(
541
+ self,
542
+ ) -> None:
543
+ """#2973: mirrors `coord.commands.gate_a._fetch_contract`'s
544
+ precedence rule — a confirmed existence on ANY candidate wins
545
+ outright, even after an earlier candidate's transient failure. Only
546
+ when NOTHING confirms existence does the earlier transient failure
547
+ make the whole read inconclusive (see the next test)."""
548
+ from coord.github_ops import GhTransientError
549
+
550
+ cfg = self._cfg()
551
+ repo = cfg.repo("claude-coordinator")
552
+ calls: list[str] = []
553
+
554
+ def _check(repo_github: str, path: str, branch: str) -> bool:
555
+ calls.append(path)
556
+ if len(calls) == 1:
557
+ raise GhTransientError("secondary_rate_limit backoff active")
558
+ return True
559
+
560
+ assert gate_a_status(repo, cfg, 65, file_exists=_check) is None
561
+ assert len(calls) == 2
562
+
563
+ def test_an_unresolved_transient_failure_is_reported_distinctly_from_a_404(
564
+ self,
565
+ ) -> None:
566
+ """#2973: the first candidate's read fails transiently, the second
567
+ genuinely 404s — the transient failure must still win (it's
568
+ inconclusive, not a confirmed absence), and the block reason must
569
+ say so rather than recommending `coord acceptance mock`."""
570
+ from coord.github_ops import GhTransientError
571
+
572
+ cfg = self._cfg()
573
+ repo = cfg.repo("claude-coordinator")
574
+
575
+ def _check(repo_github: str, path: str, branch: str) -> bool:
576
+ if path == "tests/acceptance/ms-65/contract.md":
577
+ raise GhTransientError("secondary_rate_limit backoff active")
578
+ return False
579
+
580
+ reason = gate_a_status(repo, cfg, 65, file_exists=_check)
581
+ assert reason is not None
582
+ assert "does not exist" not in reason
583
+ assert "coord acceptance mock" not in reason
584
+ assert "rate limit" in reason.lower() or "secondary_rate_limit" in reason
585
+ assert "retry" in reason.lower()
586
+
513
587
 
514
588
  # ── issue_oracle_ready (#1138, docs/ORACLE_LOOP.md issue-level gate) ─────────
515
589
 
@@ -928,6 +1002,55 @@ class TestIssueOracleReady:
928
1002
  "acme/api", "tests/acceptance/ms-37/manifest.yml", branch="main",
929
1003
  )
930
1004
 
1005
+ def test_rate_limited_default_file_exists_fails_open_without_crashing(self) -> None:
1006
+ """#2973: `issue_oracle_ready`'s own docstring says a Gate-A-not-yet-
1007
+ satisfied outcome (confirmed 404 OR now, inconclusive) is a no-op —
1008
+ dispatch proceeds as if this gate doesn't apply, rather than firing
1009
+ a confusing refusal before the contract even exists. A rate-limited
1010
+ existence read must reach that same no-op WITHOUT raising through
1011
+ `issue_oracle_ready` — this is `coord.dispatch.
1012
+ enforce_oracle_readiness`'s hard gate on every Work dispatch, so an
1013
+ uncaught exception here would turn one rate-limited read into a
1014
+ fleet-wide dispatch outage, exactly the failure mode this module's
1015
+ fail-soft design exists to avoid."""
1016
+ from coord.github_ops import GhRateLimitError
1017
+
1018
+ cfg = _oracle_cfg()
1019
+ repo = cfg.repo("api")
1020
+ with patch(
1021
+ "coord.github_ops.get_repo_file",
1022
+ side_effect=GhRateLimitError("secondary_rate_limit backoff active"),
1023
+ ):
1024
+ readiness = issue_oracle_ready(repo, cfg, 37, 1118)
1025
+ assert readiness.applies is False
1026
+ assert readiness.reason is None
1027
+
1028
+ def test_manifest_read_transient_error_degrades_to_no_slice_without_crashing(
1029
+ self,
1030
+ ) -> None:
1031
+ """#2973: once Gate A's existence check has passed, a *separate*
1032
+ transient failure reading the (advisory) manifest/exempt data must
1033
+ still degrade to "no slice authored yet" — the pre-existing
1034
+ fail-soft behaviour for a genuine 404 — rather than propagating as
1035
+ an uncaught exception."""
1036
+ from coord.github_ops import GhTransientError
1037
+
1038
+ cfg = _oracle_cfg()
1039
+ repo = cfg.repo("api")
1040
+
1041
+ def _fetch(repo_github: str, path: str, branch: str) -> str | None:
1042
+ if path.endswith("contract.md"):
1043
+ return CONTRACT
1044
+ raise GhTransientError("secondary_rate_limit backoff active")
1045
+
1046
+ readiness = issue_oracle_ready(
1047
+ repo, cfg, 37, 1118,
1048
+ file_exists=lambda *a: True, fetch_manifest=_fetch,
1049
+ fetch_gate_a_approval=_approval(),
1050
+ )
1051
+ assert readiness.applies is True
1052
+ assert readiness.has_slice is False
1053
+
931
1054
 
932
1055
  class TestIssueOracleReadyRelocatedSlices:
933
1056
  """#2896: ms-65's contract/manifest live under
@@ -992,6 +1115,39 @@ class TestIssueOracleReadyRelocatedSlices:
992
1115
  assert readiness.has_slice is False
993
1116
  assert readiness.reason is not None
994
1117
 
1118
+ def test_transient_failure_on_one_candidate_does_not_crash_the_signoff_read(
1119
+ self,
1120
+ ) -> None:
1121
+ """#2973: the legacy repo-root candidate rate-limits, the relocated
1122
+ candidate is the real one and has content — `gate_a_status` already
1123
+ passes on the relocated candidate (see
1124
+ `TestGateAStatusRelocatedSlices`); `gate_a_signoff`'s own content
1125
+ read must likewise keep walking past the transient failure rather
1126
+ than raising through `issue_oracle_ready`."""
1127
+ from coord.github_ops import GhTransientError
1128
+
1129
+ cfg = self._cfg()
1130
+ repo = cfg.repo("claude-coordinator")
1131
+ mapping = {
1132
+ "tui/tests/acceptance/ms-65/contract.md": CONTRACT,
1133
+ "tui/tests/acceptance/ms-65/manifest.yml": "tests:\n ms65::a: 2282\n",
1134
+ }
1135
+
1136
+ def fetch(repo_github: str, path: str, branch: str) -> str | None:
1137
+ if path == "tests/acceptance/ms-65/contract.md":
1138
+ raise GhTransientError("secondary_rate_limit backoff active")
1139
+ return mapping.get(path)
1140
+
1141
+ readiness = issue_oracle_ready(
1142
+ repo, cfg, 65, 2282,
1143
+ fetch_manifest=fetch,
1144
+ fetch_gate_a_approval=_approval(repo_name="claude-coordinator", milestone=65),
1145
+ )
1146
+ assert readiness.applies is True
1147
+ assert readiness.has_slice is True
1148
+ assert readiness.reason is None
1149
+ assert readiness.gate_a_state == "approved"
1150
+
995
1151
 
996
1152
  # ── fetch_milestone_context ──────────────────────────────────────────────────
997
1153