code-coordinator 0.5.536__tar.gz → 0.5.538__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.538}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/gate_a.py +51 -2
  5. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/lifecycle.py +1 -1
  6. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/status.py +11 -2
  7. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/failure_class.py +11 -1
  8. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_dispatch.py +72 -4
  9. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/progress.py +12 -1
  10. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage.py +35 -4
  11. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_gate_a.py +34 -0
  12. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_provider.py +48 -0
  13. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_dispatch.py +156 -0
  14. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provider_seam.py +139 -0
  15. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage.py +38 -0
  16. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/board.md +0 -0
  17. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/complete-session.md +0 -0
  18. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/coordinator.md +0 -0
  19. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/_lib.sh +0 -0
  20. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-checkout +0 -0
  21. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-commit +0 -0
  22. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-merge +0 -0
  23. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/coord-ci-acceptance.yml +0 -0
  25. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/auto-release.yml +0 -0
  26. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/publish.yml +0 -0
  27. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.gitignore +0 -0
  29. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/GOAL.md +0 -0
  31. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/LICENSE +0 -0
  32. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/README.md +0 -0
  34. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/backup.py +0 -0
  54. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_schema.py +0 -0
  56. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_wire.py +0 -0
  58. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/brain.py +0 -0
  59. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/branch_model.py +0 -0
  60. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/bug_intake.py +0 -0
  61. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/cargo_cache.py +0 -0
  62. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_fix.py +0 -0
  63. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_github.py +0 -0
  64. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_gitlab.py +0 -0
  65. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_store.py +0 -0
  66. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/claim.py +0 -0
  67. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/claude_setup_token.py +0 -0
  68. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/cli.py +0 -0
  69. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/client.py +0 -0
  70. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/codegen.py +0 -0
  71. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/__init__.py +0 -0
  72. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/_common.py +0 -0
  73. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/acceptance.py +0 -0
  74. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/agent_ops.py +0 -0
  75. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/audit.py +0 -0
  76. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/backup.py +0 -0
  77. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/chat.py +0 -0
  78. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/ci.py +0 -0
  79. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/codegen.py +0 -0
  80. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dispatch.py +0 -0
  81. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dispatch_workers.py +0 -0
  82. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dr.py +0 -0
  83. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/drive.py +0 -0
  84. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/drive_queue.py +0 -0
  85. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/gates.py +0 -0
  86. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/issues.py +0 -0
  87. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/machine.py +0 -0
  88. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/merge.py +0 -0
  89. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/milestone.py +0 -0
  90. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/plan_followup.py +0 -0
  91. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/plans.py +0 -0
  92. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/portal.py +0 -0
  93. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/pr.py +0 -0
  94. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/release.py +0 -0
  95. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/repo.py +0 -0
  96. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/report.py +0 -0
  97. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/review.py +0 -0
  98. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/scorecard.py +0 -0
  99. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/sessions.py +0 -0
  100. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/setup.py +0 -0
  101. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/store_migrate.py +0 -0
  102. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/config.py +0 -0
  107. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/config_reload.py +0 -0
  108. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/confirm_test.py +0 -0
  109. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/db.py +0 -0
  117. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dead_end.py +0 -0
  118. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/decomposition_chat.py +0 -0
  119. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/README.md +0 -0
  120. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-agent.service +0 -0
  121. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-backup.service +0 -0
  122. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-backup.timer +0 -0
  123. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.service +0 -0
  124. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.sh +0 -0
  125. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.timer +0 -0
  126. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-dr-verify.service +0 -0
  127. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-dr-verify.timer +0 -0
  128. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-drive-queue.service +0 -0
  129. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-drive-queue.timer +0 -0
  130. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-failure-notify.service +0 -0
  131. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-fleet-watchdog.service +0 -0
  132. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  133. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-notify.service +0 -0
  134. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-notify.timer +0 -0
  135. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-propagate.service +0 -0
  136. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-propagate.timer +0 -0
  137. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-window.service +0 -0
  138. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-window.timer +0 -0
  139. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-serve.service +0 -0
  140. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web-dist-build.service +0 -0
  141. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web-dist-build.timer +0 -0
  142. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web.service +0 -0
  143. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy_manifest.py +0 -0
  144. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy_units.py +0 -0
  145. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deprecation_telemetry.py +0 -0
  146. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deps.py +0 -0
  147. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/diagnose.py +0 -0
  148. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dispatch.py +0 -0
  149. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dispatch_liveness.py +0 -0
  150. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dist_name.py +0 -0
  151. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dr_promote.py +0 -0
  152. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dr_verify.py +0 -0
  153. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive.py +0 -0
  154. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_queue.py +0 -0
  155. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_sessions_snapshot.py +0 -0
  156. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_state.py +0 -0
  157. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/events.py +0 -0
  158. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/failure_classifier.py +0 -0
  159. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/filelock.py +0 -0
  160. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/fleet_config_health.py +0 -0
  161. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/forge_availability.py +0 -0
  162. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/freshness.py +0 -0
  163. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_a.py +0 -0
  164. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_b.py +0 -0
  165. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_snapshot.py +0 -0
  166. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gates.py +0 -0
  167. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gen_board_fixture.py +0 -0
  168. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/github_ops.py +0 -0
  169. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/github_throttle.py +0 -0
  170. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/goal.py +0 -0
  171. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/graph_health.py +0 -0
  172. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/__init__.py +0 -0
  173. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/aggregate.py +0 -0
  174. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/__init__.py +0 -0
  175. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/_ci_pin.py +0 -0
  176. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/agent_install.py +0 -0
  177. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/cargo_targets.py +0 -0
  178. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/claude_binary.py +0 -0
  179. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/config_drift.py +0 -0
  180. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  181. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/coord_web_ci_pin.py +0 -0
  182. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/deploy_lane_facts.py +0 -0
  183. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/disk.py +0 -0
  184. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_board.py +0 -0
  185. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  186. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_phantom.py +0 -0
  187. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_unit_drift.py +0 -0
  188. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/graph.py +0 -0
  189. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/graphify_cli.py +0 -0
  190. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/index_lock.py +0 -0
  191. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/issues_sync_staleness.py +0 -0
  192. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/local_machine_identity.py +0 -0
  193. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/plan_usage.py +0 -0
  194. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/pr_churn.py +0 -0
  195. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/release_cordon.py +0 -0
  196. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/repo_state.py +0 -0
  197. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/spawned_coord.py +0 -0
  198. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/stalled_pipeline.py +0 -0
  199. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/timer_active.py +0 -0
  200. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/toolchain.py +0 -0
  201. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/unit_drift.py +0 -0
  202. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/unit_enablement.py +0 -0
  203. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/wedged_drive_queue.py +0 -0
  204. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/worktrees.py +0 -0
  205. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/cli.py +0 -0
  206. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/context.py +0 -0
  207. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/fleet_snapshot.py +0 -0
  208. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/models.py +0 -0
  209. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/pypi.py +0 -0
  210. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/registry.py +0 -0
  211. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/render.py +0 -0
  212. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/units.py +0 -0
  213. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/hooks.py +0 -0
  214. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/housekeeping.py +0 -0
  215. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/interactive.py +0 -0
  216. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/invariant_alarms.py +0 -0
  217. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/issue_store.py +0 -0
  218. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/issues_sync_status.py +0 -0
  219. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/liveness_auditor.py +0 -0
  220. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_fault.py +0 -0
  221. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_metrics.py +0 -0
  222. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_onboard.py +0 -0
  223. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_pause.py +0 -0
  224. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_stats.py +0 -0
  225. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/merge_queue.py +0 -0
  226. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_chat.py +0 -0
  227. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_gate.py +0 -0
  228. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_order.py +0 -0
  229. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/mock_author.py +0 -0
  230. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/models.py +0 -0
  231. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/network.py +0 -0
  232. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/new_issue_chat.py +0 -0
  233. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/__init__.py +0 -0
  234. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/baseline.py +0 -0
  235. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/cli.py +0 -0
  236. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/collect.py +0 -0
  237. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/digest.py +0 -0
  238. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/models.py +0 -0
  239. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/predicate.py +0 -0
  240. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/service.py +0 -0
  241. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/store.py +0 -0
  242. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/transport.py +0 -0
  243. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notify.py +0 -0
  244. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/openapi.py +0 -0
  245. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/overlap_fence.py +0 -0
  246. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/overlap_predict.py +0 -0
  247. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/parentage.py +0 -0
  248. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/parentage_github.py +0 -0
  249. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/pipeline.py +0 -0
  250. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/plan_parser.py +0 -0
  251. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/plans.py +0 -0
  252. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/platform_paths.py +0 -0
  253. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_bridge.py +0 -0
  254. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_store.py +0 -0
  255. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_sync.py +0 -0
  256. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/pr_body_lint.py +0 -0
  257. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/prereqs.py +0 -0
  258. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/__init__.py +0 -0
  259. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/base.py +0 -0
  260. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/claude.py +0 -0
  261. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/claude_pty.py +0 -0
  262. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/opencode.py +0 -0
  263. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/queue_diagnose.py +0 -0
  264. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reconcile.py +0 -0
  265. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reconcile_tick.py +0 -0
  266. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/refine_chat.py +0 -0
  267. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_cordon.py +0 -0
  268. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_propagate.py +0 -0
  269. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_verify.py +0 -0
  270. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_window.py +0 -0
  271. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_dormancy.py +0 -0
  272. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_edit.py +0 -0
  273. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_onboard.py +0 -0
  274. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reports.py +0 -0
  275. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/rest_schema.py +0 -0
  276. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/restart_cmd.py +0 -0
  277. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/revalidate.py +0 -0
  278. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/review.py +0 -0
  279. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/serve_app.py +0 -0
  282. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  283. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  284. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  285. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/portal-followup/SKILL.md +0 -0
  288. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/release-now/SKILL.md +0 -0
  289. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  290. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  291. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/update-issue/SKILL.md +0 -0
  292. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/smoke.py +0 -0
  293. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/spend_ceiling.py +0 -0
  294. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/split_work.py +0 -0
  295. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/sql.py +0 -0
  296. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/stage_projection.py +0 -0
  297. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/state.py +0 -0
  298. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/store_migrate.py +0 -0
  299. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/store_parity.py +0 -0
  300. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/templates/deploy-cloudflare.node.yml +0 -0
  301. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_author.py +0 -0
  302. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_chat.py +0 -0
  303. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_orchestrator.py +0 -0
  304. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_report.py +0 -0
  305. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/tui_release.py +0 -0
  306. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/uat_checks.py +0 -0
  307. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage_limits.py +0 -0
  308. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage_rollup.py +0 -0
  309. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/worker_events.py +0 -0
  310. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coordinator.example.yml +0 -0
  311. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-agent.service +0 -0
  312. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-backup.service +0 -0
  313. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-backup.timer +0 -0
  314. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.service +0 -0
  315. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.sh +0 -0
  316. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.timer +0 -0
  317. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-dr-verify.service +0 -0
  318. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-dr-verify.timer +0 -0
  319. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-drive-queue.service +0 -0
  320. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-drive-queue.timer +0 -0
  321. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-failure-notify.service +0 -0
  322. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-failure-notify.sh +0 -0
  323. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-fleet-watchdog.service +0 -0
  324. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-fleet-watchdog.timer +0 -0
  325. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-notify.service +0 -0
  326. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-notify.timer +0 -0
  327. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-propagate.service +0 -0
  328. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-propagate.timer +0 -0
  329. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-window.service +0 -0
  330. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-window.timer +0 -0
  331. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-serve.service +0 -0
  332. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.service +0 -0
  333. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.sh +0 -0
  334. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.timer +0 -0
  335. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-rollback.sh +0 -0
  336. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web.service +0 -0
  337. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/node-shim.sh +0 -0
  338. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_TUI_CI.md +0 -0
  339. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  340. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_CI.md +0 -0
  341. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_DIST.md +0 -0
  342. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  343. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/AGENT_OPERATIONS.md +0 -0
  344. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ARCHITECTURE.md +0 -0
  345. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ARCH_SECURITY_GATES.md +0 -0
  346. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/COCKPIT.md +0 -0
  347. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CONTROL_CENTER.md +0 -0
  348. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/COST_DISCIPLINE.md +0 -0
  349. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CROSS_PLATFORM.md +0 -0
  350. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CUSTOMER_FACING_APPS.md +0 -0
  351. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CUSTOMER_PORTAL.md +0 -0
  352. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DATA_STORE_SELECTION.md +0 -0
  353. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DISASTER_RECOVERY.md +0 -0
  354. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DRIVE_QUEUE.md +0 -0
  355. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/EPHEMERAL_WORKERS.md +0 -0
  356. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/FORGE_MIGRATION.md +0 -0
  357. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/GRAPHIFY_SETUP.md +0 -0
  358. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ISSUE_GUIDANCE.md +0 -0
  359. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/MAC_MINI.md +0 -0
  360. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  361. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/NOTIFIER.md +0 -0
  362. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPENCODE_VERIFICATION.md +0 -0
  363. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPERATING_GOTCHAS.md +0 -0
  364. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPERATOR_GUIDES.md +0 -0
  365. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ORACLE_LOOP.md +0 -0
  366. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PHONE_WEBAPP.md +0 -0
  367. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PIPELINE_V2.md +0 -0
  368. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PLATFORM_EVOLUTION.md +0 -0
  369. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/SECOND_BACKEND.md +0 -0
  370. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/STORE_SERVICE.md +0 -0
  371. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  372. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/WEB_CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/WSL_WINDOWS_WORKER.md +0 -0
  374. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/README.md +0 -0
  375. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/_tokens.css +0 -0
  376. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/issue-detail.html +0 -0
  377. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/pipeline-narrow.html +0 -0
  378. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/pipeline-wide.html +0 -0
  379. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/graphify-out/.gitignore +0 -0
  380. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/install-agent.sh +0 -0
  381. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/pyproject.toml +0 -0
  382. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/audit_review_verdict_overrides.py +0 -0
  383. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  384. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/build-worker-image.sh +0 -0
  385. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/coordinator-machine.py +0 -0
  386. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/dr-down.sh +0 -0
  387. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/dr-up.sh +0 -0
  388. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/epic-down.sh +0 -0
  389. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/epic-up.sh +0 -0
  390. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/preflight.sh +0 -0
  391. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/provision-server.sh +0 -0
  392. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/provision-worker.sh +0 -0
  393. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  394. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  395. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/throwaway-vm.sh +0 -0
  396. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/verify-github-token.sh +0 -0
  397. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/check_gh_argv_containment.py +0 -0
  398. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/codegen.py +0 -0
  399. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-test-runner.sh +0 -0
  400. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  401. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  402. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  403. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  404. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-venv-rollback.sh +0 -0
  405. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/drive-batch.sh +0 -0
  406. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/extract-coord-tui.sh +0 -0
  407. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/fleet_watchdog.py +0 -0
  408. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/gen_board_fixture.py +0 -0
  409. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/gen_mock_index.py +0 -0
  410. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/lib/provision-core.sh +0 -0
  411. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/next_release_tag.py +0 -0
  412. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/provision-machine.sh +0 -0
  413. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/run_tests_in_populated_home.sh +0 -0
  414. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/run_tests_without_gh.sh +0 -0
  415. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/setup-macmini.sh +0 -0
  416. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/smoke_437_interactive.py +0 -0
  417. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify-provision-noble.sh +0 -0
  418. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/setup.cfg +0 -0
  422. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/conftest.py +0 -0
  425. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/contract.md +0 -0
  426. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/manifest.yml +0 -0
  427. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  428. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  429. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/contract.md +0 -0
  430. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  431. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  432. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/manifest.yml +0 -0
  433. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/tsconfig.json +0 -0
  435. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  436. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/backends.py +0 -0
  437. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/conftest.py +0 -0
  438. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/board-pipeline-basic.json +0 -0
  439. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  440. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  441. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  442. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  443. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/all_pass.json +0 -0
  444. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  445. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/mixed_fail.json +0 -0
  446. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  447. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  448. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/skip.json +0 -0
  449. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/truncated.json +0 -0
  450. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  451. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  452. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  454. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  455. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  456. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  457. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  458. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_acceptance.py +0 -0
  460. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_acceptance_drivers.py +0 -0
  461. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent.py +0 -0
  462. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_api_error.py +0 -0
  463. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_app.py +0 -0
  464. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_branch_base.py +0 -0
  465. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_branch_capture.py +0 -0
  466. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_config_free_1712.py +0 -0
  467. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_deploy_units_endpoint.py +0 -0
  468. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_dirty_worktree.py +0 -0
  469. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  470. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_graph_self_heal.py +0 -0
  471. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_health_h3.py +0 -0
  472. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_idle_restart.py +0 -0
  473. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_push_failure.py +0 -0
  474. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_reap.py +0 -0
  475. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_repos_and_pull.py +0 -0
  476. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_restart_services_endpoint.py +0 -0
  477. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_skills_self_heal.py +0 -0
  478. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_startup_diagnostics.py +0 -0
  479. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_update.py +0 -0
  480. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_update_bluegreen.py +0 -0
  481. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_usage_limit.py +0 -0
  482. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_zero_commit.py +0 -0
  483. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ambient_home_isolation.py +0 -0
  484. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_capability_reroute_3241.py +0 -0
  485. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_dependency_busy_2804.py +0 -0
  486. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_reject_plan.py +0 -0
  487. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_usage_gate.py +0 -0
  488. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approved_work_2532.py +0 -0
  489. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approved_work_2996.py +0 -0
  490. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_assignment_already_recorded_daemon.py +0 -0
  491. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_log.py +0 -0
  492. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_outcome.py +0 -0
  493. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_query.py +0 -0
  494. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_auto_loop.py +0 -0
  495. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_auto_release_publish_2035.py +0 -0
  496. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_backend_selection.py +0 -0
  497. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_backup.py +0 -0
  498. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_base_checkout_restore.py +0 -0
  499. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_block_log.py +0 -0
  500. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_cap_762.py +0 -0
  501. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_fixture.py +0 -0
  502. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_read_path.py +0 -0
  503. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_schema.py +0 -0
  504. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_service.py +0 -0
  505. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_state.py +0 -0
  506. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_wire.py +0 -0
  507. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_brain.py +0 -0
  508. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_branch_model.py +0 -0
  509. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_bug_intake.py +0 -0
  510. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_build_worker_image_env_update.py +0 -0
  511. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cargo_cache.py +0 -0
  512. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_check_gh_argv_containment.py +0 -0
  513. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_acceptance_gate_1950.py +0 -0
  514. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_fix.py +0 -0
  515. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_github.py +0 -0
  516. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_gitlab.py +0 -0
  517. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_parity_2091.py +0 -0
  518. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_store.py +0 -0
  519. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claim.py +0 -0
  520. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claude_md_budget.py +0 -0
  521. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claude_setup_token.py +0 -0
  522. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_acceptance.py +0 -0
  523. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign.py +0 -0
  524. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  525. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_interactive_remote.py +0 -0
  526. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_provider.py +0 -0
  527. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  528. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_audit.py +0 -0
  529. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_chat_continue.py +0 -0
  530. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_ci.py +0 -0
  531. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_codegen.py +0 -0
  532. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_decide.py +0 -0
  533. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_capability_rules.py +0 -0
  534. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_config_provenance.py +0 -0
  535. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_forge_availability.py +0 -0
  536. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_graph.py +0 -0
  537. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_self.py +0 -0
  538. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_test_coverage.py +0 -0
  539. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor.py +0 -0
  540. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_config_free_1801.py +0 -0
  541. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  542. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  543. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_drive.py +0 -0
  544. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_drive_queue.py +0 -0
  545. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_escalate.py +0 -0
  546. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_fix_headless_review.py +0 -0
  547. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_install_drift.py +0 -0
  548. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_install_skills.py +0 -0
  549. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_comment.py +0 -0
  550. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_create_label.py +0 -0
  551. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_reopen.py +0 -0
  552. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_view_list.py +0 -0
  553. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issues.py +0 -0
  554. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_merge.py +0 -0
  555. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_assign.py +0 -0
  556. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_capture.py +0 -0
  557. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_chat_add_child.py +0 -0
  558. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_dispatch.py +0 -0
  559. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_gate_b.py +0 -0
  560. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_gate_c.py +0 -0
  561. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_order.py +0 -0
  562. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  563. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_ship.py +0 -0
  564. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_network.py +0 -0
  565. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_new_issue_chat.py +0 -0
  566. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_plans.py +0 -0
  567. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_portal.py +0 -0
  568. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_pr.py +0 -0
  569. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_pull_artifact.py +0 -0
  570. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_queue.py +0 -0
  571. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_reattach_sessions.py +0 -0
  572. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_refine_board.py +0 -0
  573. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_preflight.py +0 -0
  574. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_propagate.py +0 -0
  575. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_window.py +0 -0
  576. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_repo_2220.py +0 -0
  577. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  578. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_scorecard.py +0 -0
  579. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_serve_store_backend_3084.py +0 -0
  580. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_set_review_findings.py +0 -0
  581. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_advisory_terminal.py +0 -0
  582. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_contested_tag.py +0 -0
  583. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_invariant_alarms.py +0 -0
  584. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_machine_fault.py +0 -0
  585. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_merge_queue.py +0 -0
  586. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_retried_3340.py +0 -0
  587. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_supervisor_3366.py +0 -0
  589. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client.py +0 -0
  597. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_base_install.py +0 -0
  598. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_config_cache_atomic_3052.py +0 -0
  599. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_resource_migration_1946.py +0 -0
  600. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_commands_common.py +0 -0
  601. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_comments.py +0 -0
  602. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_completion_summary.py +0 -0
  603. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config.py +0 -0
  604. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_acceptance.py +0 -0
  605. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_audit.py +0 -0
  606. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_drift_check.py +0 -0
  607. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_effective.py +0 -0
  608. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_pricing.py +0 -0
  609. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  610. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_usage_gate.py +0 -0
  611. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_confirm_test.py +0 -0
  612. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_conflict_fix.py +0 -0
  613. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_conflict_fix_semantic.py +0 -0
  614. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  615. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  617. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_baseline.py +0 -0
  618. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_populated_home.py +0 -0
  619. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_routing.py +0 -0
  620. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_toolchain.py +0 -0
  621. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_uat.py +0 -0
  622. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_web_sse_restart_live.py +0 -0
  623. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coordinator_machine.py +0 -0
  624. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cross_platform_imports.py +0 -0
  625. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dao.py +0 -0
  626. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard.py +0 -0
  627. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_api.py +0 -0
  628. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_fixture.py +0 -0
  629. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_server.py +0 -0
  630. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_terminal.py +0 -0
  631. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_terminal_live.py +0 -0
  632. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_db.py +0 -0
  633. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dead_end.py +0 -0
  634. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_decomposition_chat.py +0 -0
  635. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_db_backup.py +0 -0
  636. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_web_dist.py +0 -0
  637. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_web_rollback.py +0 -0
  638. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_db_backup_unit.py +0 -0
  639. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_drive_queue_unit.py +0 -0
  640. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_failure_notify_unit.py +0 -0
  641. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_manifest.py +0 -0
  642. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_notify_unit.py +0 -0
  643. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_units_lane.py +0 -0
  644. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_web_unit.py +0 -0
  645. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deprecation_telemetry.py +0 -0
  646. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deps.py +0 -0
  647. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_diagnose.py +0 -0
  648. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch.py +0 -0
  649. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_liveness.py +0 -0
  650. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_target_validation.py +0 -0
  651. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_workers.py +0 -0
  652. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dist_name.py +0 -0
  653. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_done_housekeeping.py +0 -0
  654. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_azure_scripts.py +0 -0
  655. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_promote.py +0 -0
  656. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_verify.py +0 -0
  657. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive.py +0 -0
  658. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_machine_fault.py +0 -0
  659. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue.py +0 -0
  660. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_blocked_rendering.py +0 -0
  661. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_launch_argv.py +0 -0
  662. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_max_parallel_config.py +0 -0
  663. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  664. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_roll_pending.py +0 -0
  665. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  666. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_sessions_snapshot.py +0 -0
  667. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_state.py +0 -0
  668. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_tmux.py +0 -0
  669. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_capability_detection.py +0 -0
  670. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  671. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_image_provenance.py +0 -0
  672. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_errors.py +0 -0
  673. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_events.py +0 -0
  674. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_failure_class.py +0 -0
  675. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_failure_classifier.py +0 -0
  676. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_filelock.py +0 -0
  677. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  678. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fix_escalation_classifier.py +0 -0
  679. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fix_of_force_override.py +0 -0
  680. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_config_health.py +0 -0
  681. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_health_probes.py +0 -0
  682. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_health_snapshot.py +0 -0
  683. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_watchdog.py +0 -0
  684. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_forge_availability.py +0 -0
  685. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_freshness.py +0 -0
  686. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_a.py +0 -0
  687. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_b.py +0 -0
  688. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_snapshot_staleness.py +0 -0
  689. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gates.py +0 -0
  690. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  691. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gen_mock_index.py +0 -0
  692. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_rust_fixture.py +0 -0
  693. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_rust_requests.py +0 -0
  694. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_types_fixture.py +0 -0
  695. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_github_ops.py +0 -0
  696. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_github_throttle.py +0 -0
  697. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_goal.py +0 -0
  698. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_graph_health.py +0 -0
  699. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_graph_selfheal_absent_2237.py +0 -0
  700. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_handoff.py +0 -0
  701. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_checks.py +0 -0
  702. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_cli.py +0 -0
  703. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_cli_graph.py +0 -0
  704. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_config.py +0 -0
  705. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_context.py +0 -0
  706. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_coord_tui_ci_pin.py +0 -0
  707. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_coord_web_ci_pin.py +0 -0
  708. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_deploy_lane_facts.py +0 -0
  709. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_fix.py +0 -0
  710. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_incident_regression.py +0 -0
  711. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_issues_sync_staleness.py +0 -0
  712. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_pr_churn.py +0 -0
  713. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_pypi.py +0 -0
  714. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_registry.py +0 -0
  715. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_release_cordon_probe.py +0 -0
  716. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_timer_active.py +0 -0
  717. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_toolchain.py +0 -0
  718. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_unit_drift.py +0 -0
  719. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_unit_enablement.py +0 -0
  720. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_wedged_drive_queue.py +0 -0
  721. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_hooks.py +0 -0
  722. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_housekeeping.py +0 -0
  723. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_human_attended_437.py +0 -0
  724. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_init.py +0 -0
  725. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_install_agent_venv_2911.py +0 -0
  726. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_integration.py +0 -0
  727. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive.py +0 -0
  728. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_briefing_echo.py +0 -0
  729. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_pane_log_2541.py +0 -0
  730. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_prefill_state.py +0 -0
  731. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_session_relaunch.py +0 -0
  732. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_test_verdict_backstop.py +0 -0
  733. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_token_attribution.py +0 -0
  734. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_worktree.py +0 -0
  735. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_invariant_alarms.py +0 -0
  736. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_issue_store_seam.py +0 -0
  737. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_issues_sync_status.py +0 -0
  738. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_liveness_auditor.py +0 -0
  739. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_liveness_notify.py +0 -0
  740. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_lock_contention_ratchet.py +0 -0
  741. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_fault.py +0 -0
  742. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_metrics.py +0 -0
  743. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_onboard.py +0 -0
  744. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_pause.py +0 -0
  745. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_stats.py +0 -0
  746. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_merge_queue.py +0 -0
  747. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_merge_verify.py +0 -0
  748. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_chat.py +0 -0
  749. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_gate.py +0 -0
  750. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_order.py +0 -0
  751. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_seam.py +0 -0
  752. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_mock_author.py +0 -0
  753. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_model_tiering.py +0 -0
  754. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_models.py +0 -0
  755. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_models_config_labels.py +0 -0
  756. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_needs_attention.py +0 -0
  757. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_network.py +0 -0
  758. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_new_issue_chat.py +0 -0
  759. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_next_release_tag.py +0 -0
  760. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_node_shim.py +0 -0
  761. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_baseline.py +0 -0
  762. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_cli.py +0 -0
  763. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_collect.py +0 -0
  764. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_config.py +0 -0
  765. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_drive_seam.py +0 -0
  766. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_isolation.py +0 -0
  767. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_predicate.py +0 -0
  768. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_quiet_hours.py +0 -0
  769. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_service.py +0 -0
  770. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notify.py +0 -0
  771. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notify_drain.py +0 -0
  772. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_openapi.py +0 -0
  773. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_operational_defaults.py +0 -0
  774. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_overlap_fence.py +0 -0
  775. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_overlap_predict.py +0 -0
  776. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_packaged_deploy_units.py +0 -0
  777. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_parentage.py +0 -0
  778. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_paste_landed.py +0 -0
  779. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  780. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_pipeline.py +0 -0
  781. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_approve_plan_command.py +0 -0
  782. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_pr_command.py +0 -0
  783. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_review_command.py +0 -0
  784. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_only.py +0 -0
  785. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_parser.py +0 -0
  786. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_platform_paths.py +0 -0
  787. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_bridge.py +0 -0
  788. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_config.py +0 -0
  789. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_store.py +0 -0
  790. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_sync.py +0 -0
  791. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_pr_body_lint.py +0 -0
  792. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_prereqs.py +0 -0
  793. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_production_db_guard.py +0 -0
  794. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_progress.py +0 -0
  795. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers.py +0 -0
  796. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers_config_labels.py +0 -0
  797. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers_pty.py +0 -0
  798. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provision_core.py +0 -0
  799. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provision_machine.py +0 -0
  800. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_py_rust_mirror_inventory.py +0 -0
  801. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_quiet_hours.py +0 -0
  802. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_quiet_hours_store_2146.py +0 -0
  803. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reap_merged_sessions.py +0 -0
  804. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reap_stale_interactive_tick.py +0 -0
  805. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile.py +0 -0
  806. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_branch.py +0 -0
  807. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_completions.py +0 -0
  808. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  809. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_merges.py +0 -0
  810. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_no_agent_record.py +0 -0
  811. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_tick.py +0 -0
  812. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_usage_limit_done.py +0 -0
  813. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_refine_chat.py +0 -0
  814. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_2101.py +0 -0
  815. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  816. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_deadlock_2240.py +0 -0
  817. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  818. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_stuck_2490.py +0 -0
  819. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_propagate.py +0 -0
  820. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_propagate_threshold.py +0 -0
  821. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_roll_between_legs_2854.py +0 -0
  822. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_roll_window_handoff.py +0 -0
  823. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_unified_1242.py +0 -0
  824. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_verify.py +0 -0
  825. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_window.py +0 -0
  826. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_remote_auto_prune.py +0 -0
  827. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_remote_interactive_reaper.py +0 -0
  828. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_add.py +0 -0
  829. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_dormancy.py +0 -0
  830. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_edit_2220.py +0 -0
  831. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_graph_fleet_2237.py +0 -0
  832. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_max_parallel_3423.py +0 -0
  833. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_onboard_2220.py +0 -0
  834. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_report_result_push.py +0 -0
  835. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reports.py +0 -0
  836. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_restart_cmd.py +0 -0
  837. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry.py +0 -0
  838. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_advisory_1606.py +0 -0
  839. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_escalation_classify_3360.py +0 -0
  840. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_type_1636.py +0 -0
  841. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_revalidate.py +0 -0
  842. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review.py +0 -0
  843. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_end_review_without_verdict.py +0 -0
  844. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_parse_failure_diagnostic.py +0 -0
  845. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_reaffirm.py +0 -0
  846. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_state.py +0 -0
  847. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_backstop.py +0 -0
  848. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_override_audit.py +0 -0
  849. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_relay.py +0 -0
  850. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_zero_commits.py +0 -0
  851. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_scoped_review_wiring.py +0 -0
  852. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_scorecard.py +0 -0
  853. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_self_health.py +0 -0
  854. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve.py +0 -0
  855. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_app.py +0 -0
  856. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_app_board_trim.py +0 -0
  857. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_rest_routes.py +0 -0
  858. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_session.py +0 -0
  859. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_slice_issue_attribution.py +0 -0
  860. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke.py +0 -0
  861. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  862. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_live_checkout_restore.py +0 -0
  863. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_workflow.py +0 -0
  864. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_spend_ceiling.py +0 -0
  865. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_spend_ceiling_coordinator.py +0 -0
  866. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_split.py +0 -0
  867. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_split_work.py +0 -0
  868. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_sql_dialect.py +0 -0
  869. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_sqlite_connect_ratchet.py +0 -0
  870. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stage_projection.py +0 -0
  871. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stale_busy_reviewer_697.py +0 -0
  872. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stalled_pipeline.py +0 -0
  873. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_state.py +0 -0
  874. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_state_review_findings_daemon.py +0 -0
  875. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_status_fleet_footer.py +0 -0
  876. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stop_1567.py +0 -0
  877. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_store_contract.py +0 -0
  878. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_store_migrate.py +0 -0
  879. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stuck.py +0 -0
  880. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  881. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_terminal_command.py +0 -0
  882. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_author.py +0 -0
  883. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_chat.py +0 -0
  884. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_orchestrator.py +0 -0
  885. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_report.py +0 -0
  886. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_verdict_parsing.py +0 -0
  887. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_verdict_transcript_floor.py +0 -0
  888. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_text_io_encoding_audit.py +0 -0
  889. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_board_audit.py +0 -0
  890. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_config_load_1080.py +0 -0
  891. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_daemon_routing_906.py +0 -0
  892. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_throwaway_vm.py +0 -0
  893. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_tmux_host.py +0 -0
  894. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_tmux_session.py +0 -0
  895. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_transcript_floor.py +0 -0
  896. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_uat_checks.py +0 -0
  897. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.536 → code_coordinator-0.5.538}/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.538
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.538
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.538",
3
3
  "distance": 0,
4
- "node": "g88b4c49256bda59316741a2cfccb7ac352b3e665",
4
+ "node": "g497e677b9148b371539abe944ff11b260e6dc373",
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
 
@@ -428,7 +428,7 @@ def done(config_path: Path) -> None:
428
428
  pass
429
429
 
430
430
  all_assignments = list(board.active) + list(board.completed)
431
- session_usage = build_session_usage(all_assignments, started_at=started_at)
431
+ session_usage = build_session_usage(all_assignments, started_at=started_at, cfg=cfg)
432
432
  total_cost = session_usage.total_cost_usd
433
433
 
434
434
  click.echo("")
@@ -980,7 +980,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
980
980
  pass
981
981
 
982
982
  all_assignments = list(board.active) + list(board.completed)
983
- session_usage = build_session_usage(all_assignments, started_at=started_at)
983
+ session_usage = build_session_usage(all_assignments, started_at=started_at, cfg=cfg)
984
984
  burn_line = format_burn_rate_line(session_usage)
985
985
  if burn_line:
986
986
  click.echo("")
@@ -1103,7 +1103,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
1103
1103
  machine_by_aid = {
1104
1104
  a.assignment_id: a.machine_name for a in rows if a.assignment_id
1105
1105
  }
1106
- usage = build_session_usage(rows, remote_by_id=agent_completed or None)
1106
+ usage = build_session_usage(rows, remote_by_id=agent_completed or None, cfg=cfg)
1107
1107
  for au in usage.assignments:
1108
1108
  # #3376 review round 2: `cost_unknown` means no local log AND no
1109
1109
  # remote entry. That is the ghost-dispatch signal ONLY if this
@@ -2992,6 +2992,14 @@ def usage(
2992
2992
  pass
2993
2993
 
2994
2994
  # Optionally fetch remote cost data for assignments without local logs.
2995
+ # #2305: cfg is only loaded here (not unconditionally) — the bare
2996
+ # `coord usage` view has always worked with no coordinator.yml present
2997
+ # at all (see TestUsageCommandBareViewHonorsWindowFlags), and that must
2998
+ # stay true. When it IS loaded (here, or by --remote below), it's
2999
+ # threaded into build_session_usage() so a tier-named provider (e.g.
3000
+ # "oc-mid") resolves correctly instead of degrading to ClaudeProvider
3001
+ # log parsing.
3002
+ cfg: "Config | None" = None
2995
3003
  remote_by_id: dict[str, dict] = {}
2996
3004
  if remote and all_assignments:
2997
3005
  cfg = _load_config(config_path)
@@ -3027,6 +3035,7 @@ def usage(
3027
3035
  all_assignments,
3028
3036
  remote_by_id=remote_by_id if remote_by_id else None,
3029
3037
  started_at=started_at,
3038
+ cfg=cfg,
3030
3039
  )
3031
3040
  click.echo(format_usage_report(session, window_label=window_label))
3032
3041
 
@@ -79,6 +79,7 @@ from coord.worker_events import (
79
79
  )
80
80
 
81
81
  if TYPE_CHECKING:
82
+ from coord.config import Config
82
83
  from coord.providers.base import Provider
83
84
 
84
85
  # ── the two classes ─────────────────────────────────────────────────────────
@@ -461,6 +462,7 @@ def classify_log(
461
462
  tail_bytes: int = 65536,
462
463
  provider_name: str | None = None,
463
464
  provider: "Provider | None" = None,
465
+ cfg: "Config | None" = None,
464
466
  ) -> FailureClassification:
465
467
  """Classify a worker's terminal state from its log.
466
468
 
@@ -484,6 +486,14 @@ def classify_log(
484
486
  an escape hatch for tests to pass an already-constructed provider
485
487
  directly, bypassing name resolution.
486
488
 
489
+ *cfg* (#2305): the coordinator's :class:`~coord.config.Config`, passed
490
+ straight through to :func:`coord.providers.get_provider` so a
491
+ tier-named ``providers.definitions`` entry (e.g. ``oc-mid``) resolves to
492
+ its real backend instead of silently degrading to
493
+ :class:`~coord.providers.claude.ClaudeProvider` — *provider_name* alone
494
+ only ever matches the built-in type names. ``None`` (the default)
495
+ preserves pre-#2305 behaviour.
496
+
487
497
  #1710 NOTE — a documented, narrow behaviour difference from the
488
498
  pre-#1710 implementation: that version additionally scanned the raw
489
499
  ``result`` event's ``error`` and bare ``subtype`` fields (via
@@ -509,7 +519,7 @@ def classify_log(
509
519
 
510
520
  if provider is None:
511
521
  from coord.providers import get_provider # noqa: PLC0415
512
- provider = get_provider(provider_name)
522
+ provider = get_provider(provider_name, cfg=cfg)
513
523
  summary = provider.parse_log(log_path, tail_bytes=tail_bytes)
514
524
 
515
525
  classification = classify_failure(
@@ -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(
@@ -26,6 +26,7 @@ from pathlib import Path
26
26
  from typing import TYPE_CHECKING
27
27
 
28
28
  if TYPE_CHECKING:
29
+ from coord.config import Config
29
30
  from coord.providers.base import Provider
30
31
 
31
32
 
@@ -118,6 +119,7 @@ def parse_progress(
118
119
  *,
119
120
  provider_name: str | None = None,
120
121
  provider: "Provider | None" = None,
122
+ cfg: "Config | None" = None,
121
123
  ) -> WorkerProgress:
122
124
  """Parse progress from a worker log.
123
125
 
@@ -137,6 +139,15 @@ def parse_progress(
137
139
  precedence over *provider_name*. Mainly for tests that want to
138
140
  exercise a specific (e.g. fake, non-claude) provider without
139
141
  wiring up a full :class:`~coord.config.Config`.
142
+ cfg: The coordinator's :class:`~coord.config.Config`, when the caller
143
+ has one in scope. #2305: without this, ``provider_name`` only
144
+ ever resolves against the built-in provider *types*
145
+ (``claude``/``claude-pty``/``opencode``) — a **tier-named**
146
+ ``providers.definitions`` entry (e.g. ``oc-mid``) silently
147
+ degrades to :class:`~coord.providers.claude.ClaudeProvider`.
148
+ Passed straight through to :func:`coord.providers.get_provider`;
149
+ ``None`` (the default) preserves the pre-#2305 built-ins-only
150
+ resolution, so existing callers are unaffected.
140
151
  """
141
152
  from coord.worker_events import detect_anomalies, is_stream_json
142
153
 
@@ -147,7 +158,7 @@ def parse_progress(
147
158
  if is_stream_json(p):
148
159
  if provider is None:
149
160
  from coord.providers import get_provider # noqa: PLC0415
150
- provider = get_provider(provider_name)
161
+ provider = get_provider(provider_name, cfg=cfg)
151
162
  summary = provider.parse_log(p, tail_bytes=tail_bytes)
152
163
  progress = WorkerProgress()
153
164
  # Synthesise a single rolling "update" line so coord status keeps
@@ -27,6 +27,7 @@ from coord.models import Assignment
27
27
  from coord.state import COORD_DIR
28
28
 
29
29
  if TYPE_CHECKING:
30
+ from coord.config import Config
30
31
  from coord.providers.base import Provider
31
32
 
32
33
  _log = logging.getLogger(__name__)
@@ -155,6 +156,7 @@ def parse_usage_from_log(
155
156
  *,
156
157
  provider_name: str | None = None,
157
158
  provider: "Provider | None" = None,
159
+ cfg: "Config | None" = None,
158
160
  ) -> AssignmentUsage | None:
159
161
  """Parse an :class:`AssignmentUsage` from a worker log file.
160
162
 
@@ -172,6 +174,14 @@ def parse_usage_from_log(
172
174
  behaviour byte-for-byte for every caller that doesn't pass it. *provider*
173
175
  is an escape hatch to pass an already-constructed provider directly
174
176
  (tests; bypasses name resolution).
177
+
178
+ *cfg* (#2305): the coordinator's :class:`~coord.config.Config`, passed
179
+ straight through to :func:`coord.providers.get_provider` so a
180
+ **tier-named** ``providers.definitions`` entry (e.g. ``oc-mid``) resolves
181
+ to its real backend instead of silently degrading to
182
+ :class:`~coord.providers.claude.ClaudeProvider` — *provider_name* alone
183
+ only ever matches the built-in type names. ``None`` (the default)
184
+ preserves pre-#2305 behaviour.
175
185
  """
176
186
  from coord.worker_events import is_stream_json
177
187
 
@@ -179,7 +189,7 @@ def parse_usage_from_log(
179
189
  return None
180
190
  if provider is None:
181
191
  from coord.providers import get_provider # noqa: PLC0415
182
- provider = get_provider(provider_name)
192
+ provider = get_provider(provider_name, cfg=cfg)
183
193
  if not is_stream_json(log_path):
184
194
  # #1710: a provider that claims it reports cost but whose log isn't
185
195
  # stream-json shaped gets NO cost/token data here — that mismatch is
@@ -221,6 +231,7 @@ def _assignment_to_usage(
221
231
  *,
222
232
  logs_dir: Path | None = None,
223
233
  remote_data: dict | None = None,
234
+ cfg: "Config | None" = None,
224
235
  ) -> AssignmentUsage:
225
236
  """Build an :class:`AssignmentUsage` for *a*.
226
237
 
@@ -229,6 +240,12 @@ def _assignment_to_usage(
229
240
 
230
241
  *remote_data* is a dict from the agent's ``list_assignments()`` response
231
242
  (e.g. ``{"cost_so_far": 0.12, "model_used": "claude-sonnet-4-6", ...}``).
243
+
244
+ *cfg* (#2305): threaded through to both the local-log parse and the
245
+ "neither local nor remote" ``get_provider`` fallback below, so a
246
+ tier-named provider (e.g. ``oc-mid``) resolves to its real backend
247
+ rather than :class:`~coord.providers.claude.ClaudeProvider`. ``None``
248
+ (the default) preserves pre-#2305 behaviour.
232
249
  """
233
250
  _logs_dir = logs_dir if logs_dir is not None else LOGS_DIR
234
251
  from coord.models import effective_issue_number # noqa: PLC0415
@@ -252,7 +269,7 @@ def _assignment_to_usage(
252
269
  # #1710: thread the assignment's resolved provider name through so
253
270
  # the parse uses the right provider's parse_log() rather than always
254
271
  # assuming claude.
255
- parsed = parse_usage_from_log(log_path, provider_name=a.provider_name)
272
+ parsed = parse_usage_from_log(log_path, provider_name=a.provider_name, cfg=cfg)
256
273
  if parsed is not None:
257
274
  usage.model = parsed.model or a.model
258
275
  usage.total_cost_usd = parsed.total_cost_usd
@@ -283,7 +300,7 @@ def _assignment_to_usage(
283
300
  if a.assignment_id:
284
301
  from coord.providers import get_provider # noqa: PLC0415
285
302
 
286
- provider = get_provider(a.provider_name)
303
+ provider = get_provider(a.provider_name, cfg=cfg)
287
304
  if provider.capabilities().cost_reporting:
288
305
  usage.cost_unknown = True
289
306
 
@@ -298,6 +315,7 @@ def collect_usage(
298
315
  *,
299
316
  logs_dir: Path | None = None,
300
317
  remote_by_id: dict[str, dict] | None = None,
318
+ cfg: "Config | None" = None,
301
319
  ) -> list[AssignmentUsage]:
302
320
  """Collect :class:`AssignmentUsage` for every assignment on the board.
303
321
 
@@ -305,13 +323,21 @@ def collect_usage(
305
323
  whose logs live on a remote machine. Pass ``None`` (the default) to skip
306
324
  remote lookups entirely — the result will still be correct for any
307
325
  assignment whose log is available locally.
326
+
327
+ *cfg* (#2305): the coordinator's :class:`~coord.config.Config`, when the
328
+ caller has one — threaded to :func:`_assignment_to_usage` so a
329
+ tier-named ``providers.definitions`` entry resolves correctly rather
330
+ than degrading to :class:`~coord.providers.claude.ClaudeProvider`.
331
+ ``None`` (the default) preserves pre-#2305 behaviour.
308
332
  """
309
333
  result: list[AssignmentUsage] = []
310
334
  for a in board_assignments:
311
335
  if not a.assignment_id:
312
336
  continue
313
337
  remote = (remote_by_id or {}).get(a.assignment_id)
314
- result.append(_assignment_to_usage(a, logs_dir=logs_dir, remote_data=remote))
338
+ result.append(
339
+ _assignment_to_usage(a, logs_dir=logs_dir, remote_data=remote, cfg=cfg)
340
+ )
315
341
  return result
316
342
 
317
343
 
@@ -321,12 +347,16 @@ def build_session_usage(
321
347
  logs_dir: Path | None = None,
322
348
  remote_by_id: dict[str, dict] | None = None,
323
349
  started_at: float | None = None,
350
+ cfg: "Config | None" = None,
324
351
  ) -> SessionUsage:
325
352
  """Build a :class:`SessionUsage` from the current board.
326
353
 
327
354
  *started_at* should come from ``session.json["started_at"]`` (parsed to
328
355
  a Unix timestamp). If not provided we fall back to the oldest
329
356
  ``dispatched_at`` among the assignments.
357
+
358
+ *cfg* (#2305): passed straight through to :func:`collect_usage` — see
359
+ its docstring.
330
360
  """
331
361
  if started_at is None:
332
362
  # Derive from oldest dispatch time on the board.
@@ -341,6 +371,7 @@ def build_session_usage(
341
371
  board_assignments,
342
372
  logs_dir=logs_dir,
343
373
  remote_by_id=remote_by_id,
374
+ cfg=cfg,
344
375
  )
345
376
  return SessionUsage(started_at=started_at, assignments=assignments)
346
377
 
@@ -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
@@ -17,13 +17,18 @@ stays uncluttered — only a non-default backend earns the tag.
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
+ import logging
21
+ from pathlib import Path
22
+
20
23
  import coord.network as network_mod
24
+ import pytest
21
25
  from click.testing import CliRunner
22
26
 
23
27
  from coord.commands.status import status as status_cmd
24
28
  from coord.models import Assignment, Board
25
29
  from coord.network import MachineStatus, StatusResult
26
30
  from coord.state import save_board
31
+ from tests.conftest import VALID_CONFIG
27
32
 
28
33
 
29
34
  def _work(
@@ -188,3 +193,46 @@ def test_busy_line_omits_provider_when_absent(valid_config_path, monkeypatch) ->
188
193
  )
189
194
  assert result.exit_code == 0, result.output
190
195
  assert "provider=" not in result.output, result.output
196
+
197
+
198
+ # ── #2305: tier-named providers.definitions must resolve, not degrade ──────
199
+
200
+
201
+ @pytest.fixture
202
+ def tier_provider_config_path(tmp_path: Path) -> Path:
203
+ """`valid_config_path` plus a tier-named `providers.definitions` entry —
204
+ the real fleet shape #2305 is about (`oc-mid` etc.), not a builtin
205
+ provider *type* name."""
206
+ p = tmp_path / "coordinator.yml"
207
+ p.write_text(
208
+ VALID_CONFIG
209
+ + "\nproviders:\n"
210
+ " definitions:\n"
211
+ " oc-mid:\n"
212
+ " type: opencode\n"
213
+ )
214
+ return p
215
+
216
+
217
+ def test_status_resolves_tier_named_provider_without_warning(
218
+ tier_provider_config_path, monkeypatch, coord_db, caplog: pytest.LogCaptureFixture,
219
+ ) -> None:
220
+ """#2305 acceptance criterion: `coord status` against a board holding a
221
+ tier-named assignment (`oc-mid`, not a built-in `claude`/`claude-pty`/
222
+ `opencode` type name) must resolve the assignment's own provider
223
+ definition — no `get_provider: unknown provider_name` warning — because
224
+ `build_session_usage()` (feeding the burn-rate line) is now handed
225
+ `cfg`, which carries `providers.definitions`."""
226
+ save_board(Board(completed=[_work("w1", provider_name="oc-mid")]))
227
+ monkeypatch.setattr(network_mod, "check_all", lambda *a, **k: [])
228
+ runner = CliRunner()
229
+ with caplog.at_level(logging.WARNING, logger="coord.providers"):
230
+ result = runner.invoke(
231
+ status_cmd,
232
+ ["--config", str(tier_provider_config_path)],
233
+ catch_exceptions=False,
234
+ )
235
+ assert result.exit_code == 0, result.output
236
+ assert not any(
237
+ "unknown provider_name" in r.message for r in caplog.records
238
+ ), [r.message for r in caplog.records]