code-coordinator 0.5.203__tar.gz → 0.5.205__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 (796) hide show
  1. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/scm_version.json +2 -2
  6. code_coordinator-0.5.205/coord/ci_fix.py +209 -0
  7. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/merge.py +88 -0
  8. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/db.py +9 -1
  9. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/merge_queue.py +157 -3
  10. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/mock_author.py +102 -0
  11. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/portal_bridge.py +45 -3
  12. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/portal_sync.py +10 -5
  13. code_coordinator-0.5.205/tests/test_ci_fix.py +335 -0
  14. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_db.py +53 -0
  15. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_merge_queue.py +200 -0
  16. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_mock_author.py +88 -1
  17. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_portal_bridge.py +38 -0
  18. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_thin_client_board_audit.py +13 -0
  19. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/tests/fixtures/board_sample.json +1 -0
  20. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.claude/commands/board.md +0 -0
  21. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.claude/commands/complete-session.md +0 -0
  22. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.claude/commands/coordinator.md +0 -0
  23. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.githooks/_lib.sh +0 -0
  24. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.githooks/post-checkout +0 -0
  25. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.githooks/post-commit +0 -0
  26. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.githooks/post-merge +0 -0
  27. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/coord-ci-acceptance.yml +0 -0
  29. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/workflows/auto-release.yml +0 -0
  30. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/workflows/cargo-test.yml +0 -0
  31. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/workflows/publish.yml +0 -0
  32. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/workflows/release-tui.yml +0 -0
  33. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.github/workflows/test.yml +0 -0
  34. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/.gitignore +0 -0
  35. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/CLAUDE.md +0 -0
  36. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/GOAL.md +0 -0
  37. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/LICENSE +0 -0
  38. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/MANIFEST.in +0 -0
  39. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/README.md +0 -0
  40. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/dependency_links.txt +0 -0
  41. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/entry_points.txt +0 -0
  42. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/requires.txt +0 -0
  43. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/code_coordinator.egg-info/top_level.txt +0 -0
  44. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/__init__.py +0 -0
  45. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/_board_mapping.py +0 -0
  46. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/acceptance.py +0 -0
  47. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/acceptance_drivers.py +0 -0
  48. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agent.py +0 -0
  49. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agent_app.py +0 -0
  50. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agent_update.py +0 -0
  51. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agents/opencode/.gitignore +0 -0
  52. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agents/opencode/agents/work.md +0 -0
  53. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/agents/opencode/routing.jsonc +0 -0
  54. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/board_bool_guard.py +0 -0
  58. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/ci_github.py +0 -0
  65. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/ci_gitlab.py +0 -0
  66. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/ci_store.py +0 -0
  67. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/claim.py +0 -0
  68. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/cli.py +0 -0
  69. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/client.py +0 -0
  70. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/__init__.py +0 -0
  71. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/_common.py +0 -0
  72. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/acceptance.py +0 -0
  73. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/agent_ops.py +0 -0
  74. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/audit.py +0 -0
  75. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/chat.py +0 -0
  76. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/drive.py +0 -0
  79. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/drive_queue.py +0 -0
  80. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/gate_a.py +0 -0
  81. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/milestone.py +0 -0
  85. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/plan_followup.py +0 -0
  86. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/plans.py +0 -0
  87. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/portal.py +0 -0
  88. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/release.py +0 -0
  89. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/repo.py +0 -0
  90. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/report.py +0 -0
  91. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/review.py +0 -0
  92. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/scorecard.py +0 -0
  93. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/sessions.py +0 -0
  94. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/setup.py +0 -0
  95. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/status.py +0 -0
  96. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/config.py +0 -0
  101. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dead_end.py +0 -0
  111. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/README.md +0 -0
  112. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-agent.service +0 -0
  113. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-db-backup.service +0 -0
  114. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-db-backup.sh +0 -0
  115. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-db-backup.timer +0 -0
  116. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-drive-queue.service +0 -0
  117. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-drive-queue.timer +0 -0
  118. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-notify.service +0 -0
  119. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-notify.timer +0 -0
  120. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-release-propagate.service +0 -0
  121. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-release-propagate.timer +0 -0
  122. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-release-window.service +0 -0
  123. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-release-window.timer +0 -0
  124. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-serve.service +0 -0
  125. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-web-dist-build.service +0 -0
  126. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-web-dist-build.timer +0 -0
  127. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy/coord-web.service +0 -0
  128. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/deps.py +0 -0
  131. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/diagnose.py +0 -0
  132. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dispatch.py +0 -0
  133. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/dist_name.py +0 -0
  134. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/drive.py +0 -0
  135. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/drive_queue.py +0 -0
  136. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/drive_state.py +0 -0
  137. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/events.py +0 -0
  138. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/failure_class.py +0 -0
  139. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/filelock.py +0 -0
  140. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/fleet_config_health.py +0 -0
  141. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/forge_availability.py +0 -0
  142. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/freshness.py +0 -0
  143. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/gate_a.py +0 -0
  144. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/gate_b.py +0 -0
  145. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/gate_snapshot.py +0 -0
  146. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/gates.py +0 -0
  147. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/github_ops.py +0 -0
  148. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/goal.py +0 -0
  149. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/graph_health.py +0 -0
  150. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/__init__.py +0 -0
  151. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/aggregate.py +0 -0
  152. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/__init__.py +0 -0
  153. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/agent_install.py +0 -0
  154. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/cargo_targets.py +0 -0
  155. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/claude_binary.py +0 -0
  156. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/coord_web_ci_pin.py +0 -0
  157. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/deploy_lane_facts.py +0 -0
  158. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/disk.py +0 -0
  159. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/fleet_board.py +0 -0
  160. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  161. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/fleet_phantom.py +0 -0
  162. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/fleet_unit_drift.py +0 -0
  163. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/graph.py +0 -0
  164. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/graphify_cli.py +0 -0
  165. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/index_lock.py +0 -0
  166. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/plan_usage.py +0 -0
  167. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/repo_state.py +0 -0
  168. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/spawned_coord.py +0 -0
  169. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/timer_active.py +0 -0
  170. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/toolchain.py +0 -0
  171. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/unit_drift.py +0 -0
  172. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/unit_enablement.py +0 -0
  173. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/checks/worktrees.py +0 -0
  174. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/cli.py +0 -0
  175. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/context.py +0 -0
  176. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/fleet_snapshot.py +0 -0
  177. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/models.py +0 -0
  178. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/pypi.py +0 -0
  179. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/registry.py +0 -0
  180. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/render.py +0 -0
  181. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/health/units.py +0 -0
  182. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/hooks.py +0 -0
  183. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/housekeeping.py +0 -0
  184. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/interactive.py +0 -0
  185. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/issue_store.py +0 -0
  186. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/liveness_auditor.py +0 -0
  187. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/machine_pause.py +0 -0
  188. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/milestone_chat.py +0 -0
  189. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/milestone_dispatch.py +0 -0
  190. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/milestone_gate.py +0 -0
  191. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/milestone_order.py +0 -0
  192. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/models.py +0 -0
  193. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/network.py +0 -0
  194. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/new_issue_chat.py +0 -0
  195. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/__init__.py +0 -0
  196. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/baseline.py +0 -0
  197. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/cli.py +0 -0
  198. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/collect.py +0 -0
  199. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/digest.py +0 -0
  200. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/models.py +0 -0
  201. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/predicate.py +0 -0
  202. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/service.py +0 -0
  203. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/store.py +0 -0
  204. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notifier/transport.py +0 -0
  205. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/notify.py +0 -0
  206. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/openapi.py +0 -0
  207. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/overlap_fence.py +0 -0
  208. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/overlap_predict.py +0 -0
  209. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/parentage.py +0 -0
  210. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/parentage_github.py +0 -0
  211. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/pipeline.py +0 -0
  212. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/plan_parser.py +0 -0
  213. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/plans.py +0 -0
  214. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/platform_paths.py +0 -0
  215. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/portal_store.py +0 -0
  216. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/pr_body_lint.py +0 -0
  217. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/prereqs.py +0 -0
  218. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/progress.py +0 -0
  219. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/providers/__init__.py +0 -0
  220. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/providers/base.py +0 -0
  221. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/providers/claude.py +0 -0
  222. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/providers/claude_pty.py +0 -0
  223. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/providers/opencode.py +0 -0
  224. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/queue_diagnose.py +0 -0
  225. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/reconcile.py +0 -0
  226. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/reconcile_tick.py +0 -0
  227. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/refine_chat.py +0 -0
  228. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/release_cordon.py +0 -0
  229. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/release_propagate.py +0 -0
  230. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/release_verify.py +0 -0
  231. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/release_window.py +0 -0
  232. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/repo_edit.py +0 -0
  233. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/repo_onboard.py +0 -0
  234. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/reports.py +0 -0
  235. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/revalidate.py +0 -0
  236. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/review.py +0 -0
  237. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/scorecard.py +0 -0
  238. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/self_health.py +0 -0
  239. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/serve_app.py +0 -0
  240. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  241. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  242. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  243. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  245. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/portal-followup/SKILL.md +0 -0
  246. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  247. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  248. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/skills/update-issue/SKILL.md +0 -0
  249. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/smoke.py +0 -0
  250. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/spend_ceiling.py +0 -0
  251. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/split_work.py +0 -0
  252. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/stage_projection.py +0 -0
  253. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/state.py +0 -0
  254. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/test_author.py +0 -0
  255. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/test_chat.py +0 -0
  256. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/test_orchestrator.py +0 -0
  257. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/test_report.py +0 -0
  258. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/tui_release.py +0 -0
  259. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/usage.py +0 -0
  260. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/usage_limits.py +0 -0
  261. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/usage_rollup.py +0 -0
  262. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coord/worker_events.py +0 -0
  263. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/coordinator.example.yml +0 -0
  264. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-agent.service +0 -0
  265. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-db-backup.service +0 -0
  266. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-db-backup.sh +0 -0
  267. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-db-backup.timer +0 -0
  268. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-drive-queue.service +0 -0
  269. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-drive-queue.timer +0 -0
  270. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-notify.service +0 -0
  271. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-notify.timer +0 -0
  272. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-release-propagate.service +0 -0
  273. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-release-propagate.timer +0 -0
  274. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-release-window.service +0 -0
  275. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-release-window.timer +0 -0
  276. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-serve.service +0 -0
  277. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-web-dist-build.service +0 -0
  278. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-web-dist-build.sh +0 -0
  279. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-web-dist-build.timer +0 -0
  280. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-web-rollback.sh +0 -0
  281. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/coord-web.service +0 -0
  282. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/deploy/node-shim.sh +0 -0
  283. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  284. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ADR_COORD_WEB_CI.md +0 -0
  285. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ADR_COORD_WEB_DIST.md +0 -0
  286. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/AGENT_OPERATIONS.md +0 -0
  287. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ARCHITECTURE.md +0 -0
  288. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ARCH_SECURITY_GATES.md +0 -0
  289. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/COCKPIT.md +0 -0
  290. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/CONTROL_CENTER.md +0 -0
  291. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/COST_DISCIPLINE.md +0 -0
  292. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/CROSS_PLATFORM.md +0 -0
  293. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/CUSTOMER_PORTAL.md +0 -0
  294. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/DRIVE_QUEUE.md +0 -0
  295. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/EPHEMERAL_WORKERS.md +0 -0
  296. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/FORGE_MIGRATION.md +0 -0
  297. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/GRAPHIFY_SETUP.md +0 -0
  298. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ISSUE_GUIDANCE.md +0 -0
  299. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/MAC_MINI.md +0 -0
  300. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  301. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/NOTIFIER.md +0 -0
  302. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/OPENCODE_VERIFICATION.md +0 -0
  303. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/OPERATING_GOTCHAS.md +0 -0
  304. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/ORACLE_LOOP.md +0 -0
  305. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/PHONE_WEBAPP.md +0 -0
  306. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/PIPELINE_V2.md +0 -0
  307. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/PLATFORM_EVOLUTION.md +0 -0
  308. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/SECOND_BACKEND.md +0 -0
  309. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/STORE_SERVICE.md +0 -0
  310. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  311. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/WEB_CONTROL_CENTER.md +0 -0
  312. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/WSL_WINDOWS_WORKER.md +0 -0
  313. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/mocks/web/README.md +0 -0
  314. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/mocks/web/_tokens.css +0 -0
  315. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/mocks/web/issue-detail.html +0 -0
  316. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/mocks/web/pipeline-narrow.html +0 -0
  317. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/docs/mocks/web/pipeline-wide.html +0 -0
  318. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/graphify-out/.gitignore +0 -0
  319. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/install-agent.sh +0 -0
  320. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/pyproject.toml +0 -0
  321. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/audit_review_verdict_overrides.py +0 -0
  322. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  323. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/build-worker-image.sh +0 -0
  324. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/coordinator-machine.py +0 -0
  325. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/epic-down.sh +0 -0
  326. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/epic-up.sh +0 -0
  327. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/preflight.sh +0 -0
  328. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/provision-worker.sh +0 -0
  329. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  330. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  331. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/azure-workers/verify-github-token.sh +0 -0
  332. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/check_gh_argv_containment.py +0 -0
  333. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/codegen.py +0 -0
  334. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/coord-test-runner.sh +0 -0
  335. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/drive-batch.sh +0 -0
  336. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/gen_board_fixture.py +0 -0
  337. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/next_release_tag.py +0 -0
  338. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/run_tests_in_populated_home.sh +0 -0
  339. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/run_tests_without_gh.sh +0 -0
  340. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/smoke_437_interactive.py +0 -0
  341. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/verify_878_review_capture.py +0 -0
  342. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/verify_release_published.py +0 -0
  343. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/scripts/verify_release_wheel.py +0 -0
  344. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/setup.cfg +0 -0
  345. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/SMOKE_SET.md +0 -0
  346. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/__init__.py +0 -0
  347. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  348. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/contract.md +0 -0
  349. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/manifest.yml +0 -0
  350. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  351. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  352. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  353. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  354. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-37/conftest.py +0 -0
  355. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-37/contract.md +0 -0
  356. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-37/manifest.yml +0 -0
  357. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  358. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  359. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/contract.md +0 -0
  360. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/manifest.yml +0 -0
  361. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  362. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  363. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  364. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  365. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  366. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  367. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  368. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  369. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  370. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  371. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/contract.md +0 -0
  372. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  373. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  374. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/manifest.yml +0 -0
  375. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  376. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-51/tsconfig.json +0 -0
  377. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  378. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  379. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  380. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/contract.md +0 -0
  381. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  382. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/manifest.yml +0 -0
  383. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  384. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  385. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  386. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  387. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  388. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  389. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  390. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  391. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  392. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  393. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  394. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  395. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/conftest.py +0 -0
  396. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/board-pipeline-basic.json +0 -0
  397. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  398. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  399. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  400. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  401. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/all_pass.json +0 -0
  402. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  403. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/mixed_fail.json +0 -0
  404. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  405. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  406. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/skip.json +0 -0
  407. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/playwright/truncated.json +0 -0
  408. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  409. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  410. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  411. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  412. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  413. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  414. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  415. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  416. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_acceptance.py +0 -0
  417. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_acceptance_drivers.py +0 -0
  418. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent.py +0 -0
  419. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_api_error.py +0 -0
  420. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_app.py +0 -0
  421. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_branch_base.py +0 -0
  422. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_branch_capture.py +0 -0
  423. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_config_free_1712.py +0 -0
  424. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_deploy_units_endpoint.py +0 -0
  425. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_dirty_worktree.py +0 -0
  426. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  427. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_graph_self_heal.py +0 -0
  428. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_health_h3.py +0 -0
  429. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_idle_restart.py +0 -0
  430. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_push_failure.py +0 -0
  431. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_reap.py +0 -0
  432. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_repos_and_pull.py +0 -0
  433. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_restart_services_endpoint.py +0 -0
  434. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_skills_self_heal.py +0 -0
  435. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_startup_diagnostics.py +0 -0
  436. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_update.py +0 -0
  437. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_update_bluegreen.py +0 -0
  438. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_usage_limit.py +0 -0
  439. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_agent_zero_commit.py +0 -0
  440. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_ambient_home_isolation.py +0 -0
  441. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_approve_reject_plan.py +0 -0
  442. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_approve_usage_gate.py +0 -0
  443. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_assignment_already_recorded_daemon.py +0 -0
  444. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_audit_log.py +0 -0
  445. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_audit_outcome.py +0 -0
  446. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_audit_query.py +0 -0
  447. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_auto_loop.py +0 -0
  448. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_auto_release_publish_2035.py +0 -0
  449. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_base_checkout_restore.py +0 -0
  450. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_block_log.py +0 -0
  451. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_cap_762.py +0 -0
  452. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_fixture.py +0 -0
  453. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_read_path.py +0 -0
  454. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_service.py +0 -0
  455. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_state.py +0 -0
  456. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_board_wire.py +0 -0
  457. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_brain.py +0 -0
  458. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_branch_model.py +0 -0
  459. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_bug_intake.py +0 -0
  460. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_build_worker_image_env_update.py +0 -0
  461. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cargo_cache.py +0 -0
  462. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_check_gh_argv_containment.py +0 -0
  463. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_ci_acceptance_gate_1950.py +0 -0
  464. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_ci_gitlab.py +0 -0
  465. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_ci_parity_2091.py +0 -0
  466. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_ci_store.py +0 -0
  467. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_claim.py +0 -0
  468. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_acceptance.py +0 -0
  469. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_assign.py +0 -0
  470. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  471. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_assign_interactive_remote.py +0 -0
  472. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_assign_provider.py +0 -0
  473. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  474. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_audit.py +0 -0
  475. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_chat_continue.py +0 -0
  476. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_decide.py +0 -0
  477. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_diagnose_config_provenance.py +0 -0
  478. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_diagnose_forge_availability.py +0 -0
  479. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_diagnose_graph.py +0 -0
  480. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_diagnose_self.py +0 -0
  481. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_doctor.py +0 -0
  482. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_doctor_config_free_1801.py +0 -0
  483. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  484. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_drive.py +0 -0
  485. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_drive_queue.py +0 -0
  486. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_escalate.py +0 -0
  487. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_fix_headless_review.py +0 -0
  488. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_gate_a.py +0 -0
  489. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_install_drift.py +0 -0
  490. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_install_skills.py +0 -0
  491. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_issue_create_label.py +0 -0
  492. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_issue_reopen.py +0 -0
  493. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_merge.py +0 -0
  494. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_assign.py +0 -0
  495. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_capture.py +0 -0
  496. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_chat_add_child.py +0 -0
  497. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_dispatch.py +0 -0
  498. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_gate_b.py +0 -0
  499. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_gate_c.py +0 -0
  500. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_order.py +0 -0
  501. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  502. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_milestone_ship.py +0 -0
  503. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_network.py +0 -0
  504. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_new_issue_chat.py +0 -0
  505. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_plans.py +0 -0
  506. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_portal.py +0 -0
  507. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_pull_artifact.py +0 -0
  508. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_queue.py +0 -0
  509. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_reattach_sessions.py +0 -0
  510. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_refine_board.py +0 -0
  511. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_release_preflight.py +0 -0
  512. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_release_propagate.py +0 -0
  513. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_release_window.py +0 -0
  514. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_repo_2220.py +0 -0
  515. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_scorecard.py +0 -0
  516. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_set_review_findings.py +0 -0
  517. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_advisory_terminal.py +0 -0
  518. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_merge_queue.py +0 -0
  519. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_provider.py +0 -0
  520. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_review_finalizing.py +0 -0
  521. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_test_failed_tag.py +0 -0
  522. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_status_usage_limit.py +0 -0
  523. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_sync_comments_873.py +0 -0
  524. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_test_plan.py +0 -0
  525. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_track.py +0 -0
  526. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_tui_update.py +0 -0
  527. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cli_wait.py +0 -0
  528. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_client_base_install.py +0 -0
  529. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_comments.py +0 -0
  530. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_completion_summary.py +0 -0
  531. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config.py +0 -0
  532. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config_acceptance.py +0 -0
  533. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config_audit.py +0 -0
  534. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config_pricing.py +0 -0
  535. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  536. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_config_usage_gate.py +0 -0
  537. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_confirm_test.py +0 -0
  538. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_conflict_fix.py +0 -0
  539. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_conflict_fix_semantic.py +0 -0
  540. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_test.py +0 -0
  541. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_test_runner_baseline.py +0 -0
  542. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_test_runner_populated_home.py +0 -0
  543. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_test_runner_routing.py +0 -0
  544. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_test_runner_toolchain.py +0 -0
  545. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coord_web_sse_restart_live.py +0 -0
  546. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_coordinator_machine.py +0 -0
  547. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_cross_platform_imports.py +0 -0
  548. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dashboard.py +0 -0
  549. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dashboard_fixture.py +0 -0
  550. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dashboard_terminal.py +0 -0
  551. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dashboard_terminal_live.py +0 -0
  552. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dead_end.py +0 -0
  553. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_coord_db_backup.py +0 -0
  554. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_coord_web_dist.py +0 -0
  555. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_coord_web_rollback.py +0 -0
  556. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_drive_queue_unit.py +0 -0
  557. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_manifest.py +0 -0
  558. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_units_lane.py +0 -0
  559. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deploy_web_unit.py +0 -0
  560. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_deps.py +0 -0
  561. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_diagnose.py +0 -0
  562. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dispatch.py +0 -0
  563. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dispatch_target_validation.py +0 -0
  564. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_dist_name.py +0 -0
  565. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_done_housekeeping.py +0 -0
  566. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_drive.py +0 -0
  567. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_drive_queue.py +0 -0
  568. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_drive_state.py +0 -0
  569. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_drive_tmux.py +0 -0
  570. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_epic_up_capability_detection.py +0 -0
  571. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  572. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_epic_up_image_provenance.py +0 -0
  573. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_errors.py +0 -0
  574. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_events.py +0 -0
  575. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_failure_class.py +0 -0
  576. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_filelock.py +0 -0
  577. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  578. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_fix_of_force_override.py +0 -0
  579. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_fleet_config_health.py +0 -0
  580. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_fleet_health_probes.py +0 -0
  581. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_fleet_health_snapshot.py +0 -0
  582. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_forge_availability.py +0 -0
  583. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_freshness.py +0 -0
  584. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_gate_a.py +0 -0
  585. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_gate_b.py +0 -0
  586. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_gate_snapshot_staleness.py +0 -0
  587. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_gates.py +0 -0
  588. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  589. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_generated_types_fixture.py +0 -0
  590. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_github_ops.py +0 -0
  591. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_goal.py +0 -0
  592. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_graph_health.py +0 -0
  593. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_graph_selfheal_absent_2237.py +0 -0
  594. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_handoff.py +0 -0
  595. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_checks.py +0 -0
  596. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_cli.py +0 -0
  597. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_cli_graph.py +0 -0
  598. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_config.py +0 -0
  599. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_context.py +0 -0
  600. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_coord_web_ci_pin.py +0 -0
  601. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_deploy_lane_facts.py +0 -0
  602. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_incident_regression.py +0 -0
  603. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_pypi.py +0 -0
  604. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_registry.py +0 -0
  605. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_timer_active.py +0 -0
  606. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_toolchain.py +0 -0
  607. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_unit_drift.py +0 -0
  608. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_health_unit_enablement.py +0 -0
  609. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_hooks.py +0 -0
  610. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_human_attended_437.py +0 -0
  611. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_init.py +0 -0
  612. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_integration.py +0 -0
  613. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_briefing_echo.py +0 -0
  614. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_prefill_state.py +0 -0
  615. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_session_relaunch.py +0 -0
  616. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_test_verdict_backstop.py +0 -0
  617. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_token_attribution.py +0 -0
  618. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_interactive_worktree.py +0 -0
  619. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_issue_store_seam.py +0 -0
  620. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_liveness_auditor.py +0 -0
  621. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_liveness_notify.py +0 -0
  622. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_machine_pause.py +0 -0
  623. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_merge_verify.py +0 -0
  624. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_milestone_chat.py +0 -0
  625. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_milestone_dispatch.py +0 -0
  626. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_milestone_gate.py +0 -0
  627. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_milestone_order.py +0 -0
  628. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_milestone_seam.py +0 -0
  629. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_model_tiering.py +0 -0
  630. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_models.py +0 -0
  631. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_models_config_labels.py +0 -0
  632. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_needs_attention.py +0 -0
  633. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_network.py +0 -0
  634. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_new_issue_chat.py +0 -0
  635. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_next_release_tag.py +0 -0
  636. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_node_shim.py +0 -0
  637. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_baseline.py +0 -0
  638. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_cli.py +0 -0
  639. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_collect.py +0 -0
  640. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_config.py +0 -0
  641. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_drive_seam.py +0 -0
  642. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_isolation.py +0 -0
  643. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_predicate.py +0 -0
  644. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_quiet_hours.py +0 -0
  645. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notifier_service.py +0 -0
  646. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notify.py +0 -0
  647. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_notify_drain.py +0 -0
  648. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_openapi.py +0 -0
  649. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_operational_defaults.py +0 -0
  650. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_overlap_fence.py +0 -0
  651. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_overlap_predict.py +0 -0
  652. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_packaged_deploy_units.py +0 -0
  653. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_parentage.py +0 -0
  654. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_paste_landed.py +0 -0
  655. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_pipeline.py +0 -0
  656. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_plan_followup_approve_plan_command.py +0 -0
  657. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_plan_followup_pr_command.py +0 -0
  658. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_plan_followup_review_command.py +0 -0
  659. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_plan_only.py +0 -0
  660. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_plan_parser.py +0 -0
  661. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_platform_paths.py +0 -0
  662. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_portal_config.py +0 -0
  663. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_portal_store.py +0 -0
  664. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_portal_sync.py +0 -0
  665. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_pr_body_lint.py +0 -0
  666. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_prereqs.py +0 -0
  667. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_production_db_guard.py +0 -0
  668. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_progress.py +0 -0
  669. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_provider_seam.py +0 -0
  670. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_providers.py +0 -0
  671. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_providers_config_labels.py +0 -0
  672. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_providers_pty.py +0 -0
  673. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_quiet_hours.py +0 -0
  674. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_quiet_hours_store_2146.py +0 -0
  675. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reap_merged_sessions.py +0 -0
  676. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reap_stale_interactive_tick.py +0 -0
  677. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile.py +0 -0
  678. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_branch.py +0 -0
  679. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_completions.py +0 -0
  680. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_merges.py +0 -0
  681. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_no_agent_record.py +0 -0
  682. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_tick.py +0 -0
  683. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reconcile_usage_limit_done.py +0 -0
  684. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_refine_chat.py +0 -0
  685. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_cordon_2101.py +0 -0
  686. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  687. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_cordon_deadlock_2240.py +0 -0
  688. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_cordon_stuck_2490.py +0 -0
  689. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_propagate.py +0 -0
  690. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_unified_1242.py +0 -0
  691. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_verify.py +0 -0
  692. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_release_window.py +0 -0
  693. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_remote_auto_prune.py +0 -0
  694. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_remote_interactive_reaper.py +0 -0
  695. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_repo_edit_2220.py +0 -0
  696. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_repo_graph_fleet_2237.py +0 -0
  697. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_repo_onboard_2220.py +0 -0
  698. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_report_result_push.py +0 -0
  699. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_reports.py +0 -0
  700. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_retry.py +0 -0
  701. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_retry_advisory_1606.py +0 -0
  702. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_retry_type_1636.py +0 -0
  703. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_revalidate.py +0 -0
  704. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review.py +0 -0
  705. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_end_review_without_verdict.py +0 -0
  706. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_parse_failure_diagnostic.py +0 -0
  707. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_reaffirm.py +0 -0
  708. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_state.py +0 -0
  709. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_verdict_backstop.py +0 -0
  710. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_verdict_override_audit.py +0 -0
  711. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_verdict_relay.py +0 -0
  712. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_review_zero_commits.py +0 -0
  713. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_scoped_review_wiring.py +0 -0
  714. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_scorecard.py +0 -0
  715. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_self_health.py +0 -0
  716. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_serve.py +0 -0
  717. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_serve_app_board_trim.py +0 -0
  718. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_session.py +0 -0
  719. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_slice_issue_attribution.py +0 -0
  720. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_smoke.py +0 -0
  721. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_smoke_live_checkout_restore.py +0 -0
  722. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_smoke_workflow.py +0 -0
  723. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_spend_ceiling.py +0 -0
  724. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_spend_ceiling_coordinator.py +0 -0
  725. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_split.py +0 -0
  726. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_split_work.py +0 -0
  727. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_stage_projection.py +0 -0
  728. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_stalled_pipeline.py +0 -0
  729. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_state.py +0 -0
  730. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_state_review_findings_daemon.py +0 -0
  731. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_status_fleet_footer.py +0 -0
  732. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_stop_1567.py +0 -0
  733. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_stuck.py +0 -0
  734. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_terminal_command.py +0 -0
  735. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_author.py +0 -0
  736. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_chat.py +0 -0
  737. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_orchestrator.py +0 -0
  738. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_report.py +0 -0
  739. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_verdict_parsing.py +0 -0
  740. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_test_verdict_transcript_floor.py +0 -0
  741. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_thin_client_config_load_1080.py +0 -0
  742. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_thin_client_daemon_routing_906.py +0 -0
  743. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_tmux_host.py +0 -0
  744. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_tmux_session.py +0 -0
  745. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_transcript_floor.py +0 -0
  746. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_usage.py +0 -0
  747. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_usage_limits.py +0 -0
  748. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_usage_rollup.py +0 -0
  749. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_venv_live_install_2121.py +0 -0
  750. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_version_single_source.py +0 -0
  751. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_watch.py +0 -0
  752. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  753. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worker_events.py +0 -0
  754. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worker_image_pin_sync.py +0 -0
  755. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worker_safety.py +0 -0
  756. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worker_test_scoping.py +0 -0
  757. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worktree.py +0 -0
  758. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  759. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/Cargo.lock +0 -0
  760. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/Cargo.toml +0 -0
  761. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/cargo-config-local-quadraui.toml.example +0 -0
  762. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/audit.rs +0 -0
  763. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/chat.rs +0 -0
  764. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/data.rs +0 -0
  765. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/dialogs.rs +0 -0
  766. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/doc_tabs.rs +0 -0
  767. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/drive.rs +0 -0
  768. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/drive_queue.rs +0 -0
  769. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/escalation.rs +0 -0
  770. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/events.rs +0 -0
  771. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/fixtures.rs +0 -0
  772. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/fleet_health.rs +0 -0
  773. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/fleet_sessions.rs +0 -0
  774. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/fleet_terminals.rs +0 -0
  775. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/format.rs +0 -0
  776. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/milestone_dag.rs +0 -0
  777. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/mod.rs +0 -0
  778. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/msv.rs +0 -0
  779. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/pipeline.rs +0 -0
  780. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/plans.rs +0 -0
  781. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/render.rs +0 -0
  782. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/reports.rs +0 -0
  783. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/sessions.rs +0 -0
  784. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/settings_ui.rs +0 -0
  785. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/sidebar.rs +0 -0
  786. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/terminal.rs +0 -0
  787. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/tests.rs +0 -0
  788. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/types.rs +0 -0
  789. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/app/workspace.rs +0 -0
  790. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/bin/gtk.rs +0 -0
  791. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/commands.rs +0 -0
  792. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/lib.rs +0 -0
  793. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/main.rs +0 -0
  794. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/src/settings.rs +0 -0
  795. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/tests/acceptance.rs +0 -0
  796. {code_coordinator-0.5.203 → code_coordinator-0.5.205}/tui/tests/cli.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.203
3
+ Version: 0.5.205
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.203
3
+ Version: 0.5.205
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
@@ -46,6 +46,7 @@ coord/brain.py
46
46
  coord/branch_model.py
47
47
  coord/bug_intake.py
48
48
  coord/cargo_cache.py
49
+ coord/ci_fix.py
49
50
  coord/ci_github.py
50
51
  coord/ci_gitlab.py
51
52
  coord/ci_store.py
@@ -383,6 +384,7 @@ tests/test_build_worker_image_env_update.py
383
384
  tests/test_cargo_cache.py
384
385
  tests/test_check_gh_argv_containment.py
385
386
  tests/test_ci_acceptance_gate_1950.py
387
+ tests/test_ci_fix.py
386
388
  tests/test_ci_gitlab.py
387
389
  tests/test_ci_parity_2091.py
388
390
  tests/test_ci_store.py
@@ -40,6 +40,7 @@
40
40
  "coord/branch_model.py",
41
41
  "coord/bug_intake.py",
42
42
  "coord/cargo_cache.py",
43
+ "coord/ci_fix.py",
43
44
  "coord/ci_github.py",
44
45
  "coord/ci_gitlab.py",
45
46
  "coord/ci_store.py",
@@ -445,6 +446,7 @@
445
446
  "tests/test_cargo_cache.py",
446
447
  "tests/test_check_gh_argv_containment.py",
447
448
  "tests/test_ci_acceptance_gate_1950.py",
449
+ "tests/test_ci_fix.py",
448
450
  "tests/test_ci_gitlab.py",
449
451
  "tests/test_ci_parity_2091.py",
450
452
  "tests/test_ci_store.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.203",
2
+ "tag": "0.5.205",
3
3
  "distance": 0,
4
- "node": "gdac58130113c138d2461927553c0e5039233000e",
4
+ "node": "g464b6f72ce8e60436c28ceba3d8453892108cb88",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -0,0 +1,209 @@
1
+ """Auto-dispatch a fix worker for a CONFIRMED CI check failure at the Merge
2
+ gate (#2510).
3
+
4
+ ``coord/merge_queue.py``'s CI gate already classifies a failing check into
5
+ three shapes: a verdictless (infra) failure auto-reruns up to
6
+ ``MAX_CI_INFRA_RERUNS``; a verdicted failure gets one flake re-check up to
7
+ ``MAX_CI_FLAKY_RERUNS``; and once both budgets are exhausted/inapplicable the
8
+ failure is CONFIRMED — real, not infra, not (as far as one re-run can tell)
9
+ flaky. Both exhaustion points emit a ``"checks_failed"`` :class:`~coord.
10
+ merge_queue.MergeEvent`. Before this module existed that event did nothing
11
+ but set ``entry.error`` — the entry stayed ``PENDING`` in the merge queue
12
+ forever, invisible to any status view that only surfaces ``HUMAN_REQUIRED``
13
+ rows, with no automated path back to a fix.
14
+
15
+ Why a separate module, following ``coord/conflict_fix.py``'s lead: triggered
16
+ by a merge_queue event, not a planner proposal, so it shares little with
17
+ ``coord.dispatch``.
18
+
19
+ Unlike a merge CONFLICT (mechanical, content-preserving, handled by a
20
+ dedicated ``type="conflict-fix"`` worker whose success needs no fresh
21
+ Test/Review since the diff is unchanged), a confirmed CI failure needs a
22
+ worker that can genuinely change code — the same shape as a review
23
+ ``request-changes`` bounce. So this dispatches via
24
+ :func:`coord.auto_loop._dispatch_fix` itself (not a bespoke HTTP POST): the
25
+ new commit lands on the SAME branch/PR, and the existing generic Work→Test→
26
+ Review pipeline (already built to re-drive Test then Review for any bounced
27
+ ``WORK_LIKE_TYPES`` fix) picks the new commit up on its own — no separate
28
+ re-review wiring needed here. The merge queue's own ``branch_head_sha``/
29
+ ``branch_patch_id`` staleness check (see ``has_approved_review``) already
30
+ invalidates the stale approval once the new commit lands, so the PR
31
+ naturally cannot merge again until it clears Test + Review + CI fresh.
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import logging
37
+
38
+ import httpx
39
+
40
+ from coord.config import Config
41
+ from coord.merge_queue import QueuedMerge, _chain_work_ids
42
+ from coord.models import Assignment, Board
43
+
44
+ _log = logging.getLogger(__name__)
45
+
46
+
47
+ # #2510: bounded the same shape as MAX_CI_INFRA_RERUNS/MAX_CI_FLAKY_RERUNS —
48
+ # a couple of genuine attempts is enough to tell "this is fixable by a
49
+ # worker" from "this needs a human"; a higher cap just burns more of the
50
+ # same exhausted budget the way an unbounded conflict-fix retry would.
51
+ MAX_CI_FIX_DISPATCHES = 2
52
+
53
+ # Prefix on the dispatched fix worker's issue_title — mirrors
54
+ # `conflict_fix.SEMANTIC_FIX_TITLE_PREFIX`'s visibility purpose: the TUI
55
+ # Pipeline row and the fix briefing itself both make it obvious WHY this
56
+ # round was dispatched (a CI failure, not a review request-changes bounce).
57
+ CI_FIX_TITLE_PREFIX = "[ci-fix]"
58
+
59
+
60
+ def build_ci_fix_briefing(
61
+ *,
62
+ entry: QueuedMerge,
63
+ checks_summary: str,
64
+ attempt: int,
65
+ ) -> str:
66
+ """Assemble the CI-fix worker's briefing. Pure function — testable."""
67
+ lines: list[str] = [
68
+ f"# CI failure fix: {entry.repo_github} branch `{entry.branch}`",
69
+ "",
70
+ f"Issue #{entry.issue_number} — {entry.issue_title}",
71
+ "",
72
+ "Review already approved this PR and it reached the Merge gate, "
73
+ "where GitHub Actions CI reported a REAL failure (not infra, and "
74
+ "not resolved by one automatic re-run) on the checks below:",
75
+ "",
76
+ f" {checks_summary}",
77
+ "",
78
+ f"This is fix attempt {attempt}/{MAX_CI_FIX_DISPATCHES} for this "
79
+ "failure streak — the coordinator will escalate to a human if this "
80
+ "many attempts don't produce a green run.",
81
+ "",
82
+ "## What to do",
83
+ "",
84
+ "1. You are already on this issue's existing branch — continue on "
85
+ "it, do NOT start a fresh branch.",
86
+ "2. Reproduce the failure locally if the project's test command "
87
+ "covers it (`coord`'s Test stage already runs the same diff-scoped "
88
+ "suite CI reruns in full — a failure CI alone caught may live in a "
89
+ "suite that only runs in CI, e.g. a sealed acceptance suite).",
90
+ "3. Fix the actual regression. Do not edit the failing check's "
91
+ "workflow config to make it pass without fixing the underlying "
92
+ "issue, and do not skip/xfail the failing test unless the test "
93
+ "itself is proven wrong.",
94
+ "4. Commit and push to the SAME branch. The coordinator re-runs "
95
+ "Test, Review, and CI from scratch on the new commit — this is not "
96
+ "a force-merge shortcut.",
97
+ "",
98
+ "You will NOT use `gh` — the coordinator owns PR/issue interaction "
99
+ "and CI status reads.",
100
+ "",
101
+ f"Last merge-gate error: {entry.error or checks_summary}",
102
+ ]
103
+ return "\n".join(lines)
104
+
105
+
106
+ def _has_active_fix(board: Board, entry: QueuedMerge) -> bool:
107
+ """True when a WORK_LIKE fix for *entry*'s chain is already running or
108
+ pending — regardless of whether it was dispatched for this CI failure or
109
+ an unrelated review bounce; either way a second dispatch here would race
110
+ it onto the same branch.
111
+ """
112
+ pool = list(board.completed) + list(board.active)
113
+ chain_ids = _chain_work_ids(entry, pool)
114
+ active_ids = {
115
+ getattr(a, "assignment_id", None) for a in board.active
116
+ } - {None}
117
+ for a in pool:
118
+ aid = getattr(a, "assignment_id", None)
119
+ if aid is None or aid not in chain_ids or aid == entry.assignment_id:
120
+ continue
121
+ if aid in active_ids and getattr(a, "status", None) in ("running", "pending"):
122
+ return True
123
+ return False
124
+
125
+
126
+ def dispatch_ci_fix(
127
+ entry: QueuedMerge,
128
+ board: Board,
129
+ config: Config,
130
+ *,
131
+ checks_summary: str | None = None,
132
+ http_client: httpx.Client | None = None,
133
+ ) -> Assignment | None:
134
+ """Dispatch a fix worker for *entry*'s confirmed CI failure.
135
+
136
+ Returns the new ``Assignment``, or ``None`` when dispatch couldn't
137
+ proceed: the retry cap (:data:`MAX_CI_FIX_DISPATCHES`) is already spent,
138
+ a fix for this chain is already in flight, the original work assignment
139
+ can't be found on *board*, or the underlying ``_dispatch_fix`` call
140
+ itself declined (no capable machine, agent unreachable, …). The caller
141
+ (``coord.commands.merge._dispatch_ci_fixes``) is responsible for
142
+ promoting *entry* to ``HUMAN_REQUIRED`` when this returns ``None`` with
143
+ the retry cap exhausted, and for persisting the board/queue.
144
+
145
+ Does NOT increment ``entry.ci_fix_dispatches`` on a ``None`` return —
146
+ only a successful dispatch spends the budget, mirroring how
147
+ ``ci_infra_reruns``/``ci_flaky_reruns`` are only bumped when their
148
+ respective remedy actually fired.
149
+ """
150
+ if entry.ci_fix_dispatches >= MAX_CI_FIX_DISPATCHES:
151
+ return None
152
+ if _has_active_fix(board, entry):
153
+ return None
154
+ if entry.assignment_id is None:
155
+ return None
156
+ work = board.find_by_id(entry.assignment_id)
157
+ if work is None:
158
+ _log.warning(
159
+ "ci_fix: cannot find original work assignment %s for %s#%d — "
160
+ "no fix dispatched",
161
+ entry.assignment_id, entry.repo_name, entry.issue_number,
162
+ )
163
+ return None
164
+
165
+ summary = checks_summary or entry.error or "CI checks failed"
166
+ briefing = build_ci_fix_briefing(
167
+ entry=entry, checks_summary=summary, attempt=entry.ci_fix_dispatches + 1,
168
+ )
169
+
170
+ from coord.auto_loop import _dispatch_fix # noqa: PLC0415
171
+
172
+ fix = _dispatch_fix(
173
+ work, briefing, board, config, entry.ci_fix_dispatches + 1,
174
+ http_client=http_client,
175
+ )
176
+ if fix is None:
177
+ return None
178
+
179
+ # #2510 visibility: mark the row so the TUI/board can tell a CI-triggered
180
+ # round apart from an ordinary review-bounce fix at a glance, same
181
+ # purpose as conflict_fix's SEMANTIC_FIX_TITLE_PREFIX.
182
+ fix.issue_title = f"{CI_FIX_TITLE_PREFIX} {work.issue_title}"
183
+
184
+ entry.ci_fix_dispatches += 1
185
+
186
+ from coord.audit import record_audit # noqa: PLC0415
187
+
188
+ record_audit(
189
+ tier="operational",
190
+ category="merge",
191
+ event_type="ci_fix_dispatched",
192
+ actor="daemon",
193
+ summary=(
194
+ f"ci-fix dispatched ({entry.ci_fix_dispatches}/"
195
+ f"{MAX_CI_FIX_DISPATCHES}): {entry.repo_name}#{entry.issue_number} "
196
+ f"-> {fix.machine_name}"
197
+ ),
198
+ repo=entry.repo_name,
199
+ issue=entry.issue_number,
200
+ assignment_id=fix.assignment_id,
201
+ machine=fix.machine_name,
202
+ details={
203
+ "merge_entry_id": entry.assignment_id,
204
+ "ci_fix_dispatches": entry.ci_fix_dispatches,
205
+ "checks_summary": summary,
206
+ },
207
+ )
208
+
209
+ return fix
@@ -539,6 +539,85 @@ def _dispatch_conflict_fixes(events, config, *, dry_run: bool) -> None:
539
539
  save_board(fix_board)
540
540
 
541
541
 
542
+ def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
543
+ """#2510: classify any CONFIRMED ``checks_failed`` events and dispatch a
544
+ bounded CI-fix worker for the eligible ones, escalating to
545
+ ``HUMAN_REQUIRED`` once the retry cap (``coord.ci_fix.
546
+ MAX_CI_FIX_DISPATCHES``) is spent.
547
+
548
+ Mutates each qualifying event's ``ev.entry.state``/``ev.entry.error`` in
549
+ place — same shape as :func:`_dispatch_conflict_fixes` — so the caller's
550
+ own subsequent save-queue step picks the mutation up naturally.
551
+
552
+ ``process()`` emits a bare ``"checks_failed"`` event kind at exactly two
553
+ points, both reached only once the OTHER auto-remedies (the #1892 infra
554
+ rerun budget, the #2252 one-shot flake re-check) are exhausted or
555
+ inapplicable — i.e. both ARE the "confirmed real failure" case this leg
556
+ exists for (see ``coord.ci_fix``'s module docstring). Every other CI
557
+ outcome (``checks_pending``, ``ci_infra_rerun``, ``ci_flaky_rerun``,
558
+ ``checks_unreadable``, ``checks_stale``) is still self-healing or
559
+ mid-retry and must not be touched here.
560
+
561
+ Shared by the whole-queue path and the ``--only`` surgical path, same
562
+ reasoning as ``_dispatch_conflict_fixes``: a bare ``checks_failed`` entry
563
+ is never reprocessed by a later ``process()`` call (it only acts on
564
+ ``PENDING`` entries) so whichever caller sees the event first must also
565
+ be the one to act on it.
566
+ """
567
+ ci_events = [ev for ev in events if ev.kind == "checks_failed"]
568
+ if not ci_events or dry_run:
569
+ return
570
+
571
+ from coord.audit import record_audit # noqa: PLC0415
572
+ from coord.ci_fix import MAX_CI_FIX_DISPATCHES, dispatch_ci_fix # noqa: PLC0415
573
+ from coord.merge_queue import HUMAN_REQUIRED # noqa: PLC0415
574
+ from coord.state import load_board, save_board # noqa: PLC0415
575
+
576
+ fix_board = load_board()
577
+ if fix_board is None:
578
+ return
579
+ dispatched_any = False
580
+ for ev in ci_events:
581
+ entry = ev.entry
582
+ fix = dispatch_ci_fix(entry, fix_board, config, checks_summary=ev.message)
583
+ if fix is not None:
584
+ click.echo(
585
+ f" {entry.repo_name} #{entry.issue_number}: "
586
+ f"ci-fix dispatched to {fix.machine_name} "
587
+ f"({entry.ci_fix_dispatches}/{MAX_CI_FIX_DISPATCHES})"
588
+ )
589
+ dispatched_any = True
590
+ continue
591
+ if entry.ci_fix_dispatches >= MAX_CI_FIX_DISPATCHES:
592
+ entry.state = HUMAN_REQUIRED
593
+ click.echo(
594
+ f" {entry.repo_name} #{entry.issue_number}: "
595
+ f"ci-fix retry cap hit ({entry.ci_fix_dispatches}/"
596
+ f"{MAX_CI_FIX_DISPATCHES}) — manual resolution required"
597
+ )
598
+ record_audit(
599
+ tier="operational",
600
+ category="merge",
601
+ event_type="ci_fix_human_required",
602
+ actor="daemon",
603
+ summary=(
604
+ f"ci-fix retry cap hit: {entry.repo_name}#"
605
+ f"{entry.issue_number} — manual resolution required"
606
+ ),
607
+ repo=entry.repo_name,
608
+ issue=entry.issue_number,
609
+ assignment_id=entry.assignment_id,
610
+ details={"reason": "ci_fix_retry_cap", "error": entry.error},
611
+ )
612
+ dispatched_any = True # the HUMAN_REQUIRED mutation needs saving
613
+ # else: budget remains but dispatch declined for another reason (no
614
+ # machine, an unrelated fix already in flight, agent unreachable) —
615
+ # leave the entry PENDING for the next tick to retry, exactly like a
616
+ # declined conflict-fix dispatch does.
617
+ if dispatched_any:
618
+ save_board(fix_board)
619
+
620
+
542
621
  @click.command(
543
622
  "verify-merge",
544
623
  help=(
@@ -1927,6 +2006,10 @@ def merge(
1927
2006
  # before the save below so a retry-cap/non-rebaseable HUMAN_REQUIRED
1928
2007
  # mutation on only_entry.state is persisted, not lost.
1929
2008
  _dispatch_conflict_fixes(events_only, cfg_only, dry_run=dry_run)
2009
+ # #2510: same reasoning, for a CONFIRMED checks_failed event — dispatch
2010
+ # a bounded ci-fix worker or escalate to HUMAN_REQUIRED before the
2011
+ # save below, so the mutation on only_entry.state is persisted too.
2012
+ _dispatch_ci_fixes(events_only, cfg_only, dry_run=dry_run)
1930
2013
  # #2246: `--only` merges one entry, but the branch it just moved is
1931
2014
  # shared — every OTHER queued PR based on it may have become
1932
2015
  # CONFLICTING a second ago. This is the drive-queue's path (`coord
@@ -2251,6 +2334,11 @@ def merge(
2251
2334
  # review, so the --only path below can share it).
2252
2335
  _dispatch_conflict_fixes(events, cfg, dry_run=dry_run)
2253
2336
 
2337
+ # #2510: classify any CONFIRMED checks_failed events and dispatch a
2338
+ # bounded ci-fix worker for the eligible ones, escalating to
2339
+ # HUMAN_REQUIRED once the retry cap is spent.
2340
+ _dispatch_ci_fixes(events, cfg, dry_run=dry_run)
2341
+
2254
2342
  # #2246: whatever just landed may have invalidated its siblings — ask
2255
2343
  # GitHub now, while the merge that caused it is still the obvious
2256
2344
  # explanation, rather than letting the next drive attempt discover it as
@@ -192,7 +192,8 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
192
192
  ci_stale_reruns INTEGER NOT NULL DEFAULT 0,
193
193
  ci_flaky_reruns INTEGER NOT NULL DEFAULT 0,
194
194
  ci_flaky_pending TEXT NOT NULL DEFAULT '',
195
- ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0
195
+ ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0,
196
+ ci_fix_dispatches INTEGER NOT NULL DEFAULT 0
196
197
  );
197
198
 
198
199
  CREATE TABLE IF NOT EXISTS plans (
@@ -934,6 +935,13 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
934
935
  # NULL for a hand dispatch, a coordinator/brain-proposed dispatch,
935
936
  # and every row predating this column.
936
937
  "ALTER TABLE assignments ADD COLUMN dispatched_by_assignment_id TEXT",
938
+ # #2510: count of `coord.ci_fix.dispatch_ci_fix` fix-worker dispatches
939
+ # issued for this entry's CURRENT confirmed (non-infra, non-first-
940
+ # flake) `checks_failed` streak — see `QueuedMerge.ci_fix_dispatches`'s
941
+ # docstring and `coord.ci_fix.MAX_CI_FIX_DISPATCHES`. 0 for every row
942
+ # predating this migration, same as the column's own default for a
943
+ # freshly-enqueued entry.
944
+ "ALTER TABLE merge_queue ADD COLUMN ci_fix_dispatches INTEGER NOT NULL DEFAULT 0",
937
945
  ]
938
946
  for sql in migrations:
939
947
  try:
@@ -2524,6 +2524,29 @@ class QueuedMerge:
2524
2524
  # any of the other three ("what did CI say?"). 0 for every entry that
2525
2525
  # has never hit a fetch failure, and for rows predating this column.
2526
2526
  ci_unreadable_reruns: int = 0
2527
+ # #2510: count of `type="ci-fix"`-shaped fix-worker dispatches the
2528
+ # coordinator has issued for this entry's confirmed (non-infra,
2529
+ # non-first-flake) `checks_failed` streak — capped at
2530
+ # `coord.ci_fix.MAX_CI_FIX_DISPATCHES`. A CONFIRMED failure (see
2531
+ # `process()`'s `msg = f"checks failed: {summary}"` block, reached only
2532
+ # once the infra/flaky retry budgets above are exhausted or
2533
+ # inapplicable) used to just leave the entry `PENDING` forever with no
2534
+ # path back to a fix — this is the durable ceiling that lets
2535
+ # `coord.commands.merge._dispatch_ci_fixes` dispatch a bounded number of
2536
+ # fix attempts before giving up and promoting the entry to
2537
+ # `HUMAN_REQUIRED`, mirroring how `ci_infra_reruns`/`ci_flaky_reruns`
2538
+ # bound their own auto-remedies. 0 for every entry that has never hit a
2539
+ # confirmed CI failure, and for rows predating this column. Unlike the
2540
+ # rerun counters above (which reset once CI resolves cleanly — see the
2541
+ # "genuinely resolved" reset block later in `process()`), this one is
2542
+ # intentionally NOT auto-reset there: a fix dispatch's payoff is a FUTURE
2543
+ # green run on a NEW commit, which as a side effect also resets
2544
+ # ci_infra_reruns/ci_flaky_reruns/ci_unreadable_reruns — so by the time
2545
+ # this entry could reach that reset block again, the fix either worked
2546
+ # (merge proceeds, entry leaves the queue) or the retry budget is what
2547
+ # stopped the loop; resetting it on an unrelated green tick would just
2548
+ # reopen a budget a still-broken PR could re-exhaust forever.
2549
+ ci_fix_dispatches: int = 0
2527
2550
 
2528
2551
 
2529
2552
  class GhOps(Protocol):
@@ -2848,6 +2871,10 @@ def load_queue() -> list[QueuedMerge]:
2848
2871
  # #2347: same NULL-to-0 decoding as ci_infra_reruns above, for
2849
2872
  # rows predating this column.
2850
2873
  ci_unreadable_reruns=row["ci_unreadable_reruns"] or 0,
2874
+ # #2510: column added via migration; NULL (pre-migration rows)
2875
+ # decodes to 0 — no CI-fix dispatches spent yet, same as a fresh
2876
+ # entry.
2877
+ ci_fix_dispatches=row["ci_fix_dispatches"] or 0,
2851
2878
  )
2852
2879
  for row in rows
2853
2880
  ]
@@ -2866,8 +2893,8 @@ def save_queue(items: list[QueuedMerge]) -> None:
2866
2893
  pr_number, pr_url, size, last_attempt, error, enqueued_at,
2867
2894
  assignment_type, required_gates, ci_infra_reruns,
2868
2895
  ci_stale_reruns, ci_flaky_reruns, ci_flaky_pending,
2869
- ci_unreadable_reruns
2870
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
2896
+ ci_unreadable_reruns, ci_fix_dispatches
2897
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
2871
2898
  (
2872
2899
  item.assignment_id, item.repo_name, item.repo_github,
2873
2900
  item.branch, item.target_branch, item.issue_number,
@@ -2876,7 +2903,7 @@ def save_queue(items: list[QueuedMerge]) -> None:
2876
2903
  item.assignment_type, json.dumps(list(item.required_gates or [])),
2877
2904
  item.ci_infra_reruns, item.ci_stale_reruns,
2878
2905
  item.ci_flaky_reruns, item.ci_flaky_pending,
2879
- item.ci_unreadable_reruns,
2906
+ item.ci_unreadable_reruns, item.ci_fix_dispatches,
2880
2907
  ),
2881
2908
  )
2882
2909
 
@@ -4981,6 +5008,119 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
4981
5008
  return MergeEvent(entry, event_type, msg)
4982
5009
 
4983
5010
 
5011
+ def _maybe_push_design_round(
5012
+ entry: QueuedMerge, config, gh_ops: GhOps
5013
+ ) -> "MergeEvent | None":
5014
+ """PDR-3 (#2508): right after a `type="mock-author"` (Gate A) PR has
5015
+ actually merged into ``entry.target_branch``, push its rendered mock
5016
+ bundle + contract to the portal as a design round — the epic-#2506
5017
+ bridge's third leg, wiring PDR-1's link (``coord portal link``,
5018
+ #2507) and PDR-2's upload route (coord-portal#120) into the one signal
5019
+ ``coord/merge_queue.py`` already fires for any assignment type: a real
5020
+ merge.
5021
+
5022
+ Returns ``None`` for every "nothing to do" reason — not a `mock-author`
5023
+ entry, no ``portal:`` block configured, the tracking issue isn't under
5024
+ a milestone, or (the common case pre-#2508) the milestone has no portal
5025
+ link on file. That last one is the fail-open posture
5026
+ ``coord.portal_bridge``'s module docstring already states for the rest
5027
+ of this bridge: "a portal outage must never block a merge or a
5028
+ dispatch" applies just as much to "there's simply no portal submission
5029
+ for this milestone yet" — until an operator runs ``coord portal link``,
5030
+ this is silently, correctly, a no-op. Every other failure (can't fetch
5031
+ the tracking issue, can't collect the bundle, upload/enqueue rejected)
5032
+ degrades to a ``design_round_push_failed`` event rather than raising —
5033
+ called from ``process()`` inside its own try/except, same discipline as
5034
+ :func:`_maybe_clear_expected_red` right above it, but belt-and-braces
5035
+ here too since this reaches out to two different externals (GitHub's
5036
+ Contents API and the portal itself).
5037
+ """
5038
+ if entry.assignment_type != "mock-author":
5039
+ return None
5040
+ portal_cfg = getattr(config, "portal", None)
5041
+ if portal_cfg is None or not portal_cfg.enabled:
5042
+ return None
5043
+
5044
+ # #1467-style optional probe: `get_issue` isn't part of the GhOps
5045
+ # Protocol proper (most stubs in tests never need it), so a stub that
5046
+ # doesn't implement it degrades to "nothing to do" rather than an
5047
+ # AttributeError — mirrors `branch_has_merge_commit`'s optional-probe
5048
+ # pattern used for the rebase→squash fallback above.
5049
+ get_issue = getattr(gh_ops, "get_issue", None)
5050
+ if get_issue is None:
5051
+ return None
5052
+ try:
5053
+ issue_data = get_issue(entry.repo_github, entry.issue_number)
5054
+ except Exception as e: # noqa: BLE001 — best-effort, see docstring
5055
+ return MergeEvent(
5056
+ entry, "design_round_push_failed",
5057
+ f"could not fetch tracking issue #{entry.issue_number}: {e}",
5058
+ )
5059
+ milestone = (issue_data or {}).get("milestone") or {}
5060
+ milestone_number = milestone.get("number")
5061
+ if milestone_number is None:
5062
+ # A "mock-author" entry not scoped to a milestone at all (shouldn't
5063
+ # happen via `coord acceptance mock`, which always resolves one —
5064
+ # but this hook must survive a hand-dispatched entry that skips it).
5065
+ return None
5066
+
5067
+ from coord import portal_store # noqa: PLC0415
5068
+
5069
+ link = portal_store.get_milestone_link(
5070
+ repo_name=entry.repo_name, milestone_number=milestone_number
5071
+ )
5072
+ if link is None:
5073
+ # PDR-1: no `coord portal link` recorded for this milestone yet —
5074
+ # the whole point of the fail-open posture (see docstring above).
5075
+ return None
5076
+
5077
+ from coord.mock_author import build_design_round, collect_mock_bundle_files # noqa: PLC0415
5078
+ from coord.portal_bridge import PortalBridgeError, client_from_config # noqa: PLC0415
5079
+ from coord.portal_sync import PortalSyncError, enqueue_design_round # noqa: PLC0415
5080
+
5081
+ client = client_from_config(portal_cfg)
5082
+ if client is None:
5083
+ return None
5084
+
5085
+ try:
5086
+ files = collect_mock_bundle_files(
5087
+ entry.repo_github, milestone_number, entry.target_branch
5088
+ )
5089
+ except Exception as e: # noqa: BLE001 — best-effort, see docstring
5090
+ return MergeEvent(
5091
+ entry, "design_round_push_failed",
5092
+ f"could not collect mock bundle: {e}",
5093
+ )
5094
+ if not files:
5095
+ return MergeEvent(
5096
+ entry, "design_round_push_skipped",
5097
+ f"no rendered mock bundle found on {entry.target_branch} for "
5098
+ f"ms-{milestone_number} — nothing to push",
5099
+ )
5100
+
5101
+ try:
5102
+ bundle_key = client.upload_bundle(link.submission_id, files)
5103
+ except PortalBridgeError as e:
5104
+ return MergeEvent(entry, "design_round_push_failed", f"bundle upload failed: {e}")
5105
+
5106
+ design_round = build_design_round(
5107
+ milestone_title=milestone.get("title") or f"ms-{milestone_number}",
5108
+ tracking_issue_title=issue_data.get("title") or "",
5109
+ tracking_issue_body=issue_data.get("body") or "",
5110
+ bundle_key=bundle_key,
5111
+ )
5112
+ try:
5113
+ row = enqueue_design_round(link.submission_id, design_round)
5114
+ except PortalSyncError as e:
5115
+ return MergeEvent(entry, "design_round_push_failed", f"enqueue failed: {e}")
5116
+
5117
+ return MergeEvent(
5118
+ entry, "design_round_queued",
5119
+ f"queued design round for portal submission {link.submission_id} "
5120
+ f"(seq={row.seq}, bundle_key={bundle_key})",
5121
+ )
5122
+
5123
+
4984
5124
  def process(
4985
5125
  items: list[QueuedMerge],
4986
5126
  gh_ops: GhOps,
@@ -6205,6 +6345,20 @@ def process(
6205
6345
  clear_event = MergeEvent(entry, "expected_red_clear_failed", str(e))
6206
6346
  if clear_event is not None:
6207
6347
  events.append(clear_event)
6348
+ # PDR-3 (#2508): a merged Gate-A (`type="mock-author"`)
6349
+ # branch auto-pushes a design round to the portal, if (and
6350
+ # only if) its milestone has a portal link on file. Best
6351
+ # effort, same as the expected_red clear above — a portal
6352
+ # outage, or simply no `coord portal link` recorded, must
6353
+ # never undo a real merge.
6354
+ try:
6355
+ design_round_event = _maybe_push_design_round(entry, config, gh_ops)
6356
+ except Exception as e: # noqa: BLE001 — bookkeeping, never undoes a real merge
6357
+ design_round_event = MergeEvent(
6358
+ entry, "design_round_push_failed", str(e)
6359
+ )
6360
+ if design_round_event is not None:
6361
+ events.append(design_round_event)
6208
6362
  continue
6209
6363
  entry.state = CONFLICT
6210
6364
  entry.error = msg