code-coordinator 0.5.245__tar.gz → 0.5.246__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 (865) hide show
  1. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/workflows/test.yml +11 -0
  2. code_coordinator-0.5.246/CLAUDE.md +222 -0
  3. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/PKG-INFO +1 -1
  4. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/PKG-INFO +1 -1
  5. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/SOURCES.txt +7 -0
  6. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/scm_file_list.json +7 -0
  7. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/scm_version.json +2 -2
  8. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agent.py +26 -4
  9. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/audit.py +1 -2
  10. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/auto_loop.py +2 -2
  11. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/board_bool_guard.py +9 -7
  12. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/board_schema.py +7 -1
  13. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/cli.py +6 -2
  14. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/merge.py +30 -9
  15. code_coordinator-0.5.246/coord/commands/pr.py +364 -0
  16. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/setup.py +7 -0
  17. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/config.py +83 -7
  18. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/conflict_fix.py +56 -20
  19. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dao.py +13 -0
  20. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dashboard/server.py +6 -4
  21. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/db.py +143 -45
  22. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/github_ops.py +262 -11
  23. code_coordinator-0.5.246/coord/github_throttle.py +255 -0
  24. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/housekeeping.py +7 -5
  25. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/merge_queue.py +425 -88
  26. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notify.py +76 -2
  27. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/reconcile.py +104 -20
  28. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/reports.py +42 -8
  29. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/serve_app.py +126 -13
  30. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/sql.py +121 -0
  31. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/stage_projection.py +31 -2
  32. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/state.py +90 -46
  33. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/usage_rollup.py +8 -1
  34. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ARCHITECTURE.md +5 -2
  35. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/COST_DISCIPLINE.md +39 -0
  36. code_coordinator-0.5.246/docs/OPERATOR_GUIDES.md +66 -0
  37. code_coordinator-0.5.246/scripts/codegen.py +1290 -0
  38. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/gen_board_fixture.py +5 -4
  39. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/conftest.py +130 -0
  40. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_fixture.py +29 -12
  41. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_merge.py +107 -2
  42. code_coordinator-0.5.246/tests/test_cli_pr.py +431 -0
  43. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config.py +54 -0
  44. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_conflict_fix.py +207 -1
  45. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_db.py +3 -1
  46. code_coordinator-0.5.246/tests/test_generated_rust_fixture.py +217 -0
  47. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_github_ops.py +329 -0
  48. code_coordinator-0.5.246/tests/test_github_throttle.py +188 -0
  49. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_merge_queue.py +531 -0
  50. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_platform_paths.py +98 -0
  51. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile.py +128 -0
  52. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_completions.py +42 -3
  53. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_merges.py +1 -1
  54. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reports.py +95 -0
  55. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_serve.py +169 -0
  56. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_sql_dialect.py +309 -3
  57. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_stage_projection.py +39 -0
  58. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_state.py +189 -0
  59. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_usage_rollup.py +44 -6
  60. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/data.rs +56 -0
  61. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/doc_tabs.rs +6 -0
  62. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/fixtures.rs +32 -0
  63. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/milestone_dag.rs +32 -0
  64. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/pipeline.rs +86 -1
  65. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/reports.rs +4 -0
  66. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/tests.rs +2687 -0
  67. code_coordinator-0.5.246/tui/src/app/types/generated.rs +740 -0
  68. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/types.rs +16 -451
  69. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/workspace.rs +2 -0
  70. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/tests/fixtures/board_sample.json +3 -0
  71. code_coordinator-0.5.245/CLAUDE.md +0 -304
  72. code_coordinator-0.5.245/scripts/codegen.py +0 -358
  73. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.claude/commands/board.md +0 -0
  74. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.claude/commands/complete-session.md +0 -0
  75. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.claude/commands/coordinator.md +0 -0
  76. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.githooks/_lib.sh +0 -0
  77. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.githooks/post-checkout +0 -0
  78. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.githooks/post-commit +0 -0
  79. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.githooks/post-merge +0 -0
  80. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  81. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/coord-ci-acceptance.yml +0 -0
  82. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/workflows/auto-release.yml +0 -0
  83. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/workflows/cargo-test.yml +0 -0
  84. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/workflows/publish.yml +0 -0
  85. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.github/workflows/release-tui.yml +0 -0
  86. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/.gitignore +0 -0
  87. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/GOAL.md +0 -0
  88. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/LICENSE +0 -0
  89. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/MANIFEST.in +0 -0
  90. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/README.md +0 -0
  91. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/dependency_links.txt +0 -0
  92. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/entry_points.txt +0 -0
  93. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/requires.txt +0 -0
  94. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/code_coordinator.egg-info/top_level.txt +0 -0
  95. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/__init__.py +0 -0
  96. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/_board_mapping.py +0 -0
  97. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/acceptance.py +0 -0
  98. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/acceptance_drivers.py +0 -0
  99. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agent_app.py +0 -0
  100. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agent_update.py +0 -0
  101. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agents/opencode/.gitignore +0 -0
  102. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agents/opencode/agents/work.md +0 -0
  103. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/agents/opencode/routing.jsonc +0 -0
  104. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/approved_work.py +0 -0
  105. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/block_log.py +0 -0
  106. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/board_service.py +0 -0
  107. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/board_wire.py +0 -0
  108. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/brain.py +0 -0
  109. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/branch_model.py +0 -0
  110. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/bug_intake.py +0 -0
  111. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/cargo_cache.py +0 -0
  112. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/ci_fix.py +0 -0
  113. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/ci_github.py +0 -0
  114. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/ci_gitlab.py +0 -0
  115. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/ci_store.py +0 -0
  116. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/claim.py +0 -0
  117. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/client.py +0 -0
  118. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/__init__.py +0 -0
  119. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/_common.py +0 -0
  120. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/acceptance.py +0 -0
  121. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/agent_ops.py +0 -0
  122. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/audit.py +0 -0
  123. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/chat.py +0 -0
  124. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/dispatch.py +0 -0
  125. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/dispatch_workers.py +0 -0
  126. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/drive.py +0 -0
  127. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/drive_queue.py +0 -0
  128. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/gate_a.py +0 -0
  129. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/gates.py +0 -0
  130. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/issues.py +0 -0
  131. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/lifecycle.py +0 -0
  132. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/milestone.py +0 -0
  133. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/plan_followup.py +0 -0
  134. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/plans.py +0 -0
  135. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/portal.py +0 -0
  136. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/release.py +0 -0
  137. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/repo.py +0 -0
  138. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/report.py +0 -0
  139. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/review.py +0 -0
  140. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/scorecard.py +0 -0
  141. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/sessions.py +0 -0
  142. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/status.py +0 -0
  143. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/terminal.py +0 -0
  144. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/test_gate.py +0 -0
  145. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/commands/tui.py +0 -0
  146. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/comments.py +0 -0
  147. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/config_reload.py +0 -0
  148. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/confirm_test.py +0 -0
  149. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dashboard/__init__.py +0 -0
  150. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dashboard/fixture.py +0 -0
  151. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dashboard/index.html +0 -0
  152. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dashboard/terminal.py +0 -0
  153. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dead_end.py +0 -0
  154. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/decomposition_chat.py +0 -0
  155. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/README.md +0 -0
  156. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-agent.service +0 -0
  157. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-db-backup.service +0 -0
  158. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-db-backup.sh +0 -0
  159. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-db-backup.timer +0 -0
  160. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-drive-queue.service +0 -0
  161. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-drive-queue.timer +0 -0
  162. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-failure-notify.service +0 -0
  163. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-fleet-watchdog.service +0 -0
  164. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  165. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-notify.service +0 -0
  166. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-notify.timer +0 -0
  167. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-release-propagate.service +0 -0
  168. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-release-propagate.timer +0 -0
  169. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-release-window.service +0 -0
  170. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-release-window.timer +0 -0
  171. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-serve.service +0 -0
  172. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-web-dist-build.service +0 -0
  173. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-web-dist-build.timer +0 -0
  174. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy/coord-web.service +0 -0
  175. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy_manifest.py +0 -0
  176. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deploy_units.py +0 -0
  177. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/deps.py +0 -0
  178. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/diagnose.py +0 -0
  179. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dispatch.py +0 -0
  180. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/dist_name.py +0 -0
  181. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/drive.py +0 -0
  182. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/drive_queue.py +0 -0
  183. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/drive_state.py +0 -0
  184. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/events.py +0 -0
  185. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/failure_class.py +0 -0
  186. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/filelock.py +0 -0
  187. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/fleet_config_health.py +0 -0
  188. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/forge_availability.py +0 -0
  189. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/freshness.py +0 -0
  190. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/gate_a.py +0 -0
  191. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/gate_b.py +0 -0
  192. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/gate_snapshot.py +0 -0
  193. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/gates.py +0 -0
  194. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/goal.py +0 -0
  195. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/graph_health.py +0 -0
  196. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/__init__.py +0 -0
  197. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/aggregate.py +0 -0
  198. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/__init__.py +0 -0
  199. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/agent_install.py +0 -0
  200. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/cargo_targets.py +0 -0
  201. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/claude_binary.py +0 -0
  202. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/coord_web_ci_pin.py +0 -0
  203. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/deploy_lane_facts.py +0 -0
  204. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/disk.py +0 -0
  205. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/fleet_board.py +0 -0
  206. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  207. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/fleet_phantom.py +0 -0
  208. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/fleet_unit_drift.py +0 -0
  209. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/graph.py +0 -0
  210. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/graphify_cli.py +0 -0
  211. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/index_lock.py +0 -0
  212. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/plan_usage.py +0 -0
  213. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/release_cordon.py +0 -0
  214. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/repo_state.py +0 -0
  215. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/spawned_coord.py +0 -0
  216. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/stalled_pipeline.py +0 -0
  217. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/timer_active.py +0 -0
  218. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/toolchain.py +0 -0
  219. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/unit_drift.py +0 -0
  220. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/unit_enablement.py +0 -0
  221. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/checks/worktrees.py +0 -0
  222. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/cli.py +0 -0
  223. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/context.py +0 -0
  224. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/fleet_snapshot.py +0 -0
  225. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/models.py +0 -0
  226. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/pypi.py +0 -0
  227. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/registry.py +0 -0
  228. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/render.py +0 -0
  229. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/health/units.py +0 -0
  230. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/hooks.py +0 -0
  231. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/interactive.py +0 -0
  232. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/issue_store.py +0 -0
  233. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/liveness_auditor.py +0 -0
  234. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/machine_pause.py +0 -0
  235. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/milestone_chat.py +0 -0
  236. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/milestone_dispatch.py +0 -0
  237. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/milestone_gate.py +0 -0
  238. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/milestone_order.py +0 -0
  239. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/mock_author.py +0 -0
  240. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/models.py +0 -0
  241. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/network.py +0 -0
  242. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/new_issue_chat.py +0 -0
  243. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/__init__.py +0 -0
  244. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/baseline.py +0 -0
  245. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/cli.py +0 -0
  246. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/collect.py +0 -0
  247. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/digest.py +0 -0
  248. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/models.py +0 -0
  249. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/predicate.py +0 -0
  250. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/service.py +0 -0
  251. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/store.py +0 -0
  252. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/notifier/transport.py +0 -0
  253. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/openapi.py +0 -0
  254. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/overlap_fence.py +0 -0
  255. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/overlap_predict.py +0 -0
  256. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/parentage.py +0 -0
  257. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/parentage_github.py +0 -0
  258. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/pipeline.py +0 -0
  259. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/plan_parser.py +0 -0
  260. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/plans.py +0 -0
  261. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/platform_paths.py +0 -0
  262. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/portal_bridge.py +0 -0
  263. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/portal_store.py +0 -0
  264. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/portal_sync.py +0 -0
  265. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/pr_body_lint.py +0 -0
  266. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/prereqs.py +0 -0
  267. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/progress.py +0 -0
  268. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/providers/__init__.py +0 -0
  269. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/providers/base.py +0 -0
  270. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/providers/claude.py +0 -0
  271. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/providers/claude_pty.py +0 -0
  272. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/providers/opencode.py +0 -0
  273. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/queue_diagnose.py +0 -0
  274. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/reconcile_tick.py +0 -0
  275. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/refine_chat.py +0 -0
  276. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/release_cordon.py +0 -0
  277. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/release_propagate.py +0 -0
  278. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/release_verify.py +0 -0
  279. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/release_window.py +0 -0
  280. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/repo_edit.py +0 -0
  281. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/repo_onboard.py +0 -0
  282. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/revalidate.py +0 -0
  283. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/review.py +0 -0
  284. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/scorecard.py +0 -0
  285. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/self_health.py +0 -0
  286. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  287. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  288. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  289. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  290. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  291. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/portal-followup/SKILL.md +0 -0
  292. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  293. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  294. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/skills/update-issue/SKILL.md +0 -0
  295. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/smoke.py +0 -0
  296. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/spend_ceiling.py +0 -0
  297. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/split_work.py +0 -0
  298. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/test_author.py +0 -0
  299. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/test_chat.py +0 -0
  300. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/test_orchestrator.py +0 -0
  301. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/test_report.py +0 -0
  302. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/tui_release.py +0 -0
  303. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/usage.py +0 -0
  304. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/usage_limits.py +0 -0
  305. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coord/worker_events.py +0 -0
  306. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/coordinator.example.yml +0 -0
  307. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-agent.service +0 -0
  308. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-db-backup.service +0 -0
  309. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-db-backup.sh +0 -0
  310. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-db-backup.timer +0 -0
  311. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-drive-queue.service +0 -0
  312. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-drive-queue.timer +0 -0
  313. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-failure-notify.service +0 -0
  314. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-failure-notify.sh +0 -0
  315. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-fleet-watchdog.service +0 -0
  316. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-fleet-watchdog.timer +0 -0
  317. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-notify.service +0 -0
  318. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-notify.timer +0 -0
  319. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-release-propagate.service +0 -0
  320. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-release-propagate.timer +0 -0
  321. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-release-window.service +0 -0
  322. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-release-window.timer +0 -0
  323. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-serve.service +0 -0
  324. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-web-dist-build.service +0 -0
  325. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-web-dist-build.sh +0 -0
  326. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-web-dist-build.timer +0 -0
  327. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-web-rollback.sh +0 -0
  328. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/coord-web.service +0 -0
  329. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/deploy/node-shim.sh +0 -0
  330. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  331. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ADR_COORD_WEB_CI.md +0 -0
  332. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ADR_COORD_WEB_DIST.md +0 -0
  333. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/AGENT_OPERATIONS.md +0 -0
  334. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ARCH_SECURITY_GATES.md +0 -0
  335. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/COCKPIT.md +0 -0
  336. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/CROSS_PLATFORM.md +0 -0
  338. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/CUSTOMER_FACING_APPS.md +0 -0
  339. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/CUSTOMER_PORTAL.md +0 -0
  340. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/DRIVE_QUEUE.md +0 -0
  341. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/EPHEMERAL_WORKERS.md +0 -0
  342. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/FORGE_MIGRATION.md +0 -0
  343. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/GRAPHIFY_SETUP.md +0 -0
  344. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ISSUE_GUIDANCE.md +0 -0
  345. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/MAC_MINI.md +0 -0
  346. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  347. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/NOTIFIER.md +0 -0
  348. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/OPENCODE_VERIFICATION.md +0 -0
  349. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/OPERATING_GOTCHAS.md +0 -0
  350. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/ORACLE_LOOP.md +0 -0
  351. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/PHONE_WEBAPP.md +0 -0
  352. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/PIPELINE_V2.md +0 -0
  353. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/PLATFORM_EVOLUTION.md +0 -0
  354. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/SECOND_BACKEND.md +0 -0
  355. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/STORE_SERVICE.md +0 -0
  356. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  357. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/WEB_CONTROL_CENTER.md +0 -0
  358. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/WSL_WINDOWS_WORKER.md +0 -0
  359. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/mocks/web/README.md +0 -0
  360. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/mocks/web/_tokens.css +0 -0
  361. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/mocks/web/issue-detail.html +0 -0
  362. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/mocks/web/pipeline-narrow.html +0 -0
  363. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/docs/mocks/web/pipeline-wide.html +0 -0
  364. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/graphify-out/.gitignore +0 -0
  365. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/install-agent.sh +0 -0
  366. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/pyproject.toml +0 -0
  367. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/audit_review_verdict_overrides.py +0 -0
  368. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  369. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/build-worker-image.sh +0 -0
  370. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/coordinator-machine.py +0 -0
  371. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/epic-down.sh +0 -0
  372. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/epic-up.sh +0 -0
  373. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/preflight.sh +0 -0
  374. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/provision-worker.sh +0 -0
  375. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  376. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  377. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/azure-workers/verify-github-token.sh +0 -0
  378. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/check_gh_argv_containment.py +0 -0
  379. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/coord-test-runner.sh +0 -0
  380. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/coord-venv-rollback.sh +0 -0
  381. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/drive-batch.sh +0 -0
  382. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/fleet_watchdog.py +0 -0
  383. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/gen_mock_index.py +0 -0
  384. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/next_release_tag.py +0 -0
  385. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/run_tests_in_populated_home.sh +0 -0
  386. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/run_tests_without_gh.sh +0 -0
  387. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/smoke_437_interactive.py +0 -0
  388. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/verify_878_review_capture.py +0 -0
  389. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/verify_release_published.py +0 -0
  390. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/scripts/verify_release_wheel.py +0 -0
  391. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/setup.cfg +0 -0
  392. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/SMOKE_SET.md +0 -0
  393. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/__init__.py +0 -0
  394. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  395. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/contract.md +0 -0
  396. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/manifest.yml +0 -0
  397. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  398. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  399. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  400. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  401. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-37/conftest.py +0 -0
  402. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-37/contract.md +0 -0
  403. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-37/manifest.yml +0 -0
  404. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  405. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  406. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/contract.md +0 -0
  407. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/manifest.yml +0 -0
  408. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  409. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  410. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  411. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  412. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  413. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  414. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  415. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  416. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  417. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  418. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/contract.md +0 -0
  419. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  420. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  421. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/manifest.yml +0 -0
  422. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  423. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-51/tsconfig.json +0 -0
  424. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  425. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  426. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  427. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/contract.md +0 -0
  428. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  429. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/manifest.yml +0 -0
  430. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  431. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  432. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  433. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  434. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  435. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  436. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  437. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  438. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  439. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  440. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  441. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  442. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/contract.md +0 -0
  443. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  444. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/manifest.yml +0 -0
  445. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  446. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  447. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  448. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  449. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  450. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  451. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  452. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/board-pipeline-basic.json +0 -0
  453. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  454. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  455. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  456. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  457. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/all_pass.json +0 -0
  458. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  459. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/mixed_fail.json +0 -0
  460. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  461. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  462. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/skip.json +0 -0
  463. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/playwright/truncated.json +0 -0
  464. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  465. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  466. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  467. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  468. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  469. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  470. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  471. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  472. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_acceptance.py +0 -0
  473. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_acceptance_drivers.py +0 -0
  474. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent.py +0 -0
  475. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_api_error.py +0 -0
  476. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_app.py +0 -0
  477. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_branch_base.py +0 -0
  478. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_branch_capture.py +0 -0
  479. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_config_free_1712.py +0 -0
  480. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_deploy_units_endpoint.py +0 -0
  481. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_dirty_worktree.py +0 -0
  482. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  483. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_graph_self_heal.py +0 -0
  484. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_health_h3.py +0 -0
  485. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_idle_restart.py +0 -0
  486. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_push_failure.py +0 -0
  487. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_reap.py +0 -0
  488. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_repos_and_pull.py +0 -0
  489. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_restart_services_endpoint.py +0 -0
  490. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_skills_self_heal.py +0 -0
  491. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_startup_diagnostics.py +0 -0
  492. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_update.py +0 -0
  493. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_update_bluegreen.py +0 -0
  494. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_usage_limit.py +0 -0
  495. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_agent_zero_commit.py +0 -0
  496. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ambient_home_isolation.py +0 -0
  497. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_approve_reject_plan.py +0 -0
  498. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_approve_usage_gate.py +0 -0
  499. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_approved_work_2532.py +0 -0
  500. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_assignment_already_recorded_daemon.py +0 -0
  501. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_audit_log.py +0 -0
  502. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_audit_outcome.py +0 -0
  503. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_audit_query.py +0 -0
  504. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_auto_loop.py +0 -0
  505. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_auto_release_publish_2035.py +0 -0
  506. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_base_checkout_restore.py +0 -0
  507. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_block_log.py +0 -0
  508. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_cap_762.py +0 -0
  509. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_build_worker_image_env_update.py +0 -0
  518. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cargo_cache.py +0 -0
  519. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_check_gh_argv_containment.py +0 -0
  520. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ci_fix.py +0 -0
  522. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ci_gitlab.py +0 -0
  523. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ci_parity_2091.py +0 -0
  524. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_ci_store.py +0 -0
  525. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_claim.py +0 -0
  526. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_acceptance.py +0 -0
  527. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_assign.py +0 -0
  528. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  529. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_assign_interactive_remote.py +0 -0
  530. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_assign_provider.py +0 -0
  531. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  532. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_audit.py +0 -0
  533. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_chat_continue.py +0 -0
  534. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_decide.py +0 -0
  535. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_diagnose_config_provenance.py +0 -0
  536. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_diagnose_forge_availability.py +0 -0
  537. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_diagnose_graph.py +0 -0
  538. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_diagnose_self.py +0 -0
  539. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_doctor.py +0 -0
  540. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_doctor_config_free_1801.py +0 -0
  541. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  542. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_drive.py +0 -0
  543. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_drive_queue.py +0 -0
  544. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_escalate.py +0 -0
  545. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_fix_headless_review.py +0 -0
  546. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_gate_a.py +0 -0
  547. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_install_drift.py +0 -0
  548. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_install_skills.py +0 -0
  549. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_issue_comment.py +0 -0
  550. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_issue_create_label.py +0 -0
  551. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_issue_reopen.py +0 -0
  552. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_issue_view_list.py +0 -0
  553. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_assign.py +0 -0
  554. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_capture.py +0 -0
  555. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_chat_add_child.py +0 -0
  556. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_dispatch.py +0 -0
  557. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_gate_b.py +0 -0
  558. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_gate_c.py +0 -0
  559. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_order.py +0 -0
  560. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  561. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_milestone_ship.py +0 -0
  562. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_network.py +0 -0
  563. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_new_issue_chat.py +0 -0
  564. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_plans.py +0 -0
  565. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_portal.py +0 -0
  566. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_pull_artifact.py +0 -0
  567. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_queue.py +0 -0
  568. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_reattach_sessions.py +0 -0
  569. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_refine_board.py +0 -0
  570. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_release_preflight.py +0 -0
  571. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_release_propagate.py +0 -0
  572. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_release_window.py +0 -0
  573. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_repo_2220.py +0 -0
  574. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  575. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_scorecard.py +0 -0
  576. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_set_review_findings.py +0 -0
  577. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_advisory_terminal.py +0 -0
  578. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_contested_tag.py +0 -0
  579. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_merge_queue.py +0 -0
  580. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_provider.py +0 -0
  581. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_review_finalizing.py +0 -0
  582. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_test_failed_tag.py +0 -0
  583. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_status_usage_limit.py +0 -0
  584. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_sync_comments_873.py +0 -0
  585. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_test_plan.py +0 -0
  586. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_track.py +0 -0
  587. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_tui_update.py +0 -0
  588. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cli_wait.py +0 -0
  589. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_client_base_install.py +0 -0
  590. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_commands_common.py +0 -0
  591. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_comments.py +0 -0
  592. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_completion_summary.py +0 -0
  593. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config_acceptance.py +0 -0
  594. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config_audit.py +0 -0
  595. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config_pricing.py +0 -0
  596. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  597. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_config_usage_gate.py +0 -0
  598. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_confirm_test.py +0 -0
  599. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_conflict_fix_semantic.py +0 -0
  600. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  601. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_test.py +0 -0
  602. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_test_runner_baseline.py +0 -0
  603. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_test_runner_populated_home.py +0 -0
  604. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_test_runner_routing.py +0 -0
  605. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_test_runner_toolchain.py +0 -0
  606. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_uat.py +0 -0
  607. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coord_web_sse_restart_live.py +0 -0
  608. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_coordinator_machine.py +0 -0
  609. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_cross_platform_imports.py +0 -0
  610. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dao.py +0 -0
  611. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dashboard.py +0 -0
  612. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dashboard_fixture.py +0 -0
  613. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dashboard_terminal.py +0 -0
  614. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dashboard_terminal_live.py +0 -0
  615. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dead_end.py +0 -0
  616. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_decomposition_chat.py +0 -0
  617. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_coord_db_backup.py +0 -0
  618. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_coord_web_dist.py +0 -0
  619. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_coord_web_rollback.py +0 -0
  620. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_drive_queue_unit.py +0 -0
  621. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_failure_notify_unit.py +0 -0
  622. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_manifest.py +0 -0
  623. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_notify_unit.py +0 -0
  624. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_units_lane.py +0 -0
  625. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deploy_web_unit.py +0 -0
  626. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_deps.py +0 -0
  627. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_diagnose.py +0 -0
  628. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dispatch.py +0 -0
  629. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dispatch_target_validation.py +0 -0
  630. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_dist_name.py +0 -0
  631. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_done_housekeeping.py +0 -0
  632. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive.py +0 -0
  633. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue.py +0 -0
  634. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue_blocked_rendering.py +0 -0
  635. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue_launch_argv.py +0 -0
  636. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  637. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue_roll_pending.py +0 -0
  638. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  639. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_state.py +0 -0
  640. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_drive_tmux.py +0 -0
  641. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_epic_up_capability_detection.py +0 -0
  642. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  643. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_epic_up_image_provenance.py +0 -0
  644. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_errors.py +0 -0
  645. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_events.py +0 -0
  646. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_failure_class.py +0 -0
  647. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_filelock.py +0 -0
  648. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  649. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_fix_of_force_override.py +0 -0
  650. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_fleet_config_health.py +0 -0
  651. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_fleet_health_probes.py +0 -0
  652. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_fleet_health_snapshot.py +0 -0
  653. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_fleet_watchdog.py +0 -0
  654. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_forge_availability.py +0 -0
  655. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_freshness.py +0 -0
  656. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gate_a.py +0 -0
  657. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gate_b.py +0 -0
  658. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gate_snapshot_staleness.py +0 -0
  659. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gates.py +0 -0
  660. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  661. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_gen_mock_index.py +0 -0
  662. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_generated_types_fixture.py +0 -0
  663. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_goal.py +0 -0
  664. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_graph_health.py +0 -0
  665. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_graph_selfheal_absent_2237.py +0 -0
  666. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_handoff.py +0 -0
  667. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_checks.py +0 -0
  668. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_cli.py +0 -0
  669. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_cli_graph.py +0 -0
  670. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_config.py +0 -0
  671. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_context.py +0 -0
  672. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_coord_web_ci_pin.py +0 -0
  673. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_deploy_lane_facts.py +0 -0
  674. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_fix.py +0 -0
  675. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_incident_regression.py +0 -0
  676. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_pypi.py +0 -0
  677. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_registry.py +0 -0
  678. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_release_cordon_probe.py +0 -0
  679. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_timer_active.py +0 -0
  680. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_toolchain.py +0 -0
  681. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_unit_drift.py +0 -0
  682. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_health_unit_enablement.py +0 -0
  683. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_hooks.py +0 -0
  684. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_human_attended_437.py +0 -0
  685. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_init.py +0 -0
  686. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_integration.py +0 -0
  687. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_briefing_echo.py +0 -0
  688. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_pane_log_2541.py +0 -0
  689. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_prefill_state.py +0 -0
  690. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_session_relaunch.py +0 -0
  691. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_test_verdict_backstop.py +0 -0
  692. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_token_attribution.py +0 -0
  693. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_interactive_worktree.py +0 -0
  694. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_issue_store_seam.py +0 -0
  695. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_liveness_auditor.py +0 -0
  696. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_liveness_notify.py +0 -0
  697. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_machine_pause.py +0 -0
  698. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_merge_verify.py +0 -0
  699. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_milestone_chat.py +0 -0
  700. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_milestone_dispatch.py +0 -0
  701. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_milestone_gate.py +0 -0
  702. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_milestone_order.py +0 -0
  703. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_milestone_seam.py +0 -0
  704. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_mock_author.py +0 -0
  705. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_model_tiering.py +0 -0
  706. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_models.py +0 -0
  707. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_models_config_labels.py +0 -0
  708. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_needs_attention.py +0 -0
  709. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_network.py +0 -0
  710. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_new_issue_chat.py +0 -0
  711. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_next_release_tag.py +0 -0
  712. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_node_shim.py +0 -0
  713. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_baseline.py +0 -0
  714. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_cli.py +0 -0
  715. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_collect.py +0 -0
  716. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_config.py +0 -0
  717. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_drive_seam.py +0 -0
  718. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_isolation.py +0 -0
  719. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_predicate.py +0 -0
  720. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_quiet_hours.py +0 -0
  721. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notifier_service.py +0 -0
  722. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notify.py +0 -0
  723. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_notify_drain.py +0 -0
  724. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_openapi.py +0 -0
  725. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_operational_defaults.py +0 -0
  726. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_overlap_fence.py +0 -0
  727. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_overlap_predict.py +0 -0
  728. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_packaged_deploy_units.py +0 -0
  729. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_parentage.py +0 -0
  730. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_paste_landed.py +0 -0
  731. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  732. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_pipeline.py +0 -0
  733. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_plan_followup_approve_plan_command.py +0 -0
  734. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_plan_followup_pr_command.py +0 -0
  735. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_plan_followup_review_command.py +0 -0
  736. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_plan_only.py +0 -0
  737. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_plan_parser.py +0 -0
  738. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_portal_bridge.py +0 -0
  739. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_portal_config.py +0 -0
  740. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_portal_store.py +0 -0
  741. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_portal_sync.py +0 -0
  742. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_pr_body_lint.py +0 -0
  743. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_prereqs.py +0 -0
  744. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_production_db_guard.py +0 -0
  745. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_progress.py +0 -0
  746. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_provider_seam.py +0 -0
  747. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_providers.py +0 -0
  748. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_providers_config_labels.py +0 -0
  749. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_providers_pty.py +0 -0
  750. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_quiet_hours.py +0 -0
  751. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_quiet_hours_store_2146.py +0 -0
  752. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reap_merged_sessions.py +0 -0
  753. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reap_stale_interactive_tick.py +0 -0
  754. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_branch.py +0 -0
  755. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  756. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_no_agent_record.py +0 -0
  757. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_tick.py +0 -0
  758. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_reconcile_usage_limit_done.py +0 -0
  759. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_refine_chat.py +0 -0
  760. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_cordon_2101.py +0 -0
  761. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  762. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_cordon_deadlock_2240.py +0 -0
  763. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_cordon_stuck_2490.py +0 -0
  764. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_propagate.py +0 -0
  765. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_propagate_threshold.py +0 -0
  766. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_roll_window_handoff.py +0 -0
  767. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_unified_1242.py +0 -0
  768. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_verify.py +0 -0
  769. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_release_window.py +0 -0
  770. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_remote_auto_prune.py +0 -0
  771. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_remote_interactive_reaper.py +0 -0
  772. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_repo_add.py +0 -0
  773. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_repo_edit_2220.py +0 -0
  774. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_repo_graph_fleet_2237.py +0 -0
  775. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_repo_onboard_2220.py +0 -0
  776. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_report_result_push.py +0 -0
  777. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_retry.py +0 -0
  778. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_retry_advisory_1606.py +0 -0
  779. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_retry_type_1636.py +0 -0
  780. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_revalidate.py +0 -0
  781. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review.py +0 -0
  782. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_end_review_without_verdict.py +0 -0
  783. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_parse_failure_diagnostic.py +0 -0
  784. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_reaffirm.py +0 -0
  785. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_state.py +0 -0
  786. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_verdict_backstop.py +0 -0
  787. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_verdict_override_audit.py +0 -0
  788. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_verdict_relay.py +0 -0
  789. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_review_zero_commits.py +0 -0
  790. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_scoped_review_wiring.py +0 -0
  791. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_scorecard.py +0 -0
  792. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_self_health.py +0 -0
  793. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_serve_app_board_trim.py +0 -0
  794. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_session.py +0 -0
  795. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_slice_issue_attribution.py +0 -0
  796. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_smoke.py +0 -0
  797. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_smoke_live_checkout_restore.py +0 -0
  798. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_smoke_workflow.py +0 -0
  799. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_spend_ceiling.py +0 -0
  800. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_spend_ceiling_coordinator.py +0 -0
  801. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_split.py +0 -0
  802. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_split_work.py +0 -0
  803. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_stalled_pipeline.py +0 -0
  804. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_state_review_findings_daemon.py +0 -0
  805. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_status_fleet_footer.py +0 -0
  806. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_stop_1567.py +0 -0
  807. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_store_contract.py +0 -0
  808. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_stuck.py +0 -0
  809. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_terminal_command.py +0 -0
  810. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_author.py +0 -0
  811. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_chat.py +0 -0
  812. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_orchestrator.py +0 -0
  813. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_report.py +0 -0
  814. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_verdict_parsing.py +0 -0
  815. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_test_verdict_transcript_floor.py +0 -0
  816. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_text_io_encoding_audit.py +0 -0
  817. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_thin_client_board_audit.py +0 -0
  818. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_thin_client_config_load_1080.py +0 -0
  819. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_thin_client_daemon_routing_906.py +0 -0
  820. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_tmux_host.py +0 -0
  821. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_tmux_session.py +0 -0
  822. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_transcript_floor.py +0 -0
  823. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_usage.py +0 -0
  824. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_usage_limits.py +0 -0
  825. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_venv_live_install_2121.py +0 -0
  826. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_version_single_source.py +0 -0
  827. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_watch.py +0 -0
  828. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  829. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worker_env_venv_isolation.py +0 -0
  830. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worker_events.py +0 -0
  831. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worker_image_pin_sync.py +0 -0
  832. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worker_safety.py +0 -0
  833. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worker_test_scoping.py +0 -0
  834. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worktree.py +0 -0
  835. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  836. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/Cargo.lock +0 -0
  837. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/Cargo.toml +0 -0
  838. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/cargo-config-local-quadraui.toml.example +0 -0
  839. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/approved.rs +0 -0
  840. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/audit.rs +0 -0
  841. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/chat.rs +0 -0
  842. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/dialogs.rs +0 -0
  843. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/drive.rs +0 -0
  844. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/drive_queue.rs +0 -0
  845. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/escalation.rs +0 -0
  846. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/events.rs +0 -0
  847. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/fleet_health.rs +0 -0
  848. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/fleet_sessions.rs +0 -0
  849. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/fleet_terminals.rs +0 -0
  850. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/format.rs +0 -0
  851. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/mod.rs +0 -0
  852. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/msv.rs +0 -0
  853. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/plans.rs +0 -0
  854. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/render.rs +0 -0
  855. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/sessions.rs +0 -0
  856. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/settings_ui.rs +0 -0
  857. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/sidebar.rs +0 -0
  858. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/app/terminal.rs +0 -0
  859. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/bin/gtk.rs +0 -0
  860. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/commands.rs +0 -0
  861. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/lib.rs +0 -0
  862. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/main.rs +0 -0
  863. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/src/settings.rs +0 -0
  864. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/tests/acceptance.rs +0 -0
  865. {code_coordinator-0.5.245 → code_coordinator-0.5.246}/tui/tests/cli.rs +0 -0
@@ -309,3 +309,14 @@ jobs:
309
309
  # Do not re-add a webapp job here. There is no webapp source in this repo
310
310
  # for it to run against, and a job that installs Node to build nothing is
311
311
  # how the previous `acceptance`-on-every-push waste (#2389) started.
312
+ #
313
+ # #1941: `scripts/codegen.py` also generates coord-tui's RUST wire types
314
+ # (`--rust`), and unlike the TS half above, `tui/` never left this repo —
315
+ # so that drift gate needs no separate job or `coord-web` checkout at all.
316
+ # It rides the ordinary `pytest --ignore=tests/acceptance` runs above, as
317
+ # `tests/test_generated_rust_fixture.py::
318
+ # test_committed_generated_rs_matches_generator_output`, the same way the
319
+ # TS-side `tests/test_generated_types_fixture.py` already rides them for
320
+ # the half of that check this repo can still make (the generator runs and
321
+ # covers every schema; the coord-web byte-comparison itself is that repo's
322
+ # own CI, per the paragraph above).
@@ -0,0 +1,222 @@
1
+ # code-coordinator
2
+
3
+ CLI tool + per-machine agent server that coordinates Claude Code workers across multiple machines and repos over Tailscale.
4
+
5
+ > **Scope of this file (#2195).** This is the **worker- and reviewer-facing** rulebook: it is
6
+ > loaded into every worker leg, every review leg, and every coordinator session — and re-read on
7
+ > every turn of each — so it holds only what someone *editing this repo* must act on. Operator
8
+ > runbooks live in [`docs/`](docs/), indexed by
9
+ > [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md). Settled design rationale lives in
10
+ > [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
11
+ > Keep it that way: **if a new rule does not change what a worker does, it belongs in `docs/`.**
12
+ > Operator sessions — the "dispatch, don't do" rule now lives in
13
+ > [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md); read it before hand-editing any tracked
14
+ > repo. If you're a worker or reviewer leg, that one isn't for you.
15
+
16
+ ## Current Goal — read first
17
+
18
+ **[`GOAL.md`](GOAL.md) holds the current north-star objective** — the living, cross-repo / cross-machine goal that should bias all planning, triage, and dispatch. It is meta-level (above any single issue, repo, or session) and changes as priorities evolve: read it first, plan against it, and keep it current. `coordinator.yml` is the source of truth for *topology*; `GOAL.md` is the source of truth for *intent*.
19
+
20
+ ## Codebase navigation — query the graph first
21
+
22
+ This repo ships a **graphify** knowledge graph in `graphify-out/` (`graph.json`,
23
+ `GRAPH_REPORT.md`), kept current on a best-effort basis by git hooks. For any
24
+ architecture / "where is this handled" / "what calls this" / file-relationship
25
+ question, **query the graph first** (the `graphify` skill, or the graphify CLI)
26
+ before reaching for grep/Read. Grep/Read are for exact-string or line-level
27
+ confirmation — not the first move.
28
+
29
+ **In a worktree the graph is the base checkout's, not yours.** A worktree's
30
+ `graphify-out/` is symlinked at the base checkout's graph, so it reflects the
31
+ **base checkout's HEAD, not your edits** — trust it for *"where is X handled"*,
32
+ never for *"did my change land"*. Rebuilds are deliberately disabled inside a
33
+ worktree (a rebuild there would overwrite the shared graph from a feature
34
+ branch).
35
+
36
+ **The graph drifts, and the hooks cannot prevent it** — treat them as an
37
+ optimization, not a guarantee. Check freshness instead: `GRAPH_REPORT.md`
38
+ records its source commit, and **`coord diagnose --graph`** compares that to
39
+ HEAD for every local checkout. If it reports STALE, `graphify update .` in that
40
+ checkout.
41
+
42
+ Setup, the hook mechanics, self-healing, and `coord repo doctor`:
43
+ [`docs/GRAPHIFY_SETUP.md`](docs/GRAPHIFY_SETUP.md).
44
+
45
+ ## Architecture
46
+
47
+ ```
48
+ coordinator.yml — Single config file: repos, machines, dependencies
49
+ coord CLI — User-facing commands (plan, approve, assign, status, etc.)
50
+ coord agent (per-machine) — HTTP server (port 7433) that runs claude -p
51
+ coord serve — Board daemon (port 7435): canonical board state for thin clients
52
+ coord web — Lightweight dashboard (port 7434)
53
+ claude -p — The actual worker (runs locally on each machine)
54
+ GitHub issues — Work source + message bus (via issue comments)
55
+ Tailscale — Networking between machines
56
+ ```
57
+
58
+ Full walkthrough — the agent HTTP API, where each subcommand actually runs, the auto-loop end
59
+ to end: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
60
+
61
+ ## Project Structure
62
+
63
+ Query the **graphify graph** (`graphify-out/`) for the full module map + relationships — it's authoritative and auto-updated. Key entry points: `coord/cli.py` (Click CLI + all subcommands), `coord/agent.py` (`AgentServer`: `claude -p` subprocess mgmt) + `coord/agent_app.py` / `coord/serve_app.py` (agent + board-daemon HTTP apps), `coord/brain.py` (planning), `coord/dispatch.py` (routing: POST to agents, briefings), `coord/review.py` (adversarial review), `coord/merge_queue.py` (merge sequencing) + `coord/reconcile.py` (board↔agent), `coord/state.py` (board persistence in `~/.coord/`), `coord/models.py` (dataclasses), `coord/config.py` (`coordinator.yml` parsing), `coord/dashboard/` (web dashboard + `webapp/` phone PWA). Tests: `tests/test_<module>.py` (pytest; fixtures in `conftest.py`).
64
+
65
+ ## Commands
66
+
67
+ `coord <cmd> --help` documents every command + flags. The core loop:
68
+
69
+ ```bash
70
+ coord plan # Brain proposes assignments for idle machines
71
+ coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
72
+ coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
73
+ coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
74
+ coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
75
+ coord notify # Poll agents, post completion/failure comments to GitHub
76
+ coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
77
+ coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
78
+ coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
79
+ coord retry|stop|resume <id> # Recovery; `coord done` ends the session
80
+ ```
81
+
82
+ Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier`, `coord repo add` / `coord repo doctor`.
83
+
84
+ ## Development
85
+
86
+ Always work in a virtualenv. Agent workers are spawned with the agent's own
87
+ pinned venv (`~/.coord-venv` — the live fleet install, not a build artifact)
88
+ stripped from `PATH` and `PIP_REQUIRE_VIRTUALENV=true` set (#402, hardened by
89
+ #2569), so a `pip install` run **without first creating and activating your
90
+ own venv** fails closed instead of silently resolving somewhere unintended
91
+ — and must **never** target the agent's runtime venv. Create your own venv
92
+ in the checkout (`.venv/` is gitignored):
93
+
94
+ ```bash
95
+ python3 -m venv .venv && . .venv/bin/activate && pip install -e ".[dev]"
96
+ pytest
97
+ coord plan --dry-run
98
+ coord approve --dry-run 1,2
99
+ coord assign --dry-run precision claude-coordinator 42
100
+ ```
101
+
102
+ **Never run a bare `pip install` in a worktree as a separate command from venv
103
+ creation (#2569).** The line above is ONE chained command on purpose — a worker
104
+ that ran only `pip install -e ".[dev]"`, split off from the `venv`/`activate`
105
+ step, silently landed it in the live `~/.coord-venv` and cost an 11h fleet
106
+ outage. If you re-run `pip install` later in the same session, first confirm
107
+ `echo $VIRTUAL_ENV` prints your worktree's `.venv`, not empty — never assume
108
+ activation from an earlier command carried forward.
109
+
110
+ **Workers: scope your test run to your diff, never `pytest` bare (#2169).**
111
+ The full suite exceeds Claude Code's 600s Bash ceiling on this repo and
112
+ duplicates the Test stage + CI, which both run it against your pushed SHA
113
+ regardless. Run just the file(s) that mirror what you changed — `pytest
114
+ tests/test_<module>.py` for a `coord/<module>.py` change, `cargo test` from
115
+ `tui/` scoped with a test-name filter for a `tui/**` change. To see what
116
+ the Test stage itself would run for your diff (and confirm you're not
117
+ missing a suite), `scripts/coord-test-runner.sh <worktree> --print-routing`
118
+ computes the routing without actually building or testing anything.
119
+
120
+ ## Working on `tui/` — the `quadraui` pin
121
+
122
+ **`coord-tui` pins `quadraui` to a git rev in `tui/Cargo.toml`**
123
+ (`quadraui = { git = "https://github.com/JDonaghy/quadraui", rev = "<sha>" }`, #1973) —
124
+ never edit that `rev` as a shortcut for co-development, and never build `tui/` against
125
+ whatever happens to be checked out in `~/src/quadraui`; a quadraui merge broke coord-tui's
126
+ build with zero coord-tui commits and no warning once already, which is exactly what the pin
127
+ prevents. Bumping the pin deliberately, and building against an unmerged quadraui branch/PR
128
+ without touching the pin, are both procedures — see the `tui-quadraui-workflow` skill
129
+ (`coord/skills/tui-quadraui-workflow/SKILL.md`) for the steps; install it with `coord
130
+ install-skills` if it isn't already on this machine.
131
+
132
+ ## Key Design Decisions
133
+
134
+ One line each — the reasoning behind them is in
135
+ [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
136
+
137
+ - **No API key needed.** Everything uses `claude -p`, which runs on a Max/Pro subscription via OAuth.
138
+ - **Agent servers are dumb dispatchers.** They spawn `claude -p` and track the subprocess; all intelligence is in the coordinator brain.
139
+ - **GitHub issue comments are the message bus.** Briefings, completion notices and failure reports are comments, carrying `<!-- coord:... -->` markers for machine parsing.
140
+ - **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
141
+ - **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
142
+ - **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
143
+ - **Conflict rules are inferred, not configured.** There is no `file_groups`/`exclusive_files` config and never will be. `coord drive-queue add` compares an issue's own `## Files` declaration against the **real diffs** of in-flight branches in that repo (`coord/overlap_predict.py`, #2247) and, on an overlap, chains the newcomer `--after` the incumbent. **It ORDERS, never refuses** — a false positive costs latency, a refusal costs work. Accuracy is measured, not assumed: `coord drive-queue overlap-report`.
144
+ - **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
145
+ - **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
146
+ - **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
147
+ - **Mechanical merge conflicts auto-rebase (#241).** A `type="conflict-fix"` worker rebases and resolves additive merges; semantic conflicts are left for a human.
148
+ - **Smoke tests validate on capable hardware.** `smoke_tests.capability_rules` map changed files to required machine capabilities (e.g. GTK changes → a machine with GTK).
149
+ - **Progress streaming from workers.** Workers emit `STATUS:` and `STUCK:` lines; the coordinator parses these for real-time progress in `coord status` and the dashboard.
150
+ - **The notifier tells you when NOBODY IS COMING — and nothing else (#1632).** Advisory, isolated, off by default; it is not an error channel and not a progress feed.
151
+
152
+ ## Review Prompt Assembly
153
+
154
+ The reviewer gets a prompt built from:
155
+ 1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
156
+ 2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
157
+ 3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
158
+ 4. **The diff** — `gh pr diff` of the worker's branch vs base
159
+ 5. **The issue** — title and body for intent verification
160
+
161
+ The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
162
+
163
+ ## Rules for workers
164
+
165
+ - **Only the coordinator writes docs.** Workers must **not** update README, CHANGELOG, or shared documentation files — parallel doc edits cause merge conflicts. If a briefing lists docs in `files_forbidden`, respect it. An issue whose *entire* deliverable is a doc edit is coordinator work and should never have been dispatched; say so and stop rather than editing the doc.
166
+ - **Never edit the sealed suite — which is `tests/acceptance/**` *plus every declared driver entrypoint*.** Those suites are delivered read-only / run-only; write your own unit and internal tests instead. **In this repo the sealed set includes `tui/tests/acceptance.rs`** — it is the `tui-tuidriver` driver's `entrypoint:`, and an entrypoint is sealed as a whole file, so it is sealed despite living nowhere near `tests/acceptance/`. Do not be reassured by its prologue calling itself "a seam smoke test": *any* `type="work"` diff touching a sealed path is an **unconditional, mandatory `request-changes`** (`coord/review.py`), and the additive-only carve-out applies only to `test-author` / `mock-author` dispatches. TuiDriver tests belong **in-crate** under `#[cfg(test)]` anyway — see the coord-tui section below. The authoritative list is `AcceptanceConfig.sealed_paths()` in `coord/config.py`; if a briefing's `## Files` names a sealed path, that briefing is wrong — say so and put the test somewhere else rather than following it.
167
+ - **Stay in file scope.** If you must touch a file outside your briefing, note it in your final message.
168
+ - **Commit and push before your final message** — even if the build is broken or you ran out of time. Uncommitted work is destroyed when the session ends.
169
+ - **`gh` is on the deny-list.** The coordinator owns all GitHub interaction; use plain `git`.
170
+
171
+ The operator-side counterparts to these rules — dispatch economics, what to send to a worker
172
+ versus keep in the coordinator session, and the coordinator session's own
173
+ `coord`-seam-over-`gh` rule — are in [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md).
174
+
175
+ ## Testing — black-box coverage is the acceptance bar
176
+
177
+ **Every PR that changes user-visible behavior must ship a black-box test** that drives the *running app* and asserts on its rendered output — not just unit tests on internal functions. The adversarial reviewer reads this file and **rejects behavior-changing PRs that lack one** (pure refactors / internal-only changes are exempt — say so in the PR if that applies). Build the **harness once per repo**; add **tests incrementally, one (or a few) per behavior-changing issue** — do *not* big-bang a full suite. Coverage then grows with churn and ratchets up (PRs add coverage, never remove it). Keep a thin **core smoke set** over the few most-trafficked screens so critical flows stay guarded even by unrelated changes.
178
+
179
+ > **In an oracle-loop milestone the worker does NOT author the acceptance tests**
180
+ > ([`docs/ORACLE_LOOP.md`](docs/ORACLE_LOOP.md)). An independent `test-author` agent writes them
181
+ > from a mock-first Gate-A contract, and they are delivered **read-only / run-only** (`coord
182
+ > acceptance run --issue N`). You iterate against them **in your own warm session** until green;
183
+ > the coordinator then re-runs the sealed suite **externally** against your pushed SHA as the
184
+ > trust gate. You still write your **own unit/internal tests** — and must **never** edit
185
+ > `tests/acceptance/**`. Which framework drivers actually exist is `SUPPORTED_KINDS` in
186
+ > `coord/acceptance_drivers.py`, the source of truth: a kind may be *declared* in
187
+ > `coordinator.yml` ahead of its adapter, and `run_driver()` then rejects it rather than
188
+ > silently no-opping.
189
+
190
+ **How it runs:** black-box tests are part of the repo's normal test command, so the **Test stage** executes them on a capability-matched machine — `smoke_tests.capability_rules` route platform-specific suites to capable hardware (a GTK box; a machine with a browser). Favor the automated pre-review gate; the point is to trust the suite so manual/interactive smoke (incl. driving from a phone) is rarely needed.
191
+
192
+ ### coord-tui — quadraui `TuiDriver` (harness shipped: #690 / #691)
193
+ - Drives the whole app through the real `event → handle → render` path against ratatui's headless `TestBackend` and asserts on the screen grid. `cargo test`-native, deterministic, no TTY.
194
+ - `CoordApp` implements quadraui's `ShellApp`, so use `quadraui::tui::testing::driver_with_shell(app, CoordApp::shell_config(), w, h)`. API: `find("text")` → coords, `click(x, y)`, `press`, `type_char`, `screen()`, `screen_contains(needle)`. **Locate targets with `find` — never hardcode coordinates.**
195
+ - **Reuse the existing fixtures** — `make_test_app(data: BoardData) -> CoordApp` (and `make_app_with_assignments`, `make_app_with_one_completed_issue`, …) in `tui/src/app.rs` build a full app from in-memory `BoardData`, no live daemon. Put the tests **in-crate** (`#[cfg(test)]`), **not** in `tui/tests/` — the fixtures are `#[cfg(test)]`/private and an integration-test crate can't see them.
196
+ - Limit: `TuiDriver` renders to `TestBackend`, so it does **not** parse real ANSI — terminal-protocol bugs (raw-mode, SGR mouse, the embedded `claude` PTY pane) are out of reach and still need a live smoke. A native pty + vt100 tier is tracked in quadraui#302 (unbuilt).
197
+
198
+ ### coord web (Phone Control Center)
199
+ - The phone web app lives in `coord/dashboard/webapp/` (React / Vite / TS PWA, served by `coord/dashboard/server.py`). **Build the bundle before first use** — `dist/` is gitignored: `npm install && npm run build` from `coord/dashboard/webapp/`, re-run after pulling changes to `src/`. The server falls back to the legacy `index.html` when `dist/` is absent.
200
+ - **Vitest unit tests** live in `coord/dashboard/webapp/src/components/__tests__/` (`npm test`). **Playwright E2E** specs live in `coord/dashboard/webapp/e2e/` (`npm run test:e2e`) and are the acceptance bar — browsers headless-test more cleanly than terminals, so lean on this gate rather than interactive smoke.
201
+ - **Those E2E specs are a smoke net, not a deterministic oracle** — the seeded-board fixture server (#1538) is not shipped, so they run against whatever the live fleet is doing.
202
+ - **A webapp change may not be testable at all right now.** `browser` is advertised by one machine and its probe has read UNMET since 2026-08-01 (#1678), so `dispatch_smoke` refuses to route `coord/dashboard/webapp/**` and the Test stage retries forever — check `coord doctor` before assuming otherwise.
203
+ - Full runbook — serve, phone access over Tailscale, the `/api/pipeline` surface: [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md).
204
+
205
+ ## Conventions
206
+
207
+ - Python 3.12+, type hints everywhere
208
+ - Click for CLI
209
+ - httpx for HTTP client, Starlette + uvicorn for HTTP server
210
+ - PyYAML for config
211
+ - No Anthropic SDK — all Claude interaction is via `claude -p` subprocess
212
+ - Tests use pytest with fixtures in conftest.py
213
+ - State files go in `~/.coord/` — including `coordinator.yml` (canonical: `~/.coord/coordinator.yml`; override with `$COORD_CONFIG` or `--config`; `./coordinator.yml` is a dev fallback)
214
+ - Agent server port: 7433, dashboard port: 7434, board daemon port: 7435
215
+ - GitHub issue comments carry `<!-- coord:event=... assignment=... -->` markers for machine parsing
216
+
217
+ ## Operating the fleet — operator-facing
218
+
219
+ **Not needed to work on this repo.** A worker or reviewer can stop reading here. Every operator
220
+ runbook — the pre-flight gotchas, agent installs and releases, the drive queue, the customer
221
+ portal, and the two deploy facts that bite most often — is indexed in
222
+ [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.245
3
+ Version: 0.5.246
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.245
3
+ Version: 0.5.246
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
@@ -84,6 +84,7 @@ coord/gate_b.py
84
84
  coord/gate_snapshot.py
85
85
  coord/gates.py
86
86
  coord/github_ops.py
87
+ coord/github_throttle.py
87
88
  coord/goal.py
88
89
  coord/graph_health.py
89
90
  coord/hooks.py
@@ -170,6 +171,7 @@ coord/commands/milestone.py
170
171
  coord/commands/plan_followup.py
171
172
  coord/commands/plans.py
172
173
  coord/commands/portal.py
174
+ coord/commands/pr.py
173
175
  coord/commands/release.py
174
176
  coord/commands/repo.py
175
177
  coord/commands/report.py
@@ -309,6 +311,7 @@ docs/MERGE_AUTO_DRAIN_TRUST_BAR.md
309
311
  docs/NOTIFIER.md
310
312
  docs/OPENCODE_VERIFICATION.md
311
313
  docs/OPERATING_GOTCHAS.md
314
+ docs/OPERATOR_GUIDES.md
312
315
  docs/ORACLE_LOOP.md
313
316
  docs/PHONE_WEBAPP.md
314
317
  docs/PIPELINE_V2.md
@@ -449,6 +452,7 @@ tests/test_cli_network.py
449
452
  tests/test_cli_new_issue_chat.py
450
453
  tests/test_cli_plans.py
451
454
  tests/test_cli_portal.py
455
+ tests/test_cli_pr.py
452
456
  tests/test_cli_pull_artifact.py
453
457
  tests/test_cli_queue.py
454
458
  tests/test_cli_reattach_sessions.py
@@ -548,8 +552,10 @@ tests/test_gate_snapshot_staleness.py
548
552
  tests/test_gates.py
549
553
  tests/test_gather_fleet_tmux_sessions.py
550
554
  tests/test_gen_mock_index.py
555
+ tests/test_generated_rust_fixture.py
551
556
  tests/test_generated_types_fixture.py
552
557
  tests/test_github_ops.py
558
+ tests/test_github_throttle.py
553
559
  tests/test_goal.py
554
560
  tests/test_graph_health.py
555
561
  tests/test_graph_selfheal_absent_2237.py
@@ -848,6 +854,7 @@ tui/src/app/terminal.rs
848
854
  tui/src/app/tests.rs
849
855
  tui/src/app/types.rs
850
856
  tui/src/app/workspace.rs
857
+ tui/src/app/types/generated.rs
851
858
  tui/src/bin/gtk.rs
852
859
  tui/tests/acceptance.rs
853
860
  tui/tests/cli.rs
@@ -68,6 +68,7 @@
68
68
  "coord/commands/plan_followup.py",
69
69
  "coord/commands/plans.py",
70
70
  "coord/commands/portal.py",
71
+ "coord/commands/pr.py",
71
72
  "coord/commands/release.py",
72
73
  "coord/commands/repo.py",
73
74
  "coord/commands/report.py",
@@ -133,6 +134,7 @@
133
134
  "coord/gate_snapshot.py",
134
135
  "coord/gates.py",
135
136
  "coord/github_ops.py",
137
+ "coord/github_throttle.py",
136
138
  "coord/goal.py",
137
139
  "coord/graph_health.py",
138
140
  "coord/health/__init__.py",
@@ -301,6 +303,7 @@
301
303
  "docs/NOTIFIER.md",
302
304
  "docs/OPENCODE_VERIFICATION.md",
303
305
  "docs/OPERATING_GOTCHAS.md",
306
+ "docs/OPERATOR_GUIDES.md",
304
307
  "docs/ORACLE_LOOP.md",
305
308
  "docs/PHONE_WEBAPP.md",
306
309
  "docs/PIPELINE_V2.md",
@@ -521,6 +524,7 @@
521
524
  "tests/test_cli_new_issue_chat.py",
522
525
  "tests/test_cli_plans.py",
523
526
  "tests/test_cli_portal.py",
527
+ "tests/test_cli_pr.py",
524
528
  "tests/test_cli_pull_artifact.py",
525
529
  "tests/test_cli_queue.py",
526
530
  "tests/test_cli_reattach_sessions.py",
@@ -620,8 +624,10 @@
620
624
  "tests/test_gates.py",
621
625
  "tests/test_gather_fleet_tmux_sessions.py",
622
626
  "tests/test_gen_mock_index.py",
627
+ "tests/test_generated_rust_fixture.py",
623
628
  "tests/test_generated_types_fixture.py",
624
629
  "tests/test_github_ops.py",
630
+ "tests/test_github_throttle.py",
625
631
  "tests/test_goal.py",
626
632
  "tests/test_graph_health.py",
627
633
  "tests/test_graph_selfheal_absent_2237.py",
@@ -837,6 +843,7 @@
837
843
  "tui/src/app/terminal.rs",
838
844
  "tui/src/app/tests.rs",
839
845
  "tui/src/app/types.rs",
846
+ "tui/src/app/types/generated.rs",
840
847
  "tui/src/app/workspace.rs",
841
848
  "tui/src/bin/gtk.rs",
842
849
  "tui/src/commands.rs",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.245",
2
+ "tag": "0.5.246",
3
3
  "distance": 0,
4
- "node": "g8f3ba2ceb3a5edd25c795a8fe295601edef37db5",
4
+ "node": "gd35c44e01228a2b602cf183d2fa05e0fb309ffc4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-26"
@@ -39,9 +39,29 @@ if TYPE_CHECKING:
39
39
  from coord.providers.claude_pty import ClaudePtyProvider
40
40
 
41
41
 
42
- DEFAULT_STATE_DIR = default_coord_dir()
43
42
  DEFAULT_WORKER_BINARY = "claude"
44
43
 
44
+ # DEFAULT_STATE_DIR is resolved lazily via __getattr__ below (#2781), not
45
+ # bound here at import time -- see that function's docstring.
46
+
47
+
48
+ def __getattr__(name: str) -> Path:
49
+ """PEP 562 lazy fallback for ``DEFAULT_STATE_DIR`` (#2781).
50
+
51
+ Pre-#2781 this was bound eagerly at import time, so ``$COORD_DIR`` set
52
+ *after* this module was first imported -- e.g. by a pytest fixture --
53
+ never reached it, unlike :func:`default_coord_dir` itself which is
54
+ "computed fresh on every call" by design. This only engages when the
55
+ name hasn't been bound directly in this module's namespace, so
56
+ ``monkeypatch.setattr(coord.agent, "DEFAULT_STATE_DIR", ...)`` (used
57
+ throughout the test suite) still takes priority exactly as before:
58
+ Python calls ``__getattr__`` only when normal attribute lookup fails.
59
+ """
60
+ if name == "DEFAULT_STATE_DIR":
61
+ return default_coord_dir()
62
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
63
+
64
+
45
65
  # Module logger — surfaced in the daemon / agent server logs so agent-side
46
66
  # events (e.g. #1295 "sweep would touch a live worktree", "stash copied 0
47
67
  # files") are visible without having to open the per-assignment log file.
@@ -3145,7 +3165,7 @@ def setup_interactive_worktree(
3145
3165
  :class:`OSError`: when the worktree base directory cannot be created.
3146
3166
  """
3147
3167
  if state_dir is None:
3148
- state_dir = DEFAULT_STATE_DIR
3168
+ state_dir = sys.modules[__name__].DEFAULT_STATE_DIR
3149
3169
 
3150
3170
  worktree_base = state_dir / "worktrees"
3151
3171
  worktree_path = worktree_base / assignment_id
@@ -5005,7 +5025,7 @@ class AgentServer:
5005
5025
  machine_name: str,
5006
5026
  capabilities: Iterable[str] = (),
5007
5027
  repos: Iterable[str] = (),
5008
- state_dir: Path = DEFAULT_STATE_DIR,
5028
+ state_dir: Path | None = None,
5009
5029
  worker_command: WorkerCommandBuilder | None = None,
5010
5030
  repo_paths: dict[str, str] | None = None,
5011
5031
  # RESTART-ONLY (#2299). These two are read by `_spawn` for every
@@ -5078,7 +5098,9 @@ class AgentServer:
5078
5098
  self.repo_paths = dict(repo_paths or {})
5079
5099
  self.artifact_paths: dict[str, list[str]] = dict(artifact_paths or {})
5080
5100
  self.build_commands: dict[str, str] = dict(build_commands or {})
5081
- self.state_dir = Path(state_dir)
5101
+ self.state_dir = Path(
5102
+ state_dir if state_dir is not None else sys.modules[__name__].DEFAULT_STATE_DIR
5103
+ )
5082
5104
  self.log_dir = self.state_dir / "logs"
5083
5105
  self.state_path = self.state_dir / "agent_state.json"
5084
5106
  self.worker_command = worker_command or default_worker_command
@@ -26,7 +26,6 @@ import atexit
26
26
  import json
27
27
  import logging
28
28
  import os
29
- import sqlite3
30
29
  import threading
31
30
  import time
32
31
  from typing import Any
@@ -181,7 +180,7 @@ def _record_audit_unsafe(
181
180
  # keep a trim-only failure from ever touching that counter.
182
181
  try:
183
182
  retry_on_locked(lambda: _maybe_trim(conn))
184
- except sqlite3.OperationalError as exc:
183
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
185
184
  if not is_lock_contention_error(exc):
186
185
  raise
187
186
  _log.debug(
@@ -34,13 +34,13 @@ Data model:
34
34
  from __future__ import annotations
35
35
 
36
36
  import logging
37
- import sqlite3
38
37
  import time
39
38
  import uuid
40
39
  from dataclasses import dataclass
41
40
 
42
41
  import httpx
43
42
 
43
+ from coord import sql
44
44
  from coord.config import Config
45
45
  from coord.db import is_lock_contention_error
46
46
  from coord.dispatch import AGENT_PORT
@@ -1241,7 +1241,7 @@ def _dispatch_fix(
1241
1241
  assignment=fix_assignment,
1242
1242
  repo_github=repo.github,
1243
1243
  )
1244
- except sqlite3.OperationalError as exc:
1244
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
1245
1245
  if not is_lock_contention_error(exc):
1246
1246
  # Not the transient contention this guard exists for (#2538) —
1247
1247
  # a schema mismatch or malformed statement is a real bug and
@@ -3,18 +3,20 @@
3
3
  SQLite has no native boolean type — a column declared ``INTEGER DEFAULT 0``
4
4
  and used as a flag (e.g. ``is_interactive``) serializes on the `/board` wire
5
5
  as a raw JSON ``0``/``1``, not ``true``/``false``. The Rust side
6
- (``tui/src/app/types.rs``) hand-mirrors DB columns into typed structs; if a
7
- *new* such column is ever typed as a plain ``bool`` there (instead of going
8
- through ``de_bool_from_int_or_bool`` or an equivalent coercing
9
- deserializer), that ONE field fails the parse of the **entire**
6
+ (``tui/src/app/types.rs`` and, since #1941, its generated ``types/
7
+ generated.rs`` sibling — see that file's own header) mirrors DB columns into
8
+ typed structs; if a *new* such column is ever typed as a plain ``bool`` there
9
+ (instead of going through ``de_bool_from_int_or_bool`` or an equivalent
10
+ coercing deserializer), that ONE field fails the parse of the **entire**
10
11
  ``BoardPayload`` and blanks the whole TUI board (#632/#546/#628).
11
12
 
12
13
  This module is the producer-side (Python) half of the seam check: it reads
13
14
  the Rust struct definitions as text, finds `bool`-typed fields with no
14
15
  custom deserializer, and cross-references them against the live SQLite
15
- schema. ``tests/test_board_fixture.py`` wires this up against the real
16
- ``tui/src/app/types.rs`` + a freshly-migrated DB so CI goes red the moment
17
- someone adds an unguarded INTEGER-backed bool field.
16
+ schema. ``tests/test_board_fixture.py`` wires this up against the real Rust
17
+ source (``tui/src/app/types.rs`` concatenated with its generated ``types/
18
+ generated.rs`` sibling, #1941) + a freshly-migrated DB so CI goes red the
19
+ moment someone adds an unguarded INTEGER-backed bool field.
18
20
 
19
21
  #1849 added the *other* half of this guard, one level up: the ``/board`` wire
20
22
  contract is now the explicit DTOs in ``coord/board_schema.py``, and
@@ -144,6 +144,11 @@ class BoardAssignment:
144
144
  verdict_source_reason: str | None = None
145
145
  stop_reason: str | None = None
146
146
  dispatched_by_assignment_id: str | None = None
147
+ # #2786: worker-reported turn count — see the four token columns above
148
+ # (input_tokens/output_tokens/cache_creation_tokens/cache_read_tokens)
149
+ # for the sibling fields this rides alongside. Appended last, matching
150
+ # DDL order (`_MIGRATE_ADD_COLUMNS` in coord/db.py).
151
+ num_turns: int | None = None
147
152
 
148
153
 
149
154
  @dataclasses.dataclass(kw_only=True)
@@ -284,7 +289,8 @@ BOARD_PROJECTIONS: dict[str, type] = {
284
289
  #: types them ``integer`` and never ``boolean``, so the wire shape survives a
285
290
  #: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This is
286
291
  #: the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-side
287
- #: check against ``tui/src/app/types.rs``.
292
+ #: check against the real Rust wire structs (``tui/src/app/types.rs`` and,
293
+ #: since #1941, its generated ``types/generated.rs`` sibling).
288
294
  INTEGER_BACKED_BOOLEANS: frozenset[str] = frozenset(
289
295
  {"is_interactive", "review_scoped", "hold_after", "no_acceptance"}
290
296
  )
@@ -151,12 +151,16 @@ from coord.commands.plan_followup import (
151
151
  _dispatch_followup, # noqa: F401 — re-exported for tests
152
152
  approve_plan,
153
153
  fix,
154
- pr,
155
154
  reject_plan,
156
155
  resume_stuck,
157
156
  review,
158
157
  split,
159
158
  )
159
+ # #2790: `coord pr` is now a group (`open`/`merge` — a branch with no board
160
+ # assignment) that still falls through to the legacy bare `coord pr
161
+ # <ASSIGNMENT_ID>` command above (dispatch a PR-opening worker for a
162
+ # completed assignment) — see coord/commands/pr.py's `_PrGroup`.
163
+ from coord.commands.pr import pr_group
160
164
 
161
165
 
162
166
  # #1182: thresholds past which a stale non-editable install escalates from the
@@ -468,7 +472,7 @@ main.add_command(drive_stop)
468
472
  main.add_command(drive_queue_group)
469
473
  main.add_command(escalate_group)
470
474
  main.add_command(decide)
471
- main.add_command(pr)
475
+ main.add_command(pr_group)
472
476
  main.add_command(fix)
473
477
  main.add_command(review)
474
478
  main.add_command(approve_plan)
@@ -4,15 +4,15 @@ coord/cli.py (#747)."""
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- import sqlite3
8
7
  import sys
9
8
  from pathlib import Path
10
9
 
11
10
  import click
12
11
 
13
12
 
13
+ from coord import sql
14
14
  from coord.commands._common import _CONFIG_OPTION, _load_config
15
- from coord.db import is_lock_contention_error, retry_on_locked
15
+ from coord.db import LockContentionExhaustedError, is_lock_contention_error, retry_on_locked
16
16
  from coord.models import (
17
17
  WORK_LIKE_TYPES,
18
18
  effective_issue_number,
@@ -2011,6 +2011,16 @@ def merge(
2011
2011
  host=cfg_only.ci_store.host,
2012
2012
  token_env=cfg_only.ci_store.token_env,
2013
2013
  )
2014
+ # #2809 review: `only_entry` came straight off the queue DB
2015
+ # (`resolve_entry_key`) and may have been live-anchored on a much
2016
+ # earlier tick (or never, e.g. a manually-inserted entry) — its
2017
+ # `branch_head_probe_error` can be stale or unset. Re-anchor against
2018
+ # the CURRENT GitHub state so the review-gate report line below can
2019
+ # distinguish "GitHub confirmed unknown" (enriched status/request-id/
2020
+ # retry-after) from "never probed" (the generic fallback string) —
2021
+ # this is the exact `coord merge --only` invocation the issue's own
2022
+ # reproduction names for the review gate specifically.
2023
+ mq.live_anchor_entry(only_entry, gh_ops)
2014
2024
  # #1695: name the blocking gate(s) up front. Under #1695 a gate-blocked
2015
2025
  # row IS enqueued (visibly BLOCKED) instead of being dropped, so
2016
2026
  # `--only` now resolves it — and the operator needs to be told, before
@@ -2140,7 +2150,10 @@ def merge(
2140
2150
  # exact #1353 regression this file already fixed once, resurrected for
2141
2151
  # lock contention specifically). The whole run still fails loudly: once
2142
2152
  # every assignment has had its turn, a non-zero exit is raised below.
2143
- lock_contention_failures: list[tuple[str, sqlite3.OperationalError]] = []
2153
+ # #2784: BaseException, not sqlite3.OperationalError — the driver error
2154
+ # this collects is whichever one sql.driver_errors() catches below,
2155
+ # which is Postgres-shaped on a psycopg connection.
2156
+ lock_contention_failures: list[tuple[str, BaseException]] = []
2144
2157
  # Per-repo cache of branches that still exist on origin. Lets us skip
2145
2158
  # re-enqueuing done-work whose branch was already merged-and-deleted — the
2146
2159
  # dominant merge-queue clog source. A done assignment for a closed issue
@@ -2331,7 +2344,7 @@ def merge(
2331
2344
  f"{target_branch}) — "
2332
2345
  f"{mq.describe_merge_gate_failures(gate_failures)}"
2333
2346
  )
2334
- except sqlite3.OperationalError as exc:
2347
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
2335
2348
  if is_lock_contention_error(exc):
2336
2349
  # #2597: `retry_on_locked` above already gave the write
2337
2350
  # several backed-off attempts — reaching here means the
@@ -2372,12 +2385,20 @@ def merge(
2372
2385
  # #2597-review: every assignment in the batch has now had its turn
2373
2386
  # — including the ones after the first contended write, and their
2374
2387
  # results (if any) are already printed above. Surface the
2375
- # contention loudly now: a real `sqlite3.OperationalError`
2376
- # propagating out of this command (not a swallowed summary line)
2377
- # so `coord merge` exits non-zero and the failure is impossible to
2378
- # miss, same as any other genuinely unrecoverable write failure.
2388
+ # contention loudly now — propagating out of this command (not a
2389
+ # swallowed summary line) so `coord merge` exits non-zero and the
2390
+ # failure is impossible to miss, same as any other genuinely
2391
+ # unrecoverable write failure.
2392
+ #
2393
+ # #2784: this used to fabricate a bare `sqlite3.OperationalError(...)`
2394
+ # regardless of which driver actually raised the per-assignment
2395
+ # errors being summarized — a lie about origin on a Postgres
2396
+ # deployment, and a driver-named exception outside coord/sql.py that
2397
+ # the #2768 ratchet now forbids. `LockContentionExhaustedError` is
2398
+ # coord-owned and dialect-agnostic; the actual driver error survives
2399
+ # as `__cause__` below for anyone inspecting the traceback.
2379
2400
  assignment_ids = ", ".join(aid for aid, _exc in lock_contention_failures)
2380
- raise sqlite3.OperationalError(
2401
+ raise LockContentionExhaustedError(
2381
2402
  "database is locked — auto-enqueue write(s) still locked after "
2382
2403
  f"exhausting retries for assignment(s): {assignment_ids}"
2383
2404
  ) from lock_contention_failures[-1][1]