code-coordinator 0.5.324__tar.gz → 0.5.325__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 (822) hide show
  1. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/ci_fix.py +84 -0
  5. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/merge.py +108 -1
  6. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/db.py +24 -2
  7. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/merge_queue.py +36 -2
  8. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ci_fix.py +312 -0
  9. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_db.py +1 -1
  10. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/.gitignore +0 -0
  23. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/GOAL.md +0 -0
  25. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/LICENSE +0 -0
  26. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/README.md +0 -0
  28. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/cli.py +0 -0
  60. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/client.py +0 -0
  61. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/__init__.py +0 -0
  62. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/_common.py +0 -0
  63. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/acceptance.py +0 -0
  64. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/agent_ops.py +0 -0
  65. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/audit.py +0 -0
  66. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/chat.py +0 -0
  67. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/dispatch.py +0 -0
  68. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/dispatch_workers.py +0 -0
  69. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/drive.py +0 -0
  70. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/drive_queue.py +0 -0
  71. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/gate_a.py +0 -0
  72. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/gates.py +0 -0
  73. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/issues.py +0 -0
  74. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/lifecycle.py +0 -0
  75. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/machine.py +0 -0
  76. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/milestone.py +0 -0
  77. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/plan_followup.py +0 -0
  78. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/plans.py +0 -0
  79. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/portal.py +0 -0
  80. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/pr.py +0 -0
  81. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/release.py +0 -0
  82. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/repo.py +0 -0
  83. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/report.py +0 -0
  84. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/review.py +0 -0
  85. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/scorecard.py +0 -0
  86. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/sessions.py +0 -0
  87. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/setup.py +0 -0
  88. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/status.py +0 -0
  89. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/store_migrate.py +0 -0
  90. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/config.py +0 -0
  95. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/confirm_test.py +0 -0
  97. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dashboard/server.py +0 -0
  103. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dead_end.py +0 -0
  105. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/decomposition_chat.py +0 -0
  106. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/README.md +0 -0
  107. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-agent.service +0 -0
  108. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-db-backup.service +0 -0
  109. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-db-backup.sh +0 -0
  110. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-db-backup.timer +0 -0
  111. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-drive-queue.service +0 -0
  112. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-drive-queue.timer +0 -0
  113. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-failure-notify.service +0 -0
  114. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-fleet-watchdog.service +0 -0
  115. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  116. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-notify.service +0 -0
  117. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-notify.timer +0 -0
  118. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-release-propagate.service +0 -0
  119. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-release-propagate.timer +0 -0
  120. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-release-window.service +0 -0
  121. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-release-window.timer +0 -0
  122. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-serve.service +0 -0
  123. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-web-dist-build.service +0 -0
  124. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-web-dist-build.timer +0 -0
  125. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy/coord-web.service +0 -0
  126. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy_manifest.py +0 -0
  127. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deploy_units.py +0 -0
  128. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deprecation_telemetry.py +0 -0
  129. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/deps.py +0 -0
  130. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/diagnose.py +0 -0
  131. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dispatch.py +0 -0
  132. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/dist_name.py +0 -0
  133. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/drive.py +0 -0
  134. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/drive_queue.py +0 -0
  135. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/drive_state.py +0 -0
  136. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/events.py +0 -0
  137. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/failure_class.py +0 -0
  138. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/filelock.py +0 -0
  139. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/fleet_config_health.py +0 -0
  140. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/forge_availability.py +0 -0
  141. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/github_throttle.py +0 -0
  148. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/goal.py +0 -0
  149. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/graph_health.py +0 -0
  150. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/__init__.py +0 -0
  151. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/aggregate.py +0 -0
  152. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/__init__.py +0 -0
  153. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/_ci_pin.py +0 -0
  154. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/agent_install.py +0 -0
  155. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/cargo_targets.py +0 -0
  156. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/claude_binary.py +0 -0
  157. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  158. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/coord_web_ci_pin.py +0 -0
  159. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/deploy_lane_facts.py +0 -0
  160. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/disk.py +0 -0
  161. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/fleet_board.py +0 -0
  162. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  163. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/fleet_phantom.py +0 -0
  164. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/fleet_unit_drift.py +0 -0
  165. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/graph.py +0 -0
  166. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/graphify_cli.py +0 -0
  167. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/index_lock.py +0 -0
  168. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/issues_sync_staleness.py +0 -0
  169. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/plan_usage.py +0 -0
  170. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/release_cordon.py +0 -0
  171. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/stalled_pipeline.py +0 -0
  174. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/wedged_drive_queue.py +0 -0
  179. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/checks/worktrees.py +0 -0
  180. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/cli.py +0 -0
  181. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/context.py +0 -0
  182. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/fleet_snapshot.py +0 -0
  183. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/models.py +0 -0
  184. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/pypi.py +0 -0
  185. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/registry.py +0 -0
  186. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/render.py +0 -0
  187. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/health/units.py +0 -0
  188. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/hooks.py +0 -0
  189. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/housekeeping.py +0 -0
  190. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/issues_sync_status.py +0 -0
  193. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/machine_onboard.py +0 -0
  195. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/machine_pause.py +0 -0
  196. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/milestone_chat.py +0 -0
  197. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/milestone_dispatch.py +0 -0
  198. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/milestone_gate.py +0 -0
  199. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/milestone_order.py +0 -0
  200. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/mock_author.py +0 -0
  201. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/models.py +0 -0
  202. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/network.py +0 -0
  203. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/new_issue_chat.py +0 -0
  204. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/__init__.py +0 -0
  205. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/baseline.py +0 -0
  206. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/cli.py +0 -0
  207. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/collect.py +0 -0
  208. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/digest.py +0 -0
  209. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/models.py +0 -0
  210. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/predicate.py +0 -0
  211. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/service.py +0 -0
  212. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/store.py +0 -0
  213. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notifier/transport.py +0 -0
  214. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/notify.py +0 -0
  215. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/openapi.py +0 -0
  216. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/overlap_fence.py +0 -0
  217. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/overlap_predict.py +0 -0
  218. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/parentage.py +0 -0
  219. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/parentage_github.py +0 -0
  220. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/pipeline.py +0 -0
  221. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/plan_parser.py +0 -0
  222. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/plans.py +0 -0
  223. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/platform_paths.py +0 -0
  224. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/portal_bridge.py +0 -0
  225. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/portal_store.py +0 -0
  226. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/portal_sync.py +0 -0
  227. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/pr_body_lint.py +0 -0
  228. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/prereqs.py +0 -0
  229. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/progress.py +0 -0
  230. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/providers/__init__.py +0 -0
  231. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/providers/base.py +0 -0
  232. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/providers/claude.py +0 -0
  233. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/providers/claude_pty.py +0 -0
  234. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/providers/opencode.py +0 -0
  235. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/queue_diagnose.py +0 -0
  236. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/reconcile.py +0 -0
  237. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/reconcile_tick.py +0 -0
  238. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/refine_chat.py +0 -0
  239. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/release_cordon.py +0 -0
  240. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/release_propagate.py +0 -0
  241. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/release_verify.py +0 -0
  242. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/release_window.py +0 -0
  243. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/repo_dormancy.py +0 -0
  244. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/repo_edit.py +0 -0
  245. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/repo_onboard.py +0 -0
  246. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/reports.py +0 -0
  247. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/rest_schema.py +0 -0
  248. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/revalidate.py +0 -0
  249. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/review.py +0 -0
  250. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/scorecard.py +0 -0
  251. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/self_health.py +0 -0
  252. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/serve_app.py +0 -0
  253. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  254. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  255. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  256. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/portal-followup/SKILL.md +0 -0
  259. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/release-now/SKILL.md +0 -0
  260. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  261. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  262. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/skills/update-issue/SKILL.md +0 -0
  263. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/smoke.py +0 -0
  264. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/spend_ceiling.py +0 -0
  265. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/split_work.py +0 -0
  266. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/sql.py +0 -0
  267. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/stage_projection.py +0 -0
  268. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/state.py +0 -0
  269. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/store_migrate.py +0 -0
  270. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/test_author.py +0 -0
  271. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/test_chat.py +0 -0
  272. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/test_orchestrator.py +0 -0
  273. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/test_report.py +0 -0
  274. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/tui_release.py +0 -0
  275. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/usage.py +0 -0
  276. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/usage_limits.py +0 -0
  277. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/usage_rollup.py +0 -0
  278. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coord/worker_events.py +0 -0
  279. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/coordinator.example.yml +0 -0
  280. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-agent.service +0 -0
  281. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-db-backup.service +0 -0
  282. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-db-backup.sh +0 -0
  283. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-db-backup.timer +0 -0
  284. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-drive-queue.service +0 -0
  285. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-drive-queue.timer +0 -0
  286. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-failure-notify.service +0 -0
  287. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-failure-notify.sh +0 -0
  288. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-fleet-watchdog.service +0 -0
  289. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-fleet-watchdog.timer +0 -0
  290. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-notify.service +0 -0
  291. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-notify.timer +0 -0
  292. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-release-propagate.service +0 -0
  293. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-release-propagate.timer +0 -0
  294. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-release-window.service +0 -0
  295. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-release-window.timer +0 -0
  296. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-serve.service +0 -0
  297. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-web-dist-build.service +0 -0
  298. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-web-dist-build.sh +0 -0
  299. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-web-dist-build.timer +0 -0
  300. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-web-rollback.sh +0 -0
  301. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/coord-web.service +0 -0
  302. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/deploy/node-shim.sh +0 -0
  303. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ADR_COORD_TUI_CI.md +0 -0
  304. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  305. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ADR_COORD_WEB_CI.md +0 -0
  306. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ADR_COORD_WEB_DIST.md +0 -0
  307. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  308. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/AGENT_OPERATIONS.md +0 -0
  309. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ARCHITECTURE.md +0 -0
  310. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ARCH_SECURITY_GATES.md +0 -0
  311. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/COCKPIT.md +0 -0
  312. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/CONTROL_CENTER.md +0 -0
  313. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/COST_DISCIPLINE.md +0 -0
  314. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/CROSS_PLATFORM.md +0 -0
  315. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/CUSTOMER_FACING_APPS.md +0 -0
  316. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/CUSTOMER_PORTAL.md +0 -0
  317. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/DRIVE_QUEUE.md +0 -0
  318. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/EPHEMERAL_WORKERS.md +0 -0
  319. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/FORGE_MIGRATION.md +0 -0
  320. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/GRAPHIFY_SETUP.md +0 -0
  321. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ISSUE_GUIDANCE.md +0 -0
  322. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/MAC_MINI.md +0 -0
  323. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  324. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/NOTIFIER.md +0 -0
  325. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/OPENCODE_VERIFICATION.md +0 -0
  326. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/OPERATING_GOTCHAS.md +0 -0
  327. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/OPERATOR_GUIDES.md +0 -0
  328. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/ORACLE_LOOP.md +0 -0
  329. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/PHONE_WEBAPP.md +0 -0
  330. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/PIPELINE_V2.md +0 -0
  331. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/PLATFORM_EVOLUTION.md +0 -0
  332. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/SECOND_BACKEND.md +0 -0
  333. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/STORE_SERVICE.md +0 -0
  334. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  335. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/WEB_CONTROL_CENTER.md +0 -0
  336. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/WSL_WINDOWS_WORKER.md +0 -0
  337. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/mocks/web/README.md +0 -0
  338. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/mocks/web/_tokens.css +0 -0
  339. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/mocks/web/issue-detail.html +0 -0
  340. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/mocks/web/pipeline-narrow.html +0 -0
  341. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/docs/mocks/web/pipeline-wide.html +0 -0
  342. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/graphify-out/.gitignore +0 -0
  343. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/install-agent.sh +0 -0
  344. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/pyproject.toml +0 -0
  345. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/audit_review_verdict_overrides.py +0 -0
  346. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  347. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/build-worker-image.sh +0 -0
  348. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/coordinator-machine.py +0 -0
  349. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/epic-down.sh +0 -0
  350. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/epic-up.sh +0 -0
  351. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/preflight.sh +0 -0
  352. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/provision-worker.sh +0 -0
  353. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  354. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  355. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/azure-workers/verify-github-token.sh +0 -0
  356. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/check_gh_argv_containment.py +0 -0
  357. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/codegen.py +0 -0
  358. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-test-runner.sh +0 -0
  359. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  360. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  361. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  362. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  363. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/coord-venv-rollback.sh +0 -0
  364. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/drive-batch.sh +0 -0
  365. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/extract-coord-tui.sh +0 -0
  366. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/fleet_watchdog.py +0 -0
  367. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/gen_board_fixture.py +0 -0
  368. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/gen_mock_index.py +0 -0
  369. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/next_release_tag.py +0 -0
  370. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/run_tests_in_populated_home.sh +0 -0
  371. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/run_tests_without_gh.sh +0 -0
  372. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/smoke_437_interactive.py +0 -0
  373. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/verify_878_review_capture.py +0 -0
  374. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/verify_release_published.py +0 -0
  375. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/scripts/verify_release_wheel.py +0 -0
  376. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/setup.cfg +0 -0
  377. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/SMOKE_SET.md +0 -0
  378. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/__init__.py +0 -0
  379. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-37/conftest.py +0 -0
  380. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-37/contract.md +0 -0
  381. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-37/manifest.yml +0 -0
  382. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  383. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  384. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/contract.md +0 -0
  385. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  386. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  387. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/manifest.yml +0 -0
  388. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  389. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-51/tsconfig.json +0 -0
  390. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  391. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/backends.py +0 -0
  392. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/conftest.py +0 -0
  393. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/board-pipeline-basic.json +0 -0
  394. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  395. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  396. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  397. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  398. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/all_pass.json +0 -0
  399. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  400. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/mixed_fail.json +0 -0
  401. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  402. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  403. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/skip.json +0 -0
  404. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/playwright/truncated.json +0 -0
  405. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  406. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  407. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  409. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  410. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  411. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  412. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  413. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_acceptance.py +0 -0
  414. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_acceptance_drivers.py +0 -0
  415. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent.py +0 -0
  416. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_api_error.py +0 -0
  417. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_app.py +0 -0
  418. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_branch_base.py +0 -0
  419. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_branch_capture.py +0 -0
  420. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_config_free_1712.py +0 -0
  421. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_deploy_units_endpoint.py +0 -0
  422. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_dirty_worktree.py +0 -0
  423. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  424. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_graph_self_heal.py +0 -0
  425. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_health_h3.py +0 -0
  426. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_idle_restart.py +0 -0
  427. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_push_failure.py +0 -0
  428. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_reap.py +0 -0
  429. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_repos_and_pull.py +0 -0
  430. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_restart_services_endpoint.py +0 -0
  431. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_skills_self_heal.py +0 -0
  432. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_startup_diagnostics.py +0 -0
  433. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_update.py +0 -0
  434. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_update_bluegreen.py +0 -0
  435. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_usage_limit.py +0 -0
  436. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_agent_zero_commit.py +0 -0
  437. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ambient_home_isolation.py +0 -0
  438. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_approve_dependency_busy_2804.py +0 -0
  439. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_approve_reject_plan.py +0 -0
  440. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_approve_usage_gate.py +0 -0
  441. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_approved_work_2532.py +0 -0
  442. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_approved_work_2996.py +0 -0
  443. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_assignment_already_recorded_daemon.py +0 -0
  444. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_audit_log.py +0 -0
  445. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_audit_outcome.py +0 -0
  446. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_audit_query.py +0 -0
  447. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_auto_loop.py +0 -0
  448. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_auto_release_publish_2035.py +0 -0
  449. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_backend_selection.py +0 -0
  450. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_base_checkout_restore.py +0 -0
  451. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_block_log.py +0 -0
  452. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_cap_762.py +0 -0
  453. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_fixture.py +0 -0
  454. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_read_path.py +0 -0
  455. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_schema.py +0 -0
  456. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_service.py +0 -0
  457. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_state.py +0 -0
  458. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_board_wire.py +0 -0
  459. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_brain.py +0 -0
  460. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_branch_model.py +0 -0
  461. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_bug_intake.py +0 -0
  462. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_build_worker_image_env_update.py +0 -0
  463. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cargo_cache.py +0 -0
  464. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_check_gh_argv_containment.py +0 -0
  465. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ci_acceptance_gate_1950.py +0 -0
  466. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ci_gitlab.py +0 -0
  467. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ci_parity_2091.py +0 -0
  468. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_ci_store.py +0 -0
  469. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_claim.py +0 -0
  470. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_claude_md_budget.py +0 -0
  471. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_acceptance.py +0 -0
  472. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_assign.py +0 -0
  473. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  474. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_assign_interactive_remote.py +0 -0
  475. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_assign_provider.py +0 -0
  476. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  477. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_audit.py +0 -0
  478. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_chat_continue.py +0 -0
  479. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_decide.py +0 -0
  480. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_capability_rules.py +0 -0
  481. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_config_provenance.py +0 -0
  482. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_forge_availability.py +0 -0
  483. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_graph.py +0 -0
  484. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_self.py +0 -0
  485. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_diagnose_test_coverage.py +0 -0
  486. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_doctor.py +0 -0
  487. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_doctor_config_free_1801.py +0 -0
  488. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  489. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_drive.py +0 -0
  490. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_drive_queue.py +0 -0
  491. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_escalate.py +0 -0
  492. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_fix_headless_review.py +0 -0
  493. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_gate_a.py +0 -0
  494. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_install_drift.py +0 -0
  495. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_install_skills.py +0 -0
  496. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_issue_comment.py +0 -0
  497. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_issue_create_label.py +0 -0
  498. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_issue_reopen.py +0 -0
  499. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_issue_view_list.py +0 -0
  500. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_pr.py +0 -0
  515. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  524. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_contested_tag.py +0 -0
  528. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_merge_queue.py +0 -0
  529. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_provider.py +0 -0
  530. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_review_finalizing.py +0 -0
  531. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_test_failed_tag.py +0 -0
  532. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_status_usage_limit.py +0 -0
  533. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_sync_comments_873.py +0 -0
  534. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_test_plan.py +0 -0
  535. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_track.py +0 -0
  536. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_tui_update.py +0 -0
  537. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cli_wait.py +0 -0
  538. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_client_base_install.py +0 -0
  539. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_client_resource_migration_1946.py +0 -0
  540. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_commands_common.py +0 -0
  541. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_comments.py +0 -0
  542. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_completion_summary.py +0 -0
  543. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config.py +0 -0
  544. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config_acceptance.py +0 -0
  545. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config_audit.py +0 -0
  546. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config_pricing.py +0 -0
  547. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  548. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_config_usage_gate.py +0 -0
  549. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_confirm_test.py +0 -0
  550. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_conflict_fix.py +0 -0
  551. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_conflict_fix_semantic.py +0 -0
  552. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  553. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test.py +0 -0
  554. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  555. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test_runner_baseline.py +0 -0
  556. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test_runner_populated_home.py +0 -0
  557. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test_runner_routing.py +0 -0
  558. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_test_runner_toolchain.py +0 -0
  559. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_uat.py +0 -0
  560. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coord_web_sse_restart_live.py +0 -0
  561. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_coordinator_machine.py +0 -0
  562. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_cross_platform_imports.py +0 -0
  563. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dao.py +0 -0
  564. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dashboard.py +0 -0
  565. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dashboard_api.py +0 -0
  566. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dashboard_fixture.py +0 -0
  567. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dashboard_terminal.py +0 -0
  568. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dashboard_terminal_live.py +0 -0
  569. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dead_end.py +0 -0
  570. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_decomposition_chat.py +0 -0
  571. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_coord_db_backup.py +0 -0
  572. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_coord_web_dist.py +0 -0
  573. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_coord_web_rollback.py +0 -0
  574. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_drive_queue_unit.py +0 -0
  575. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_failure_notify_unit.py +0 -0
  576. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_manifest.py +0 -0
  577. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_notify_unit.py +0 -0
  578. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_units_lane.py +0 -0
  579. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deploy_web_unit.py +0 -0
  580. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deprecation_telemetry.py +0 -0
  581. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_deps.py +0 -0
  582. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_diagnose.py +0 -0
  583. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dispatch.py +0 -0
  584. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dispatch_target_validation.py +0 -0
  585. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_dist_name.py +0 -0
  586. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_done_housekeeping.py +0 -0
  587. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive.py +0 -0
  588. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue.py +0 -0
  589. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue_blocked_rendering.py +0 -0
  590. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue_launch_argv.py +0 -0
  591. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  592. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue_roll_pending.py +0 -0
  593. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  594. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_state.py +0 -0
  595. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_drive_tmux.py +0 -0
  596. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_epic_up_capability_detection.py +0 -0
  597. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  598. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_epic_up_image_provenance.py +0 -0
  599. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_errors.py +0 -0
  600. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_events.py +0 -0
  601. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_failure_class.py +0 -0
  602. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_filelock.py +0 -0
  603. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  604. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_fix_of_force_override.py +0 -0
  605. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_fleet_config_health.py +0 -0
  606. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_fleet_health_probes.py +0 -0
  607. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_fleet_health_snapshot.py +0 -0
  608. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_fleet_watchdog.py +0 -0
  609. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_forge_availability.py +0 -0
  610. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_freshness.py +0 -0
  611. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gate_a.py +0 -0
  612. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gate_b.py +0 -0
  613. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gate_snapshot_staleness.py +0 -0
  614. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gates.py +0 -0
  615. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  616. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_gen_mock_index.py +0 -0
  617. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_generated_rust_fixture.py +0 -0
  618. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_generated_rust_requests.py +0 -0
  619. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_generated_types_fixture.py +0 -0
  620. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_github_ops.py +0 -0
  621. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_github_throttle.py +0 -0
  622. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_graph_selfheal_absent_2237.py +0 -0
  625. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_coord_tui_ci_pin.py +0 -0
  632. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_coord_web_ci_pin.py +0 -0
  633. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_deploy_lane_facts.py +0 -0
  634. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_fix.py +0 -0
  635. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_incident_regression.py +0 -0
  636. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_issues_sync_staleness.py +0 -0
  637. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_pypi.py +0 -0
  638. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_registry.py +0 -0
  639. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_release_cordon_probe.py +0 -0
  640. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_timer_active.py +0 -0
  641. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_toolchain.py +0 -0
  642. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_unit_drift.py +0 -0
  643. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_unit_enablement.py +0 -0
  644. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_health_wedged_drive_queue.py +0 -0
  645. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_hooks.py +0 -0
  646. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_human_attended_437.py +0 -0
  647. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_init.py +0 -0
  648. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_install_agent_venv_2911.py +0 -0
  649. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_integration.py +0 -0
  650. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_briefing_echo.py +0 -0
  651. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_pane_log_2541.py +0 -0
  652. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_prefill_state.py +0 -0
  653. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_session_relaunch.py +0 -0
  654. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_test_verdict_backstop.py +0 -0
  655. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_token_attribution.py +0 -0
  656. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_interactive_worktree.py +0 -0
  657. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_issue_store_seam.py +0 -0
  658. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_issues_sync_status.py +0 -0
  659. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_liveness_auditor.py +0 -0
  660. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_liveness_notify.py +0 -0
  661. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_lock_contention_ratchet.py +0 -0
  662. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_machine_onboard.py +0 -0
  663. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_machine_pause.py +0 -0
  664. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_merge_queue.py +0 -0
  665. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_merge_verify.py +0 -0
  666. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_milestone_chat.py +0 -0
  667. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_milestone_dispatch.py +0 -0
  668. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_milestone_gate.py +0 -0
  669. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_milestone_order.py +0 -0
  670. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_milestone_seam.py +0 -0
  671. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_mock_author.py +0 -0
  672. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_model_tiering.py +0 -0
  673. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_models.py +0 -0
  674. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_models_config_labels.py +0 -0
  675. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_needs_attention.py +0 -0
  676. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_network.py +0 -0
  677. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_new_issue_chat.py +0 -0
  678. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_next_release_tag.py +0 -0
  679. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_node_shim.py +0 -0
  680. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_baseline.py +0 -0
  681. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_cli.py +0 -0
  682. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_collect.py +0 -0
  683. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_config.py +0 -0
  684. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_drive_seam.py +0 -0
  685. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_isolation.py +0 -0
  686. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_predicate.py +0 -0
  687. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_quiet_hours.py +0 -0
  688. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notifier_service.py +0 -0
  689. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notify.py +0 -0
  690. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_notify_drain.py +0 -0
  691. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_openapi.py +0 -0
  692. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_operational_defaults.py +0 -0
  693. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_overlap_fence.py +0 -0
  694. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_overlap_predict.py +0 -0
  695. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_packaged_deploy_units.py +0 -0
  696. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_parentage.py +0 -0
  697. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_paste_landed.py +0 -0
  698. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  699. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_pipeline.py +0 -0
  700. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_plan_followup_approve_plan_command.py +0 -0
  701. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_plan_followup_pr_command.py +0 -0
  702. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_plan_followup_review_command.py +0 -0
  703. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_plan_only.py +0 -0
  704. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_plan_parser.py +0 -0
  705. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_platform_paths.py +0 -0
  706. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_portal_bridge.py +0 -0
  707. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_portal_config.py +0 -0
  708. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_portal_store.py +0 -0
  709. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_portal_sync.py +0 -0
  710. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_pr_body_lint.py +0 -0
  711. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_prereqs.py +0 -0
  712. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_production_db_guard.py +0 -0
  713. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_progress.py +0 -0
  714. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_provider_seam.py +0 -0
  715. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_providers.py +0 -0
  716. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_providers_config_labels.py +0 -0
  717. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_providers_pty.py +0 -0
  718. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_py_rust_mirror_inventory.py +0 -0
  719. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_quiet_hours.py +0 -0
  720. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_quiet_hours_store_2146.py +0 -0
  721. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reap_merged_sessions.py +0 -0
  722. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reap_stale_interactive_tick.py +0 -0
  723. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile.py +0 -0
  724. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_branch.py +0 -0
  725. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_completions.py +0 -0
  726. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  727. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_merges.py +0 -0
  728. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_no_agent_record.py +0 -0
  729. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_tick.py +0 -0
  730. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reconcile_usage_limit_done.py +0 -0
  731. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_refine_chat.py +0 -0
  732. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_cordon_2101.py +0 -0
  733. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  734. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_cordon_deadlock_2240.py +0 -0
  735. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_cordon_stuck_2490.py +0 -0
  736. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_propagate.py +0 -0
  737. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_propagate_threshold.py +0 -0
  738. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_roll_between_legs_2854.py +0 -0
  739. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_roll_window_handoff.py +0 -0
  740. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_repo_add.py +0 -0
  746. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_repo_dormancy.py +0 -0
  747. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_repo_edit_2220.py +0 -0
  748. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_repo_graph_fleet_2237.py +0 -0
  749. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_repo_onboard_2220.py +0 -0
  750. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_report_result_push.py +0 -0
  751. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_reports.py +0 -0
  752. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_retry.py +0 -0
  753. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_retry_advisory_1606.py +0 -0
  754. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_retry_type_1636.py +0 -0
  755. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_revalidate.py +0 -0
  756. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review.py +0 -0
  757. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_end_review_without_verdict.py +0 -0
  758. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_parse_failure_diagnostic.py +0 -0
  759. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_reaffirm.py +0 -0
  760. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_state.py +0 -0
  761. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_verdict_backstop.py +0 -0
  762. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_verdict_override_audit.py +0 -0
  763. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_verdict_relay.py +0 -0
  764. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_review_zero_commits.py +0 -0
  765. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_scoped_review_wiring.py +0 -0
  766. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_scorecard.py +0 -0
  767. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_self_health.py +0 -0
  768. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_serve.py +0 -0
  769. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_serve_app_board_trim.py +0 -0
  770. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_serve_rest_routes.py +0 -0
  771. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_session.py +0 -0
  772. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_slice_issue_attribution.py +0 -0
  773. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_smoke.py +0 -0
  774. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_smoke_live_checkout_restore.py +0 -0
  775. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_smoke_workflow.py +0 -0
  776. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_spend_ceiling.py +0 -0
  777. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_spend_ceiling_coordinator.py +0 -0
  778. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_split.py +0 -0
  779. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_split_work.py +0 -0
  780. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_sql_dialect.py +0 -0
  781. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_sqlite_connect_ratchet.py +0 -0
  782. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stage_projection.py +0 -0
  783. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stale_busy_reviewer_697.py +0 -0
  784. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stalled_pipeline.py +0 -0
  785. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_state.py +0 -0
  786. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_state_review_findings_daemon.py +0 -0
  787. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_status_fleet_footer.py +0 -0
  788. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stop_1567.py +0 -0
  789. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_store_contract.py +0 -0
  790. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_store_migrate.py +0 -0
  791. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stuck.py +0 -0
  792. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  793. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_terminal_command.py +0 -0
  794. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_author.py +0 -0
  795. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_chat.py +0 -0
  796. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_orchestrator.py +0 -0
  797. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_report.py +0 -0
  798. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_verdict_parsing.py +0 -0
  799. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_test_verdict_transcript_floor.py +0 -0
  800. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_text_io_encoding_audit.py +0 -0
  801. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_thin_client_board_audit.py +0 -0
  802. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_thin_client_config_load_1080.py +0 -0
  803. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_thin_client_daemon_routing_906.py +0 -0
  804. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_tmux_host.py +0 -0
  805. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_tmux_session.py +0 -0
  806. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_usage.py +0 -0
  808. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_usage_limits.py +0 -0
  809. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_usage_rollup.py +0 -0
  810. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_venv_live_install_2121.py +0 -0
  811. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_version_single_source.py +0 -0
  812. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_watch.py +0 -0
  813. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  814. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worker_env_venv_isolation.py +0 -0
  815. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worker_events.py +0 -0
  816. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worker_image_pin_sync.py +0 -0
  817. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worker_safety.py +0 -0
  818. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worker_test_scoping.py +0 -0
  819. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worktree.py +0 -0
  820. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  821. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/tests/test_write_parity.py +0 -0
  822. {code_coordinator-0.5.324 → code_coordinator-0.5.325}/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.324
3
+ Version: 0.5.325
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.324
3
+ Version: 0.5.325
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.324",
2
+ "tag": "0.5.325",
3
3
  "distance": 0,
4
- "node": "gfe0ce4aff039fa4d2a916eda693e9adb5553d439",
4
+ "node": "ge5cc30ddda55f8f402bf6ce19c05a479a58ec944",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-31"
@@ -50,6 +50,18 @@ _log = logging.getLogger(__name__)
50
50
  # same exhausted budget the way an unbounded conflict-fix retry would.
51
51
  MAX_CI_FIX_DISPATCHES = 2
52
52
 
53
+ # #3011: a ci-fix leg that finishes with the branch HEAD unchanged (see
54
+ # `dispatch_was_noop`) is refunded and does NOT count toward
55
+ # MAX_CI_FIX_DISPATCHES above — but that refund must itself be bounded, or
56
+ # two workers that keep (correctly) declining could cycle forever without
57
+ # ever reaching a verdict. Same magnitude as MAX_CI_FIX_DISPATCHES for the
58
+ # same "a couple of genuine signals is enough" reasoning: once this many
59
+ # CONSECUTIVE legs come back having pushed nothing, that itself is the
60
+ # verdict — the failure is not attributable to this branch — and
61
+ # `coord.commands.merge._dispatch_ci_fixes` escalates to HUMAN_REQUIRED
62
+ # with a reason that says so, distinct from the generic retry-cap message.
63
+ MAX_CI_FIX_NOOP_STREAK = 2
64
+
53
65
  # Prefix on the dispatched fix worker's issue_title — mirrors
54
66
  # `conflict_fix.SEMANTIC_FIX_TITLE_PREFIX`'s visibility purpose: the TUI
55
67
  # Pipeline row and the fix briefing itself both make it obvious WHY this
@@ -123,6 +135,47 @@ def _has_active_fix(board: Board, entry: QueuedMerge) -> bool:
123
135
  return False
124
136
 
125
137
 
138
+ def dispatch_was_noop(entry: QueuedMerge) -> bool:
139
+ """True when the LAST ci-fix dispatch for *entry* completed with the
140
+ branch HEAD unchanged — the worker correctly concluded the CI failure
141
+ wasn't its to fix and pushed no commit, rather than genuinely attempting
142
+ a fix. Compares the live, per-tick-refreshed ``entry.branch_head_sha``
143
+ (see ``coord.merge_queue.process``'s freshness-anchor refresh, which
144
+ runs before a ``checks_failed`` event is ever emitted) against
145
+ ``entry.ci_fix_head_sha``, the sha :func:`dispatch_ci_fix` snapshotted
146
+ at the moment of that dispatch.
147
+
148
+ Both empty (no ci-fix ever dispatched for this streak, or a probe
149
+ failure left the current SHA unknown) reads as ``False`` — fails
150
+ closed, same as every other SHA-staleness check in this codebase
151
+ (#821): "we can't tell" must never be treated as "we can tell it
152
+ didn't move".
153
+ """
154
+ return (
155
+ bool(entry.ci_fix_head_sha)
156
+ and bool(entry.branch_head_sha)
157
+ and entry.ci_fix_head_sha == entry.branch_head_sha
158
+ )
159
+
160
+
161
+ def refund_noop_ci_fix(entry: QueuedMerge) -> None:
162
+ """Undo the attempt :func:`dispatch_ci_fix` speculatively spent for a
163
+ leg that turned out to be a no-op (:func:`dispatch_was_noop` is
164
+ ``True``), and track the no-op streak separately so it cannot cycle
165
+ forever without ever reaching a verdict — see
166
+ :data:`MAX_CI_FIX_NOOP_STREAK`.
167
+
168
+ Called by ``coord.commands.merge._dispatch_ci_fixes`` BEFORE it decides
169
+ whether to dispatch again for this entry's event; the caller is
170
+ responsible for checking ``entry.ci_fix_noop_streak`` against the cap
171
+ afterwards and escalating/persisting as needed, same division of
172
+ responsibility as :func:`dispatch_ci_fix` itself.
173
+ """
174
+ entry.ci_fix_dispatches = max(0, entry.ci_fix_dispatches - 1)
175
+ entry.ci_fix_noop_streak += 1
176
+ entry.ci_fix_head_sha = ""
177
+
178
+
126
179
  def dispatch_ci_fix(
127
180
  entry: QueuedMerge,
128
181
  board: Board,
@@ -146,6 +199,14 @@ def dispatch_ci_fix(
146
199
  only a successful dispatch spends the budget, mirroring how
147
200
  ``ci_infra_reruns``/``ci_flaky_reruns`` are only bumped when their
148
201
  respective remedy actually fired.
202
+
203
+ #3011: a successful dispatch also snapshots ``entry.branch_head_sha``
204
+ into ``entry.ci_fix_head_sha`` so a later tick can tell whether this
205
+ leg actually moved the branch — see ``dispatch_was_noop``/
206
+ ``refund_noop_ci_fix``. Callers are expected to check
207
+ ``dispatch_was_noop(entry)`` and route through ``refund_noop_ci_fix``
208
+ BEFORE calling this function again for the same entry, so a worker
209
+ that pushed nothing doesn't silently spend a second real attempt.
149
210
  """
150
211
  if entry.ci_fix_dispatches >= MAX_CI_FIX_DISPATCHES:
151
212
  return None
@@ -181,6 +242,29 @@ def dispatch_ci_fix(
181
242
  # purpose as conflict_fix's SEMANTIC_FIX_TITLE_PREFIX.
182
243
  fix.issue_title = f"{CI_FIX_TITLE_PREFIX} {work.issue_title}"
183
244
 
245
+ # #3011: if a PRIOR dispatch's snapshot is still on the entry and the
246
+ # branch has since moved past it, that prior leg was a genuine attempt
247
+ # (not a no-op) — clear any no-op streak it may have left behind so it
248
+ # doesn't linger into this fresh attempt. (When the branch has NOT
249
+ # moved, the caller — `coord.commands.merge._dispatch_ci_fixes` — is
250
+ # expected to have already routed through `dispatch_was_noop`/
251
+ # `refund_noop_ci_fix` instead of reaching here; this is a harmless
252
+ # no-op in that case too, since `entry.ci_fix_noop_streak` would already
253
+ # be 0 for a caller that follows the intended sequencing.)
254
+ if (
255
+ entry.ci_fix_head_sha
256
+ and entry.branch_head_sha
257
+ and entry.ci_fix_head_sha != entry.branch_head_sha
258
+ ):
259
+ entry.ci_fix_noop_streak = 0
260
+
261
+ # Snapshot the current branch HEAD so a later tick can tell whether
262
+ # THIS dispatch's leg actually moved the branch (see
263
+ # `dispatch_was_noop`). `branch_head_sha` may itself be None (a probe
264
+ # failure) — falls back to "" so an unknown SHA never spuriously reads
265
+ # as "no ci-fix dispatch pending" on the next comparison.
266
+ entry.ci_fix_head_sha = entry.branch_head_sha or ""
267
+
184
268
  entry.ci_fix_dispatches += 1
185
269
 
186
270
  from coord.audit import record_audit # noqa: PLC0415
@@ -569,13 +569,43 @@ def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
569
569
  is never reprocessed by a later ``process()`` call (it only acts on
570
570
  ``PENDING`` entries) so whichever caller sees the event first must also
571
571
  be the one to act on it.
572
+
573
+ #3011: before dispatching again, checks whether the entry's LAST ci-fix
574
+ leg was a no-op — the branch HEAD is unchanged from
575
+ ``entry.ci_fix_head_sha``, the snapshot ``dispatch_ci_fix`` took when it
576
+ dispatched that leg. A no-op means a fresh worker looked at this
577
+ failure and pushed no commit — evidence the failure isn't attributable
578
+ to this branch, not evidence a fix attempt failed — so it is refunded
579
+ (``coord.ci_fix.refund_noop_ci_fix``) rather than counted toward
580
+ ``MAX_CI_FIX_DISPATCHES``. Consecutive no-ops are bounded separately by
581
+ ``MAX_CI_FIX_NOOP_STREAK``, escalating to ``HUMAN_REQUIRED`` with a
582
+ distinct reason once THAT cap is hit — the goal being that a human is
583
+ called in because a worker genuinely tried and failed, or because the
584
+ failure is provably not this branch's, never because two correct
585
+ declines were miscounted as two failed attempts.
586
+
587
+ Before trusting ``dispatch_was_noop`` at all, first checks ``coord.
588
+ ci_fix._has_active_fix`` — the SHA comparison alone cannot distinguish
589
+ "the fix worker finished and declined to push" from "the fix worker is
590
+ still running and just hasn't pushed yet" (a dispatched leg stays
591
+ PENDING for its whole lifetime, so the very next tick after dispatch
592
+ would otherwise read as a noop). While a fix is still active, the entry
593
+ is left untouched — no refund, no streak bump, no new dispatch — for
594
+ the next tick to re-check.
572
595
  """
573
596
  ci_events = [ev for ev in events if ev.kind == "checks_failed"]
574
597
  if not ci_events or dry_run:
575
598
  return
576
599
 
577
600
  from coord.audit import record_audit # noqa: PLC0415
578
- from coord.ci_fix import MAX_CI_FIX_DISPATCHES, dispatch_ci_fix # noqa: PLC0415
601
+ from coord.ci_fix import ( # noqa: PLC0415
602
+ MAX_CI_FIX_DISPATCHES,
603
+ MAX_CI_FIX_NOOP_STREAK,
604
+ _has_active_fix,
605
+ dispatch_ci_fix,
606
+ dispatch_was_noop,
607
+ refund_noop_ci_fix,
608
+ )
579
609
  from coord.merge_queue import HUMAN_REQUIRED # noqa: PLC0415
580
610
  from coord.state import load_board, save_board # noqa: PLC0415
581
611
 
@@ -585,6 +615,83 @@ def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
585
615
  dispatched_any = False
586
616
  for ev in ci_events:
587
617
  entry = ev.entry
618
+ # #3011 follow-up: `dispatch_was_noop` only compares the SHA
619
+ # snapshotted at dispatch time against the current branch head — it
620
+ # cannot tell "the fix worker finished and declined to push" apart
621
+ # from "the fix worker is still running and just hasn't pushed yet".
622
+ # A dispatched leg stays PENDING for its whole lifetime (`process()`
623
+ # never mutates entry.state for this path), so on the very next tick
624
+ # after dispatch the SHA still matches and `dispatch_was_noop` would
625
+ # read `True` for a leg that hasn't even had a chance to push.
626
+ # `_has_active_fix` is the same in-flight guard `dispatch_ci_fix`
627
+ # itself checks before dispatching — treat "still running" as "still
628
+ # pending" here too: skip the noop/refund accounting entirely and
629
+ # leave the entry untouched for the next tick, exactly like the
630
+ # generic "already in flight" decline below.
631
+ if _has_active_fix(fix_board, entry):
632
+ click.echo(
633
+ f" {entry.repo_name} #{entry.issue_number}: "
634
+ "ci-fix already in flight — will re-check next run"
635
+ )
636
+ continue
637
+ if dispatch_was_noop(entry):
638
+ refund_noop_ci_fix(entry)
639
+ dispatched_any = True
640
+ if entry.ci_fix_noop_streak >= MAX_CI_FIX_NOOP_STREAK:
641
+ entry.state = HUMAN_REQUIRED
642
+ click.echo(
643
+ f" {entry.repo_name} #{entry.issue_number}: "
644
+ f"{entry.ci_fix_noop_streak} consecutive ci-fix workers "
645
+ "pushed no commit — not attributable to this branch, "
646
+ "manual resolution required"
647
+ )
648
+ record_audit(
649
+ tier="operational",
650
+ category="merge",
651
+ event_type="ci_fix_not_attributable",
652
+ actor="daemon",
653
+ summary=(
654
+ f"ci-fix not attributable to branch: "
655
+ f"{entry.repo_name}#{entry.issue_number} — "
656
+ f"{entry.ci_fix_noop_streak} consecutive fix "
657
+ "workers pushed no commit; manual resolution "
658
+ "required"
659
+ ),
660
+ repo=entry.repo_name,
661
+ issue=entry.issue_number,
662
+ assignment_id=entry.assignment_id,
663
+ details={
664
+ "reason": "ci_fix_noop_streak",
665
+ "ci_fix_noop_streak": entry.ci_fix_noop_streak,
666
+ "error": entry.error,
667
+ },
668
+ )
669
+ else:
670
+ click.echo(
671
+ f" {entry.repo_name} #{entry.issue_number}: "
672
+ "ci-fix leg pushed no commit — refunding attempt "
673
+ f"({entry.ci_fix_dispatches}/{MAX_CI_FIX_DISPATCHES} "
674
+ "real attempts spent), will retry next run"
675
+ )
676
+ record_audit(
677
+ tier="operational",
678
+ category="merge",
679
+ event_type="ci_fix_noop_refunded",
680
+ actor="daemon",
681
+ summary=(
682
+ f"ci-fix leg was a no-op (branch head unchanged): "
683
+ f"{entry.repo_name}#{entry.issue_number} — attempt "
684
+ "refunded, not counted toward the retry cap"
685
+ ),
686
+ repo=entry.repo_name,
687
+ issue=entry.issue_number,
688
+ assignment_id=entry.assignment_id,
689
+ details={
690
+ "ci_fix_dispatches": entry.ci_fix_dispatches,
691
+ "ci_fix_noop_streak": entry.ci_fix_noop_streak,
692
+ },
693
+ )
694
+ continue
588
695
  fix = dispatch_ci_fix(entry, fix_board, config, checks_summary=ev.message)
589
696
  if fix is not None:
590
697
  click.echo(
@@ -594,7 +594,10 @@ def retry_on_locked(
594
594
  #
595
595
  # #2987: bumped 6 -> 7 for the two `portal_sync_state.relayed_answer_
596
596
  # watermark_*` columns appended to `_migrate_add_columns` below.
597
- _DB_SCHEMA_VERSION = 7
597
+ #
598
+ # #3011: bumped 7 -> 8 for the two `merge_queue.ci_fix_head_sha`/
599
+ # `ci_fix_noop_streak` columns appended to `_migrate_add_columns` below.
600
+ _DB_SCHEMA_VERSION = 8
598
601
 
599
602
 
600
603
  def _read_schema_version(conn: sqlite3.Connection) -> int:
@@ -797,7 +800,9 @@ _SCHEMA_SQL = """
797
800
  ci_flaky_reruns INTEGER NOT NULL DEFAULT 0,
798
801
  ci_flaky_pending TEXT NOT NULL DEFAULT '',
799
802
  ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0,
800
- ci_fix_dispatches INTEGER NOT NULL DEFAULT 0
803
+ ci_fix_dispatches INTEGER NOT NULL DEFAULT 0,
804
+ ci_fix_head_sha TEXT NOT NULL DEFAULT '',
805
+ ci_fix_noop_streak INTEGER NOT NULL DEFAULT 0
801
806
  );
802
807
 
803
808
  CREATE TABLE IF NOT EXISTS plans (
@@ -1719,6 +1724,23 @@ _MIGRATE_ADD_COLUMNS: list[str] = [
1719
1724
  # predating this migration, same as the column's own default for a
1720
1725
  # freshly-enqueued entry.
1721
1726
  "ALTER TABLE merge_queue ADD COLUMN ci_fix_dispatches INTEGER NOT NULL DEFAULT 0",
1727
+ # #3011: durable snapshot of `QueuedMerge.branch_head_sha` taken at the
1728
+ # moment `coord.ci_fix.dispatch_ci_fix` last dispatched a fix worker —
1729
+ # unlike `branch_head_sha` itself (recomputed from GitHub every tick,
1730
+ # never persisted), this survives to the NEXT tick so
1731
+ # `coord.ci_fix.dispatch_was_noop` can tell whether that leg actually
1732
+ # moved the branch. '' for every row predating this migration and for
1733
+ # an entry with no ci-fix dispatch currently unaccounted-for.
1734
+ "ALTER TABLE merge_queue ADD COLUMN ci_fix_head_sha TEXT NOT NULL DEFAULT ''",
1735
+ # #3011: count of CONSECUTIVE ci-fix legs that completed with the branch
1736
+ # HEAD unchanged (a worker correctly declined and pushed no commit) —
1737
+ # kept separate from `ci_fix_dispatches` so a no-op leg can be refunded
1738
+ # (doesn't count toward `MAX_CI_FIX_DISPATCHES`) while still bounding
1739
+ # how many times that can happen before escalating to HUMAN_REQUIRED
1740
+ # with a distinct "not attributable to this branch" reason — see
1741
+ # `coord.ci_fix.MAX_CI_FIX_NOOP_STREAK`. 0 for every row predating this
1742
+ # migration and for an entry that has never had a no-op ci-fix leg.
1743
+ "ALTER TABLE merge_queue ADD COLUMN ci_fix_noop_streak INTEGER NOT NULL DEFAULT 0",
1722
1744
  # #2509 review fix: the verdict consumer's own read position into
1723
1745
  # `portal_events` — see the CREATE TABLE comment above for why it
1724
1746
  # cannot reuse the shared `handled_at` column. NULL (read as
@@ -3354,6 +3354,34 @@ class QueuedMerge:
3354
3354
  # stopped the loop; resetting it on an unrelated green tick would just
3355
3355
  # reopen a budget a still-broken PR could re-exhaust forever.
3356
3356
  ci_fix_dispatches: int = 0
3357
+ # #3011: `branch_head_sha` (see the field above) captured at the moment
3358
+ # `coord.ci_fix.dispatch_ci_fix` last dispatched a fix worker for this
3359
+ # entry's confirmed-failure streak. Durable — unlike `branch_head_sha`
3360
+ # itself, which is transient/recomputed every tick — so a later tick
3361
+ # can compare "what was the branch at when we dispatched" against "what
3362
+ # is the branch NOW" and tell a genuine attempt apart from a worker
3363
+ # that pushed no commit. '' means no ci-fix dispatch is currently
3364
+ # unaccounted-for: either none has ever been dispatched for this
3365
+ # streak, or the last one was already resolved (a real attempt spent,
3366
+ # or a no-op refunded — see `coord.ci_fix.dispatch_was_noop`/
3367
+ # `refund_noop_ci_fix`). 0/'' for every row predating this column.
3368
+ ci_fix_head_sha: str = ""
3369
+ # #3011: count of CONSECUTIVE ci-fix legs that completed with the
3370
+ # branch HEAD unchanged from `ci_fix_head_sha` — i.e. a fresh worker
3371
+ # looked at this confirmed failure and correctly concluded it wasn't
3372
+ # theirs to fix, pushing no commit. Kept separate from
3373
+ # `ci_fix_dispatches`: a no-op leg is refunded there (does NOT count
3374
+ # toward `coord.ci_fix.MAX_CI_FIX_DISPATCHES`) precisely so two correct
3375
+ # declines don't masquerade as two failed genuine attempts. This
3376
+ # counter is what actually bounds the no-op case — capped at
3377
+ # `coord.ci_fix.MAX_CI_FIX_NOOP_STREAK`, at which point
3378
+ # `coord.commands.merge._dispatch_ci_fixes` escalates to
3379
+ # `HUMAN_REQUIRED` with a "not attributable to this branch" reason
3380
+ # instead of the generic retry-cap one. Reset to 0 the moment a
3381
+ # dispatch's OWN outcome shows the branch actually moved (a real
3382
+ # attempt, not a no-op) — see `dispatch_ci_fix`. 0 for every row
3383
+ # predating this column.
3384
+ ci_fix_noop_streak: int = 0
3357
3385
 
3358
3386
 
3359
3387
  class GhOps(Protocol):
@@ -3712,6 +3740,10 @@ def load_queue() -> list[QueuedMerge]:
3712
3740
  # decodes to 0 — no CI-fix dispatches spent yet, same as a fresh
3713
3741
  # entry.
3714
3742
  ci_fix_dispatches=row["ci_fix_dispatches"] or 0,
3743
+ # #3011: same NULL-to-''/0 decoding as the columns above, for
3744
+ # rows predating these migrations.
3745
+ ci_fix_head_sha=row["ci_fix_head_sha"] or "",
3746
+ ci_fix_noop_streak=row["ci_fix_noop_streak"] or 0,
3715
3747
  )
3716
3748
  for row in rows
3717
3749
  ]
@@ -3733,8 +3765,9 @@ def save_queue(items: list[QueuedMerge]) -> None:
3733
3765
  pr_number, pr_url, size, last_attempt, error, enqueued_at,
3734
3766
  assignment_type, required_gates, ci_infra_reruns,
3735
3767
  ci_stale_reruns, ci_flaky_reruns, ci_flaky_pending,
3736
- ci_unreadable_reruns, ci_fix_dispatches
3737
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
3768
+ ci_unreadable_reruns, ci_fix_dispatches,
3769
+ ci_fix_head_sha, ci_fix_noop_streak
3770
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
3738
3771
  (
3739
3772
  item.assignment_id, item.repo_name, item.repo_github,
3740
3773
  item.branch, item.target_branch, item.issue_number,
@@ -3744,6 +3777,7 @@ def save_queue(items: list[QueuedMerge]) -> None:
3744
3777
  item.ci_infra_reruns, item.ci_stale_reruns,
3745
3778
  item.ci_flaky_reruns, item.ci_flaky_pending,
3746
3779
  item.ci_unreadable_reruns, item.ci_fix_dispatches,
3780
+ item.ci_fix_head_sha, item.ci_fix_noop_streak,
3747
3781
  ),
3748
3782
  )
3749
3783