code-coordinator 0.5.519__tar.gz → 0.5.521__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (911) hide show
  1. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.521/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dr_verify.py +20 -6
  5. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gates.py +214 -5
  6. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_verify.py +71 -0
  7. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gates.py +208 -0
  8. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_sqlite_connect_ratchet.py +10 -1
  9. code_coordinator-0.5.519/code_coordinator.egg-info/scm_version.json +0 -8
  10. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.gitignore +0 -0
  23. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/GOAL.md +0 -0
  25. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/LICENSE +0 -0
  26. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/README.md +0 -0
  28. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/backup.py +0 -0
  48. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/block_log.py +0 -0
  49. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_schema.py +0 -0
  50. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/claude_setup_token.py +0 -0
  62. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/client.py +0 -0
  64. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/codegen.py +0 -0
  65. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/backup.py +0 -0
  71. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/ci.py +0 -0
  73. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/machine.py +0 -0
  84. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/config.py +0 -0
  104. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/db.py +0 -0
  114. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive.py +0 -0
  150. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_queue.py +0 -0
  151. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_sessions_snapshot.py +0 -0
  152. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_state.py +0 -0
  153. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/events.py +0 -0
  154. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/failure_classifier.py +0 -0
  156. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/filelock.py +0 -0
  157. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/fleet_config_health.py +0 -0
  158. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/forge_availability.py +0 -0
  159. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/freshness.py +0 -0
  160. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_a.py +0 -0
  161. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_b.py +0 -0
  162. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_snapshot.py +0 -0
  163. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gen_board_fixture.py +0 -0
  164. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/github_ops.py +0 -0
  165. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/github_throttle.py +0 -0
  166. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/goal.py +0 -0
  167. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/graph_health.py +0 -0
  168. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/__init__.py +0 -0
  169. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/aggregate.py +0 -0
  170. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/__init__.py +0 -0
  171. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/_ci_pin.py +0 -0
  172. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/agent_install.py +0 -0
  173. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/cargo_targets.py +0 -0
  174. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/claude_binary.py +0 -0
  175. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/config_drift.py +0 -0
  176. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  177. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/coord_web_ci_pin.py +0 -0
  178. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/deploy_lane_facts.py +0 -0
  179. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/disk.py +0 -0
  180. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_board.py +0 -0
  181. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  182. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_phantom.py +0 -0
  183. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_unit_drift.py +0 -0
  184. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/graph.py +0 -0
  185. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/graphify_cli.py +0 -0
  186. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/index_lock.py +0 -0
  187. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/issues_sync_staleness.py +0 -0
  188. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/local_machine_identity.py +0 -0
  189. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/plan_usage.py +0 -0
  190. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/pr_churn.py +0 -0
  191. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/release_cordon.py +0 -0
  192. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/repo_state.py +0 -0
  193. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/spawned_coord.py +0 -0
  194. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/stalled_pipeline.py +0 -0
  195. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/timer_active.py +0 -0
  196. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/toolchain.py +0 -0
  197. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/unit_drift.py +0 -0
  198. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/unit_enablement.py +0 -0
  199. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/wedged_drive_queue.py +0 -0
  200. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/worktrees.py +0 -0
  201. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/cli.py +0 -0
  202. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/context.py +0 -0
  203. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/fleet_snapshot.py +0 -0
  204. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/models.py +0 -0
  205. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/pypi.py +0 -0
  206. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/registry.py +0 -0
  207. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/render.py +0 -0
  208. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/units.py +0 -0
  209. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/hooks.py +0 -0
  210. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/housekeeping.py +0 -0
  211. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/interactive.py +0 -0
  212. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/invariant_alarms.py +0 -0
  213. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/issue_store.py +0 -0
  214. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/issues_sync_status.py +0 -0
  215. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/liveness_auditor.py +0 -0
  216. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_fault.py +0 -0
  217. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_metrics.py +0 -0
  218. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_onboard.py +0 -0
  219. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_pause.py +0 -0
  220. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_stats.py +0 -0
  221. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/merge_queue.py +0 -0
  222. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_chat.py +0 -0
  223. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_dispatch.py +0 -0
  224. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_gate.py +0 -0
  225. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_order.py +0 -0
  226. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/mock_author.py +0 -0
  227. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/models.py +0 -0
  228. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/network.py +0 -0
  229. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/new_issue_chat.py +0 -0
  230. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/__init__.py +0 -0
  231. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/baseline.py +0 -0
  232. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/cli.py +0 -0
  233. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/collect.py +0 -0
  234. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/digest.py +0 -0
  235. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/models.py +0 -0
  236. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/predicate.py +0 -0
  237. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/service.py +0 -0
  238. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/store.py +0 -0
  239. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/transport.py +0 -0
  240. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notify.py +0 -0
  241. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/openapi.py +0 -0
  242. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/overlap_fence.py +0 -0
  243. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/overlap_predict.py +0 -0
  244. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/parentage.py +0 -0
  245. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/parentage_github.py +0 -0
  246. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/pipeline.py +0 -0
  247. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/plan_parser.py +0 -0
  248. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/plans.py +0 -0
  249. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/platform_paths.py +0 -0
  250. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_bridge.py +0 -0
  251. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_store.py +0 -0
  252. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_sync.py +0 -0
  253. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/pr_body_lint.py +0 -0
  254. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/prereqs.py +0 -0
  255. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/progress.py +0 -0
  256. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/__init__.py +0 -0
  257. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/base.py +0 -0
  258. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/claude.py +0 -0
  259. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/claude_pty.py +0 -0
  260. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/opencode.py +0 -0
  261. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/queue_diagnose.py +0 -0
  262. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reconcile.py +0 -0
  263. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reconcile_tick.py +0 -0
  264. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/refine_chat.py +0 -0
  265. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_cordon.py +0 -0
  266. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_propagate.py +0 -0
  267. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_verify.py +0 -0
  268. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_window.py +0 -0
  269. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_dormancy.py +0 -0
  270. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_edit.py +0 -0
  271. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_onboard.py +0 -0
  272. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reports.py +0 -0
  273. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/rest_schema.py +0 -0
  274. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/restart_cmd.py +0 -0
  275. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/revalidate.py +0 -0
  276. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/review.py +0 -0
  277. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/scorecard.py +0 -0
  278. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/self_health.py +0 -0
  279. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/serve_app.py +0 -0
  280. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  281. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  282. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  283. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  285. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/portal-followup/SKILL.md +0 -0
  286. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/release-now/SKILL.md +0 -0
  287. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  288. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  289. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/update-issue/SKILL.md +0 -0
  290. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/smoke.py +0 -0
  291. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/spend_ceiling.py +0 -0
  292. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/split_work.py +0 -0
  293. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/sql.py +0 -0
  294. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/stage_projection.py +0 -0
  295. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/state.py +0 -0
  296. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/store_migrate.py +0 -0
  297. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/store_parity.py +0 -0
  298. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/templates/deploy-cloudflare.node.yml +0 -0
  299. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_author.py +0 -0
  300. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_chat.py +0 -0
  301. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_orchestrator.py +0 -0
  302. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_report.py +0 -0
  303. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/tui_release.py +0 -0
  304. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/uat_checks.py +0 -0
  305. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage.py +0 -0
  306. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage_limits.py +0 -0
  307. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage_rollup.py +0 -0
  308. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/worker_events.py +0 -0
  309. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coordinator.example.yml +0 -0
  310. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-agent.service +0 -0
  311. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-backup.service +0 -0
  312. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-backup.timer +0 -0
  313. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.service +0 -0
  314. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.sh +0 -0
  315. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.timer +0 -0
  316. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-dr-verify.service +0 -0
  317. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-dr-verify.timer +0 -0
  318. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-drive-queue.service +0 -0
  319. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-drive-queue.timer +0 -0
  320. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-failure-notify.service +0 -0
  321. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-failure-notify.sh +0 -0
  322. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-fleet-watchdog.service +0 -0
  323. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-fleet-watchdog.timer +0 -0
  324. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-notify.service +0 -0
  325. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-notify.timer +0 -0
  326. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-propagate.service +0 -0
  327. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-propagate.timer +0 -0
  328. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-window.service +0 -0
  329. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-window.timer +0 -0
  330. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-serve.service +0 -0
  331. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.service +0 -0
  332. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.sh +0 -0
  333. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.timer +0 -0
  334. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-rollback.sh +0 -0
  335. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web.service +0 -0
  336. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/node-shim.sh +0 -0
  337. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_TUI_CI.md +0 -0
  338. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  339. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_CI.md +0 -0
  340. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_DIST.md +0 -0
  341. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  342. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/AGENT_OPERATIONS.md +0 -0
  343. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ARCHITECTURE.md +0 -0
  344. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ARCH_SECURITY_GATES.md +0 -0
  345. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/COCKPIT.md +0 -0
  346. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CONTROL_CENTER.md +0 -0
  347. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/COST_DISCIPLINE.md +0 -0
  348. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CROSS_PLATFORM.md +0 -0
  349. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CUSTOMER_FACING_APPS.md +0 -0
  350. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CUSTOMER_PORTAL.md +0 -0
  351. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DATA_STORE_SELECTION.md +0 -0
  352. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DISASTER_RECOVERY.md +0 -0
  353. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DRIVE_QUEUE.md +0 -0
  354. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/EPHEMERAL_WORKERS.md +0 -0
  355. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/FORGE_MIGRATION.md +0 -0
  356. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/GRAPHIFY_SETUP.md +0 -0
  357. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ISSUE_GUIDANCE.md +0 -0
  358. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/MAC_MINI.md +0 -0
  359. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  360. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/NOTIFIER.md +0 -0
  361. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPENCODE_VERIFICATION.md +0 -0
  362. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPERATING_GOTCHAS.md +0 -0
  363. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPERATOR_GUIDES.md +0 -0
  364. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ORACLE_LOOP.md +0 -0
  365. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PHONE_WEBAPP.md +0 -0
  366. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PIPELINE_V2.md +0 -0
  367. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PLATFORM_EVOLUTION.md +0 -0
  368. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/SECOND_BACKEND.md +0 -0
  369. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/STORE_SERVICE.md +0 -0
  370. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  371. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/WEB_CONTROL_CENTER.md +0 -0
  372. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/WSL_WINDOWS_WORKER.md +0 -0
  373. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/README.md +0 -0
  374. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/_tokens.css +0 -0
  375. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/issue-detail.html +0 -0
  376. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/pipeline-narrow.html +0 -0
  377. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/pipeline-wide.html +0 -0
  378. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/graphify-out/.gitignore +0 -0
  379. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/install-agent.sh +0 -0
  380. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/pyproject.toml +0 -0
  381. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/audit_review_verdict_overrides.py +0 -0
  382. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  383. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/build-worker-image.sh +0 -0
  384. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/coordinator-machine.py +0 -0
  385. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/dr-down.sh +0 -0
  386. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/dr-up.sh +0 -0
  387. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/epic-down.sh +0 -0
  388. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/epic-up.sh +0 -0
  389. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/preflight.sh +0 -0
  390. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/provision-server.sh +0 -0
  391. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/provision-worker.sh +0 -0
  392. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  393. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  394. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/throwaway-vm.sh +0 -0
  395. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/verify-github-token.sh +0 -0
  396. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/check_gh_argv_containment.py +0 -0
  397. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/codegen.py +0 -0
  398. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-test-runner.sh +0 -0
  399. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  400. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  401. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  402. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  403. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-venv-rollback.sh +0 -0
  404. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/drive-batch.sh +0 -0
  405. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/extract-coord-tui.sh +0 -0
  406. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/fleet_watchdog.py +0 -0
  407. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/gen_board_fixture.py +0 -0
  408. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/gen_mock_index.py +0 -0
  409. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/lib/provision-core.sh +0 -0
  410. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/next_release_tag.py +0 -0
  411. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/provision-machine.sh +0 -0
  412. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/run_tests_in_populated_home.sh +0 -0
  413. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/run_tests_without_gh.sh +0 -0
  414. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/setup-macmini.sh +0 -0
  415. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/smoke_437_interactive.py +0 -0
  416. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify-provision-noble.sh +0 -0
  417. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_878_review_capture.py +0 -0
  418. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_release_published.py +0 -0
  419. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_release_wheel.py +0 -0
  420. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/setup.cfg +0 -0
  421. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/SMOKE_SET.md +0 -0
  422. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/__init__.py +0 -0
  423. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/conftest.py +0 -0
  424. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/contract.md +0 -0
  425. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/manifest.yml +0 -0
  426. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  427. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  428. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/contract.md +0 -0
  429. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  430. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  431. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/manifest.yml +0 -0
  432. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/tsconfig.json +0 -0
  434. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  435. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/backends.py +0 -0
  436. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/conftest.py +0 -0
  437. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/board-pipeline-basic.json +0 -0
  438. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  439. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  440. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  441. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  442. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/all_pass.json +0 -0
  443. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  444. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/mixed_fail.json +0 -0
  445. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  446. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  447. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/skip.json +0 -0
  448. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/truncated.json +0 -0
  449. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  450. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  451. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  452. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  453. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  454. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  455. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  456. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  457. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_acceptance.py +0 -0
  458. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_acceptance_drivers.py +0 -0
  459. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent.py +0 -0
  460. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_api_error.py +0 -0
  461. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_app.py +0 -0
  462. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_branch_base.py +0 -0
  463. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_branch_capture.py +0 -0
  464. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_config_free_1712.py +0 -0
  465. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_deploy_units_endpoint.py +0 -0
  466. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_dirty_worktree.py +0 -0
  467. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  468. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_graph_self_heal.py +0 -0
  469. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_health_h3.py +0 -0
  470. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_idle_restart.py +0 -0
  471. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_push_failure.py +0 -0
  472. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_reap.py +0 -0
  473. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_repos_and_pull.py +0 -0
  474. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_restart_services_endpoint.py +0 -0
  475. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_skills_self_heal.py +0 -0
  476. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_startup_diagnostics.py +0 -0
  477. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_update.py +0 -0
  478. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_update_bluegreen.py +0 -0
  479. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_usage_limit.py +0 -0
  480. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_zero_commit.py +0 -0
  481. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ambient_home_isolation.py +0 -0
  482. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_capability_reroute_3241.py +0 -0
  483. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_dependency_busy_2804.py +0 -0
  484. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_reject_plan.py +0 -0
  485. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_usage_gate.py +0 -0
  486. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approved_work_2532.py +0 -0
  487. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approved_work_2996.py +0 -0
  488. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_assignment_already_recorded_daemon.py +0 -0
  489. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_log.py +0 -0
  490. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_outcome.py +0 -0
  491. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_query.py +0 -0
  492. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_auto_loop.py +0 -0
  493. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_auto_release_publish_2035.py +0 -0
  494. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_backend_selection.py +0 -0
  495. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_backup.py +0 -0
  496. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_base_checkout_restore.py +0 -0
  497. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_block_log.py +0 -0
  498. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_cap_762.py +0 -0
  499. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_fixture.py +0 -0
  500. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_read_path.py +0 -0
  501. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_schema.py +0 -0
  502. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_service.py +0 -0
  503. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_state.py +0 -0
  504. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_wire.py +0 -0
  505. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_brain.py +0 -0
  506. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_branch_model.py +0 -0
  507. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_bug_intake.py +0 -0
  508. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_build_worker_image_env_update.py +0 -0
  509. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cargo_cache.py +0 -0
  510. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_check_gh_argv_containment.py +0 -0
  511. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_acceptance_gate_1950.py +0 -0
  512. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_fix.py +0 -0
  513. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_github.py +0 -0
  514. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_gitlab.py +0 -0
  515. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_parity_2091.py +0 -0
  516. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_store.py +0 -0
  517. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claim.py +0 -0
  518. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claude_md_budget.py +0 -0
  519. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claude_setup_token.py +0 -0
  520. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_acceptance.py +0 -0
  521. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign.py +0 -0
  522. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  523. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_interactive_remote.py +0 -0
  524. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_provider.py +0 -0
  525. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  526. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_audit.py +0 -0
  527. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_chat_continue.py +0 -0
  528. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_ci.py +0 -0
  529. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_codegen.py +0 -0
  530. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_decide.py +0 -0
  531. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_capability_rules.py +0 -0
  532. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_forge_availability.py +0 -0
  534. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_graph.py +0 -0
  535. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_self.py +0 -0
  536. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_test_coverage.py +0 -0
  537. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor.py +0 -0
  538. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_config_free_1801.py +0 -0
  539. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  540. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  541. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_drive.py +0 -0
  542. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_drive_queue.py +0 -0
  543. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_comment.py +0 -0
  549. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_create_label.py +0 -0
  550. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_reopen.py +0 -0
  551. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_view_list.py +0 -0
  552. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issues.py +0 -0
  553. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_merge.py +0 -0
  554. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_assign.py +0 -0
  555. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_capture.py +0 -0
  556. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_chat_add_child.py +0 -0
  557. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_dispatch.py +0 -0
  558. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_gate_b.py +0 -0
  559. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_gate_c.py +0 -0
  560. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_order.py +0 -0
  561. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  562. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_ship.py +0 -0
  563. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_network.py +0 -0
  564. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_new_issue_chat.py +0 -0
  565. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_plans.py +0 -0
  566. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_portal.py +0 -0
  567. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_pr.py +0 -0
  568. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_pull_artifact.py +0 -0
  569. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_queue.py +0 -0
  570. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_reattach_sessions.py +0 -0
  571. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_refine_board.py +0 -0
  572. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_preflight.py +0 -0
  573. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_propagate.py +0 -0
  574. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_window.py +0 -0
  575. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_repo_2220.py +0 -0
  576. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  577. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_scorecard.py +0 -0
  578. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_serve_store_backend_3084.py +0 -0
  579. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_set_review_findings.py +0 -0
  580. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_advisory_terminal.py +0 -0
  581. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_contested_tag.py +0 -0
  582. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_invariant_alarms.py +0 -0
  583. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_machine_fault.py +0 -0
  584. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_retried_3340.py +0 -0
  587. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_supervisor_3366.py +0 -0
  589. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client.py +0 -0
  597. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_base_install.py +0 -0
  598. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_config_cache_atomic_3052.py +0 -0
  599. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_resource_migration_1946.py +0 -0
  600. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_commands_common.py +0 -0
  601. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_comments.py +0 -0
  602. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_completion_summary.py +0 -0
  603. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config.py +0 -0
  604. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_acceptance.py +0 -0
  605. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_audit.py +0 -0
  606. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_drift_check.py +0 -0
  607. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_effective.py +0 -0
  608. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_pricing.py +0 -0
  609. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  610. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_usage_gate.py +0 -0
  611. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_confirm_test.py +0 -0
  612. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_conflict_fix.py +0 -0
  613. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_conflict_fix_semantic.py +0 -0
  614. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  615. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  617. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_baseline.py +0 -0
  618. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_populated_home.py +0 -0
  619. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_routing.py +0 -0
  620. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_toolchain.py +0 -0
  621. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_uat.py +0 -0
  622. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_web_sse_restart_live.py +0 -0
  623. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coordinator_machine.py +0 -0
  624. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cross_platform_imports.py +0 -0
  625. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dao.py +0 -0
  626. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard.py +0 -0
  627. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_api.py +0 -0
  628. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_fixture.py +0 -0
  629. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_server.py +0 -0
  630. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_terminal.py +0 -0
  631. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_terminal_live.py +0 -0
  632. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_db.py +0 -0
  633. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dead_end.py +0 -0
  634. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_decomposition_chat.py +0 -0
  635. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_db_backup.py +0 -0
  636. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_web_dist.py +0 -0
  637. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_web_rollback.py +0 -0
  638. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_db_backup_unit.py +0 -0
  639. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_drive_queue_unit.py +0 -0
  640. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_failure_notify_unit.py +0 -0
  641. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_manifest.py +0 -0
  642. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_notify_unit.py +0 -0
  643. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_units_lane.py +0 -0
  644. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_web_unit.py +0 -0
  645. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deprecation_telemetry.py +0 -0
  646. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deps.py +0 -0
  647. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_diagnose.py +0 -0
  648. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch.py +0 -0
  649. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_liveness.py +0 -0
  650. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_target_validation.py +0 -0
  651. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_workers.py +0 -0
  652. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dist_name.py +0 -0
  653. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_done_housekeeping.py +0 -0
  654. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_azure_scripts.py +0 -0
  655. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_promote.py +0 -0
  656. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive.py +0 -0
  657. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_machine_fault.py +0 -0
  658. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue.py +0 -0
  659. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_blocked_rendering.py +0 -0
  660. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_launch_argv.py +0 -0
  661. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_max_parallel_config.py +0 -0
  662. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  663. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_roll_pending.py +0 -0
  664. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  665. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_sessions_snapshot.py +0 -0
  666. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_state.py +0 -0
  667. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_tmux.py +0 -0
  668. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_capability_detection.py +0 -0
  669. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  670. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_image_provenance.py +0 -0
  671. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_errors.py +0 -0
  672. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_events.py +0 -0
  673. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_failure_class.py +0 -0
  674. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_failure_classifier.py +0 -0
  675. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_filelock.py +0 -0
  676. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  677. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fix_escalation_classifier.py +0 -0
  678. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fix_of_force_override.py +0 -0
  679. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_config_health.py +0 -0
  680. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_health_probes.py +0 -0
  681. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_health_snapshot.py +0 -0
  682. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_watchdog.py +0 -0
  683. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_forge_availability.py +0 -0
  684. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_freshness.py +0 -0
  685. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_a.py +0 -0
  686. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_b.py +0 -0
  687. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_snapshot_staleness.py +0 -0
  688. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  689. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gen_mock_index.py +0 -0
  690. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_rust_fixture.py +0 -0
  691. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_rust_requests.py +0 -0
  692. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_types_fixture.py +0 -0
  693. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_github_ops.py +0 -0
  694. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_github_throttle.py +0 -0
  695. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_goal.py +0 -0
  696. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_graph_health.py +0 -0
  697. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_graph_selfheal_absent_2237.py +0 -0
  698. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_handoff.py +0 -0
  699. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_checks.py +0 -0
  700. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_cli.py +0 -0
  701. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_cli_graph.py +0 -0
  702. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_config.py +0 -0
  703. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_context.py +0 -0
  704. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_coord_tui_ci_pin.py +0 -0
  705. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_coord_web_ci_pin.py +0 -0
  706. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_deploy_lane_facts.py +0 -0
  707. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_fix.py +0 -0
  708. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_incident_regression.py +0 -0
  709. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_issues_sync_staleness.py +0 -0
  710. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_pr_churn.py +0 -0
  711. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_pypi.py +0 -0
  712. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_registry.py +0 -0
  713. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_release_cordon_probe.py +0 -0
  714. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_timer_active.py +0 -0
  715. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_toolchain.py +0 -0
  716. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_unit_drift.py +0 -0
  717. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_unit_enablement.py +0 -0
  718. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_wedged_drive_queue.py +0 -0
  719. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_hooks.py +0 -0
  720. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_housekeeping.py +0 -0
  721. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_human_attended_437.py +0 -0
  722. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_init.py +0 -0
  723. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_install_agent_venv_2911.py +0 -0
  724. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_integration.py +0 -0
  725. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive.py +0 -0
  726. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_briefing_echo.py +0 -0
  727. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_pane_log_2541.py +0 -0
  728. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_prefill_state.py +0 -0
  729. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_session_relaunch.py +0 -0
  730. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_test_verdict_backstop.py +0 -0
  731. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_token_attribution.py +0 -0
  732. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_worktree.py +0 -0
  733. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_invariant_alarms.py +0 -0
  734. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_issue_store_seam.py +0 -0
  735. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_issues_sync_status.py +0 -0
  736. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_liveness_auditor.py +0 -0
  737. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_liveness_notify.py +0 -0
  738. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_lock_contention_ratchet.py +0 -0
  739. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_fault.py +0 -0
  740. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_metrics.py +0 -0
  741. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_onboard.py +0 -0
  742. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_pause.py +0 -0
  743. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_stats.py +0 -0
  744. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_merge_queue.py +0 -0
  745. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_merge_verify.py +0 -0
  746. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_chat.py +0 -0
  747. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_dispatch.py +0 -0
  748. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_gate.py +0 -0
  749. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_order.py +0 -0
  750. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_seam.py +0 -0
  751. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_mock_author.py +0 -0
  752. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_model_tiering.py +0 -0
  753. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_models.py +0 -0
  754. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_models_config_labels.py +0 -0
  755. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_needs_attention.py +0 -0
  756. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_network.py +0 -0
  757. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_new_issue_chat.py +0 -0
  758. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_next_release_tag.py +0 -0
  759. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_node_shim.py +0 -0
  760. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_baseline.py +0 -0
  761. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_cli.py +0 -0
  762. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_collect.py +0 -0
  763. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_config.py +0 -0
  764. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_drive_seam.py +0 -0
  765. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_isolation.py +0 -0
  766. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_predicate.py +0 -0
  767. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_service.py +0 -0
  769. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notify.py +0 -0
  770. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notify_drain.py +0 -0
  771. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_openapi.py +0 -0
  772. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_operational_defaults.py +0 -0
  773. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_overlap_fence.py +0 -0
  774. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_overlap_predict.py +0 -0
  775. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_packaged_deploy_units.py +0 -0
  776. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_parentage.py +0 -0
  777. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_paste_landed.py +0 -0
  778. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  779. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_pipeline.py +0 -0
  780. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_approve_plan_command.py +0 -0
  781. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_pr_command.py +0 -0
  782. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_review_command.py +0 -0
  783. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_only.py +0 -0
  784. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_parser.py +0 -0
  785. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_platform_paths.py +0 -0
  786. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_bridge.py +0 -0
  787. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_config.py +0 -0
  788. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_store.py +0 -0
  789. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_sync.py +0 -0
  790. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_pr_body_lint.py +0 -0
  791. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_prereqs.py +0 -0
  792. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_production_db_guard.py +0 -0
  793. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_progress.py +0 -0
  794. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provider_seam.py +0 -0
  795. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers.py +0 -0
  796. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers_config_labels.py +0 -0
  797. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers_pty.py +0 -0
  798. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provision_core.py +0 -0
  799. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provision_machine.py +0 -0
  800. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_py_rust_mirror_inventory.py +0 -0
  801. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_quiet_hours.py +0 -0
  802. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_quiet_hours_store_2146.py +0 -0
  803. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reap_merged_sessions.py +0 -0
  804. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reap_stale_interactive_tick.py +0 -0
  805. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile.py +0 -0
  806. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_branch.py +0 -0
  807. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_completions.py +0 -0
  808. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  809. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_merges.py +0 -0
  810. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_no_agent_record.py +0 -0
  811. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_tick.py +0 -0
  812. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_usage_limit_done.py +0 -0
  813. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_refine_chat.py +0 -0
  814. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_2101.py +0 -0
  815. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  816. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_deadlock_2240.py +0 -0
  817. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  818. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_stuck_2490.py +0 -0
  819. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_propagate.py +0 -0
  820. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_propagate_threshold.py +0 -0
  821. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_roll_between_legs_2854.py +0 -0
  822. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_roll_window_handoff.py +0 -0
  823. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_unified_1242.py +0 -0
  824. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_verify.py +0 -0
  825. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_window.py +0 -0
  826. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_remote_auto_prune.py +0 -0
  827. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_remote_interactive_reaper.py +0 -0
  828. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_add.py +0 -0
  829. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_dormancy.py +0 -0
  830. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_edit_2220.py +0 -0
  831. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_graph_fleet_2237.py +0 -0
  832. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_max_parallel_3423.py +0 -0
  833. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_onboard_2220.py +0 -0
  834. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_report_result_push.py +0 -0
  835. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reports.py +0 -0
  836. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_restart_cmd.py +0 -0
  837. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry.py +0 -0
  838. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_advisory_1606.py +0 -0
  839. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_escalation_classify_3360.py +0 -0
  840. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_type_1636.py +0 -0
  841. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_revalidate.py +0 -0
  842. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review.py +0 -0
  843. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_end_review_without_verdict.py +0 -0
  844. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_parse_failure_diagnostic.py +0 -0
  845. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_reaffirm.py +0 -0
  846. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_state.py +0 -0
  847. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_backstop.py +0 -0
  848. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_override_audit.py +0 -0
  849. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_relay.py +0 -0
  850. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_zero_commits.py +0 -0
  851. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_scoped_review_wiring.py +0 -0
  852. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_scorecard.py +0 -0
  853. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_self_health.py +0 -0
  854. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve.py +0 -0
  855. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_app.py +0 -0
  856. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_app_board_trim.py +0 -0
  857. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_rest_routes.py +0 -0
  858. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_session.py +0 -0
  859. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_slice_issue_attribution.py +0 -0
  860. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke.py +0 -0
  861. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  862. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_live_checkout_restore.py +0 -0
  863. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_workflow.py +0 -0
  864. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_spend_ceiling.py +0 -0
  865. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_spend_ceiling_coordinator.py +0 -0
  866. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_split.py +0 -0
  867. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_split_work.py +0 -0
  868. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_sql_dialect.py +0 -0
  869. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stage_projection.py +0 -0
  870. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stale_busy_reviewer_697.py +0 -0
  871. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stalled_pipeline.py +0 -0
  872. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_state.py +0 -0
  873. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_state_review_findings_daemon.py +0 -0
  874. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_status_fleet_footer.py +0 -0
  875. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stop_1567.py +0 -0
  876. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_store_contract.py +0 -0
  877. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_store_migrate.py +0 -0
  878. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stuck.py +0 -0
  879. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  880. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_terminal_command.py +0 -0
  881. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_author.py +0 -0
  882. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_chat.py +0 -0
  883. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_orchestrator.py +0 -0
  884. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_report.py +0 -0
  885. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_verdict_parsing.py +0 -0
  886. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_verdict_transcript_floor.py +0 -0
  887. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_text_io_encoding_audit.py +0 -0
  888. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_board_audit.py +0 -0
  889. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_config_load_1080.py +0 -0
  890. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_daemon_routing_906.py +0 -0
  891. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_throwaway_vm.py +0 -0
  892. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_tmux_host.py +0 -0
  893. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_tmux_session.py +0 -0
  894. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_transcript_floor.py +0 -0
  895. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_uat_checks.py +0 -0
  896. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage.py +0 -0
  897. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.519
3
+ Version: 0.5.521
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.519
3
+ Version: 0.5.521
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
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.521",
3
+ "distance": 0,
4
+ "node": "g1d59afeac7d0d003c9bbecd7b2711c6ebe8adaf8",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-27"
8
+ }
@@ -714,13 +714,26 @@ def live_board_assignment_count(live_db_path: Path) -> int:
714
714
  count, which is always larger once a board has any history (#762's
715
715
  retention cap). There is no need to *boot* a second daemon to answer this:
716
716
  the live daemon (if one is even running) is not what is being tested here
717
- — only "what would `/board` report for this file" is needed, and that is
718
- exactly :meth:`coord.dao.SqliteStore.board_projection`, the same function
719
- `coord/serve_app.py`'s `/board` route calls. Calling it directly, read-only,
720
- against the live file is the "one question, one answer" version of asking
721
- a second daemon to boot just to answer a question the daemon already
722
- knows how to answer without booting.
717
+ — only "what would `/board` report for this file" is needed.
718
+
719
+ That answer is **not** simply :meth:`coord.dao.SqliteStore.board_projection`
720
+ — #762's retention window is only the first of two filters the route
721
+ applies. ``coord/serve_app.py``'s `/board` route also runs the projection
722
+ through :func:`coord.board_wire.bound_board_payload`, which caps terminal
723
+ assignments to :data:`coord.board_wire.MAX_TERMINAL_ASSIGNMENTS` (#1791) on
724
+ top of the retention window — a *second*, tighter cut a board with any
725
+ real history will always hit before the 14-day window ever does (#3451).
726
+ Skipping that second cut here made this function's own docstring claim —
727
+ "the same function `/board` route calls" — false: it counted a raw,
728
+ unbounded-by-cardinality projection while the restored side (a real
729
+ daemon's `/board`) counted the capped one, so parity failed on every real
730
+ fleet board regardless of whether the restore was actually fine.
731
+ :func:`coord.board_wire.bound_board_payload` mutates ``payload`` in place,
732
+ so applying it here before counting is the "one question, one answer"
733
+ version of asking a second daemon to boot just to answer a question the
734
+ daemon already knows how to answer without booting.
723
735
  """
736
+ from coord.board_wire import bound_board_payload # noqa: PLC0415
724
737
  from coord.dao import SqliteStore # noqa: PLC0415
725
738
 
726
739
  try:
@@ -730,6 +743,7 @@ def live_board_assignment_count(live_db_path: Path) -> int:
730
743
  f"parity check failed: could not read the live board's /board "
731
744
  f"count from {live_db_path}: {exc}"
732
745
  ) from None
746
+ bound_board_payload(payload)
733
747
  rows = payload.get("assignments")
734
748
  if not isinstance(rows, list):
735
749
  raise DRVerifyError(
@@ -42,6 +42,7 @@ duck-typed shape they expect.
42
42
  from __future__ import annotations
43
43
 
44
44
  from dataclasses import asdict, dataclass, field
45
+ from datetime import datetime, timezone
45
46
  from typing import TYPE_CHECKING
46
47
 
47
48
  from coord.confirm_test import (
@@ -60,6 +61,21 @@ if TYPE_CHECKING: # avoid import cycles / heavy imports at module load
60
61
  # "smoke_required" finds both a live merge attempt AND a `coord gates` read.
61
62
  REVIEW_REQUIRED = "review_required"
62
63
  SMOKE_REQUIRED = "smoke_required"
64
+ # #3445: distinct from the two tokens above — a latched HUMAN_REQUIRED
65
+ # merge-queue entry (an automated conflict-fix that already gave up, #1291)
66
+ # is not "review/smoke unmet", it is "the merge itself already failed and
67
+ # needs a human (or `--override-human-required`)". Clearing review or smoke
68
+ # cannot unstick it, so it outranks both as the merge gate's headline reason
69
+ # — see `_merge_queue_state_decision` and its call site in
70
+ # `build_gate_report`.
71
+ HUMAN_REQUIRED_BLOCKED = "human_required"
72
+ # #3445 review: SKIPPED is `_merge_queue_state_decision`'s own comment's
73
+ # other "parked, needs-attention" state alongside HUMAN_REQUIRED (and
74
+ # `coord/drive.py`'s `_RETRYABLE_MERGE_STATUSES` docstring independently
75
+ # documents it as equally terminal, unlike CONFLICT, which self-heals via
76
+ # `dispatch_conflict_fix` and is deliberately NOT in this override) — so it
77
+ # gets the same headline-outranking treatment, not just HUMAN_REQUIRED.
78
+ SKIPPED_BLOCKED = "skipped"
63
79
 
64
80
 
65
81
  @dataclass
@@ -451,6 +467,124 @@ def _exempt_dependency_notes_for_winner(
451
467
  return []
452
468
 
453
469
 
470
+ def _iso(ts: float | None) -> str | None:
471
+ if not ts:
472
+ return None
473
+ return datetime.fromtimestamp(float(ts), tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ")
474
+
475
+
476
+ def _merge_queue_state_decision(
477
+ repo_name: str, issue_number: int, fallback_assignment_id: str | None,
478
+ ) -> GateDecision | None:
479
+ """The REAL, persisted ``merge_queue`` row's state for
480
+ ``(repo_name, issue_number)``, or ``None`` when no such row exists
481
+ (#3445).
482
+
483
+ This is deliberately a *second* read, distinct from the synthetic
484
+ ``QueuedMerge`` :func:`build_gate_report` builds via
485
+ ``mq.live_gate_entry`` to feed the review/test/registry gate checks:
486
+ that object is constructed fresh on every call and never persisted, so
487
+ it always carries the dataclass default ``state=PENDING`` — it was
488
+ never going to surface a *latched* CONFLICT/HUMAN_REQUIRED/SKIPPED.
489
+ Before this, ``coord gates`` had no read of the real merge-queue table
490
+ at all, so an issue whose entry had already given up (an automated
491
+ conflict-fix exhausting its one retry, #1291, or a stale-rebase worker
492
+ refusing to push a non-content-preserving rebase) reported
493
+ ``merge : BLOCKED — smoke_required`` — true in isolation, but not the
494
+ reason nothing is moving: clearing the smoke gate cannot unstick a
495
+ HUMAN_REQUIRED entry, only a human (or ``coord merge --only <aid>
496
+ --override-human-required``) can.
497
+
498
+ Matched on ``(repo_name, issue_number)`` — the same two facts
499
+ :func:`coord.drive_state._merge_entry` matches the raw ``merge_queue``
500
+ row against for exactly the same reason (a fix-chain may have re-keyed
501
+ the entry's ``assignment_id`` to a newer work row) — with
502
+ *fallback_assignment_id* (the winning work row `build_gate_report`
503
+ already selected) preferred when more than one row matches.
504
+
505
+ Fail-open like every other best-effort DB read in this module
506
+ (``_backfill_is_interactive``, ``_apply_gate_decision``): an
507
+ unreachable DB degrades to "no merge-queue line" rather than failing
508
+ the whole ``coord gates`` read.
509
+ """
510
+ try:
511
+ from coord import merge_queue as mq # noqa: PLC0415
512
+
513
+ entries = mq.load_queue()
514
+ except Exception: # noqa: BLE001 — advisory only, see docstring
515
+ return None
516
+
517
+ matches = [
518
+ e for e in entries
519
+ if e.repo_name == repo_name and e.issue_number == issue_number
520
+ ]
521
+ if not matches:
522
+ return None
523
+ if fallback_assignment_id:
524
+ by_aid = [e for e in matches if e.assignment_id == fallback_assignment_id]
525
+ if by_aid:
526
+ matches = by_aid
527
+ # First match in list order — not the most recent — mirroring
528
+ # `coord.drive_state._merge_entry` (the docstring's own cited
529
+ # precedent for matching on this same `(repo_name, issue_number)` pair):
530
+ # when more than one row matches and none matches *fallback_assignment_id*
531
+ # (e.g. a retarget/new branch for the same issue left an old row behind),
532
+ # `coord gates` must agree with the other `merge_queue` consumers
533
+ # (`coord drive-queue block-log`, `coord status`, `_decide_merge`) on
534
+ # which row is "the" entry, or the same issue reads differently on
535
+ # different surfaces (#3445 review).
536
+ entry = matches[0]
537
+
538
+ state = (entry.state or "").upper()
539
+ # PENDING/MERGING/MERGED (and any future non-terminal state) read as
540
+ # "nothing to escalate here" — the raw state name is still shown, but
541
+ # unadorned. CONFLICT/HUMAN_REQUIRED/SKIPPED are the parked, needs-
542
+ # attention states. Delegated to `mq._state_to_plan_status` — the
543
+ # CANONICAL classifier for this exact question (`PENDING`->READY,
544
+ # `MERGING`->MERGING, `MERGED`->MERGED, anything else, including any
545
+ # future/unknown state -> NEEDS_ATTENTION) — rather than a second,
546
+ # hand-maintained tuple of "which states need attention" that could
547
+ # silently drift from it (#2096, #3445 review). That classifier fails
548
+ # CLOSED on an unrecognized state; re-deriving the tri-state locally
549
+ # would fail open instead, exactly the "gate must be able to fail"
550
+ # pattern this repo's review checklist calls out.
551
+ ok = mq._state_to_plan_status(entry.state or "") != mq.PLAN_NEEDS_ATTENTION
552
+
553
+ reason: str | None = None
554
+ if state == "HUMAN_REQUIRED":
555
+ aid = entry.assignment_id or fallback_assignment_id or "<assignment-id>"
556
+ detail_lines = [entry.error or "no reason recorded"]
557
+ latched = _iso(entry.last_attempt)
558
+ if latched:
559
+ detail_lines.append(
560
+ f"as of last merge-queue write {latched} — this timestamp "
561
+ "does not advance while the entry is parked, so treat it as "
562
+ "a LOWER BOUND on when it latched, not necessarily still "
563
+ "current (#3445)"
564
+ )
565
+ else:
566
+ detail_lines.append(
567
+ "latched time unknown — no merge-queue attempt timestamp "
568
+ "recorded on this entry"
569
+ )
570
+ detail_lines.append(
571
+ f"override: coord merge --only {aid} --override-human-required "
572
+ "'<reason>'"
573
+ )
574
+ reason = "\n".join(detail_lines)
575
+ elif not ok:
576
+ reason = entry.error or None
577
+
578
+ return GateDecision(
579
+ gate="merge_queue",
580
+ required=False,
581
+ ok=ok,
582
+ reason=reason,
583
+ state=state or None,
584
+ assignment_id=entry.assignment_id or None,
585
+ )
586
+
587
+
454
588
  def _apply_gate_decision(repo_name: str, issue_number: int) -> GateDecision | None:
455
589
  """The ``"apply"`` :class:`GateDecision` for *(repo_name, issue_number)*,
456
590
  or ``None`` when there is no ``--hold-after`` deploy-gate entry for it in
@@ -741,8 +875,42 @@ def build_gate_report(
741
875
  registry_decisions[gate_name] = decision
742
876
  report.decisions.append(decision)
743
877
 
878
+ # #3445: the REAL, persisted merge-queue row — distinct from the
879
+ # synthetic `entry` above, which always reads state=PENDING (see
880
+ # `_merge_queue_state_decision`'s docstring). Read AFTER the registry
881
+ # gates so it can be reported alongside them, but consulted FIRST below
882
+ # when deciding the merge gate's headline reason: a latched
883
+ # HUMAN_REQUIRED (or SKIPPED, #3445 review) entry is the actual reason
884
+ # nothing is moving, and no amount of review/smoke/registry-gate
885
+ # clearing can unstick it. CONFLICT is deliberately NOT in this set — it
886
+ # self-heals via `dispatch_conflict_fix` (#1474), so it does not outrank
887
+ # the normal review/smoke headline.
888
+ mq_state_decision = _merge_queue_state_decision(
889
+ repo_name, issue_number, winner.assignment_id,
890
+ )
891
+ if mq_state_decision is not None:
892
+ report.decisions.append(mq_state_decision)
893
+
744
894
  merge_blocked_gate: str | None = None
745
- if review_required and not review_ok:
895
+ if mq_state_decision is not None and mq_state_decision.state in (
896
+ "HUMAN_REQUIRED", "SKIPPED",
897
+ ):
898
+ # #3445 review: the full detail (reason, latched-time caveat,
899
+ # override command) is already rendered on the "merge-queue" line
900
+ # `format_gate_report` prints alongside this one — keep the
901
+ # presentation cross-reference ("see the merge-queue line above...")
902
+ # OUT of this data field, since `merge.reason` is also consumed
903
+ # verbatim by non-CLI-rendering readers with no such line above it
904
+ # (`coord.queue_diagnose`'s `_gates()` probe). This field stays a
905
+ # short, state-only headline; `format_gate_report` adds the
906
+ # cross-reference itself, only where the referent actually exists.
907
+ token = (
908
+ HUMAN_REQUIRED_BLOCKED
909
+ if mq_state_decision.state == "HUMAN_REQUIRED"
910
+ else SKIPPED_BLOCKED
911
+ )
912
+ merge_blocked_gate = f"{token} — {mq_state_decision.state}"
913
+ elif review_required and not review_ok:
746
914
  merge_blocked_gate = REVIEW_REQUIRED
747
915
  elif smoke_required and not test_ok:
748
916
  merge_blocked_gate = SMOKE_REQUIRED
@@ -912,6 +1080,29 @@ def format_gate_report(report: GateReport) -> str:
912
1080
  lines.append(f" {test.reason}")
913
1081
  else:
914
1082
  lines.append(f" test : BLOCKED — {test.reason}")
1083
+ # #3445: the REAL, persisted merge-queue row's state — distinct from
1084
+ # the review/test/merge decisions above, which are all evaluated
1085
+ # against a synthetic, never-persisted entry (see
1086
+ # `_merge_queue_state_decision`'s docstring). Only printed when a
1087
+ # row actually exists for this (repo, issue) — the common case for
1088
+ # an issue that never reached the merge queue at all is silence,
1089
+ # same convention as the "apply" line below. A HUMAN_REQUIRED row
1090
+ # gets its full multi-line detail (reason, latched-time caveat,
1091
+ # override command); every other state is a single unadorned line.
1092
+ merge_queue_decision = by_gate.get("merge_queue")
1093
+ if merge_queue_decision is not None:
1094
+ state_label = merge_queue_decision.state or "UNKNOWN"
1095
+ detail_lines = (
1096
+ merge_queue_decision.reason.split("\n")
1097
+ if merge_queue_decision.reason
1098
+ else []
1099
+ )
1100
+ if not detail_lines:
1101
+ lines.append(f" merge-queue : {state_label}")
1102
+ else:
1103
+ lines.append(f" merge-queue : {state_label} — {detail_lines[0]}")
1104
+ for extra in detail_lines[1:]:
1105
+ lines.append(f" {extra}")
915
1106
  # #3273 (S-5 of #3261): any other registry-backed gate (today just
916
1107
  # "uat") renders generically here, in `report.decisions`' own
917
1108
  # insertion order — a gate GATE_REGISTRY grows in the future needs no
@@ -919,7 +1110,7 @@ def format_gate_report(report: GateReport) -> str:
919
1110
  # skipped/inapplicable one (UAT not configured, or an exempt issue)
920
1111
  # gets an explicit reason instead of being silently omitted like it
921
1112
  # was before #3273.
922
- _KNOWN_GATE_LINES = ("review", "test", "merge", "apply")
1113
+ _KNOWN_GATE_LINES = ("review", "test", "merge_queue", "merge", "apply")
923
1114
  for decision in report.decisions:
924
1115
  if decision.gate in _KNOWN_GATE_LINES:
925
1116
  continue
@@ -938,9 +1129,27 @@ def format_gate_report(report: GateReport) -> str:
938
1129
  lines.append(f" {label} : BLOCKED — {decision.reason}")
939
1130
  merge = by_gate.get("merge")
940
1131
  if merge is not None:
941
- lines.append(
942
- " merge : READY" if merge.ok else f" merge : BLOCKED — {merge.reason}"
943
- )
1132
+ if merge.ok:
1133
+ lines.append(" merge : READY")
1134
+ else:
1135
+ lines.append(f" merge : BLOCKED — {merge.reason}")
1136
+ # #3445 review: the cross-reference belongs only in THIS
1137
+ # rendering, right after the "merge-queue" line it actually
1138
+ # points at — not baked into `merge.reason` itself, which
1139
+ # `coord.queue_diagnose`'s `_gates()` probe also surfaces
1140
+ # verbatim with no such line above it.
1141
+ if (
1142
+ merge_queue_decision is not None
1143
+ and merge_queue_decision.state in ("HUMAN_REQUIRED", "SKIPPED")
1144
+ ):
1145
+ lines.append(
1146
+ " (see the merge-queue line above for detail"
1147
+ + (
1148
+ " — the latched time and the override command)"
1149
+ if merge_queue_decision.state == "HUMAN_REQUIRED"
1150
+ else ")"
1151
+ )
1152
+ )
944
1153
  # #3236: only printed when a --hold-after deploy gate actually
945
1154
  # exists for this (repo, issue) — see `_apply_gate_decision`.
946
1155
  apply_ = by_gate.get("apply")
@@ -576,6 +576,77 @@ def test_parity_failure_names_both_board_comparands_not_a_table_count(lane):
576
576
  assert "/board (live)" in message
577
577
 
578
578
 
579
+ def _seed_recent_terminal_assignments(path: Path, *, count: int) -> None:
580
+ """*count* RECENT terminal rows — inside #762's retention window, but
581
+ when *count* exceeds `coord.board_wire.MAX_TERMINAL_ASSIGNMENTS`, past
582
+ #1791's tighter cardinality cap the `/board` route applies on top of
583
+ retention. This is the #3451 shape: a store where the 14-day window keeps
584
+ everything, yet `/board` still trims — the case
585
+ `live_board_assignment_count` silently skipped before this fix.
586
+ """
587
+ conn = sqlite3.connect(str(path))
588
+ conn.row_factory = sqlite3.Row
589
+ try:
590
+ _ensure_schema(conn)
591
+ now = time.time()
592
+ conn.executemany(
593
+ "INSERT INTO assignments (assignment_id, machine_name, repo_name, "
594
+ "repo_github, issue_number, issue_title, status, type, "
595
+ "dispatched_at, finished_at) VALUES (?,?,?,?,?,?,?,?,?,?)",
596
+ [
597
+ (
598
+ f"recent-term-{i}",
599
+ "precision",
600
+ "claude-coordinator",
601
+ "JDonaghy/claude-coordinator",
602
+ 500_000 + i,
603
+ f"recent issue {i}",
604
+ "done",
605
+ "work",
606
+ now - i,
607
+ now - i,
608
+ )
609
+ for i in range(count)
610
+ ],
611
+ )
612
+ conn.commit()
613
+ finally:
614
+ conn.close()
615
+
616
+
617
+ def test_live_board_assignment_count_matches_the_real_board_route_past_the_cap(
618
+ tmp_path, valid_config_path, coord_db,
619
+ ):
620
+ """#3451: the live side must count exactly what a real `/board` route
621
+ would serve for the same file — including #1791's `MAX_TERMINAL_ASSIGNMENTS`
622
+ cardinality cap, not just #762's retention window (#3135's fix stopped
623
+ short of it). Pins the two paths together with the real route, not a
624
+ reimplementation of it, so a future cap cannot drift between them again.
625
+ """
626
+ pytest.importorskip("uvicorn")
627
+ from starlette.testclient import TestClient # noqa: PLC0415
628
+
629
+ from coord.board_wire import MAX_TERMINAL_ASSIGNMENTS # noqa: PLC0415
630
+ from coord.config import load as load_config # noqa: PLC0415
631
+ from coord.dao import SqliteStore # noqa: PLC0415
632
+ from coord.serve_app import build_app # noqa: PLC0415
633
+
634
+ db_path = tmp_path / "live-shaped.db"
635
+ _seed_recent_terminal_assignments(db_path, count=MAX_TERMINAL_ASSIGNMENTS + 150)
636
+
637
+ app = build_app(SqliteStore(db_path), load_config(valid_config_path))
638
+ with TestClient(app) as client:
639
+ resp = client.get("/board")
640
+ assert resp.status_code == 200
641
+ route_served = resp.json()["assignments"]
642
+
643
+ # Sanity: the seed really is past the cap — otherwise this test cannot
644
+ # tell the #3451 fix apart from the bug it regression-tests.
645
+ assert len(route_served) < MAX_TERMINAL_ASSIGNMENTS + 150
646
+
647
+ assert dr_verify.live_board_assignment_count(db_path) == len(route_served)
648
+
649
+
579
650
  # ==========================================================================
580
651
  # Acceptance: the scratch copy is removed on EVERY exit path
581
652
  # ==========================================================================
@@ -12,7 +12,9 @@ import pytest
12
12
  from coord import merge_queue as mq
13
13
  from coord.config import Config, PipelineConfig, ReviewsConfig
14
14
  from coord.gates import (
15
+ HUMAN_REQUIRED_BLOCKED,
15
16
  REVIEW_REQUIRED,
17
+ SKIPPED_BLOCKED,
16
18
  SMOKE_REQUIRED,
17
19
  build_gate_report,
18
20
  format_gate_report,
@@ -824,6 +826,212 @@ class TestApplyGate:
824
826
  assert "MERGED, NOT APPLIED" not in text
825
827
 
826
828
 
829
+ # ── merge-queue latched state (#3445) ────────────────────────────────────────
830
+ # `mq.live_gate_entry` (used for the review/test/registry gates above) is a
831
+ # SYNTHETIC, never-persisted QueuedMerge — it always reads state=PENDING, so
832
+ # it was blind to a latched CONFLICT/HUMAN_REQUIRED/SKIPPED row. These tests
833
+ # cover the REAL, persisted `merge_queue` table read this issue adds.
834
+
835
+ class TestMergeQueueHumanRequired:
836
+ def test_no_merge_queue_entry_means_no_merge_queue_line(
837
+ self, config: Config, coord_db,
838
+ ) -> None:
839
+ work = _work(test_state=None)
840
+ review = _review("w1", verdict="approve")
841
+ board = Board(active=[], completed=[work, review])
842
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
843
+
844
+ by_gate = {d.gate: d for d in report.decisions}
845
+ assert "merge_queue" not in by_gate
846
+ assert by_gate["merge"].reason == SMOKE_REQUIRED
847
+
848
+ def test_pending_merge_queue_entry_does_not_override_smoke_required(
849
+ self, config: Config, coord_db,
850
+ ) -> None:
851
+ work = _work(test_state=None)
852
+ review = _review("w1", verdict="approve")
853
+ board = Board(active=[], completed=[work, review])
854
+ mq.save_queue([
855
+ mq.QueuedMerge(
856
+ assignment_id="w1", repo_name="api", repo_github="acme/api",
857
+ branch="issue-42-foo", target_branch="main", issue_number=42,
858
+ issue_title="t", state=mq.PENDING,
859
+ )
860
+ ])
861
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
862
+
863
+ by_gate = {d.gate: d for d in report.decisions}
864
+ assert by_gate["merge_queue"].state == "PENDING"
865
+ assert by_gate["merge_queue"].ok is True
866
+ assert by_gate["merge"].reason == SMOKE_REQUIRED
867
+ assert "merge-queue : PENDING" in format_gate_report(report)
868
+
869
+ def test_human_required_entry_outranks_smoke_required(
870
+ self, config: Config, coord_db,
871
+ ) -> None:
872
+ # #3445 repro (vimcode#523/#526): smoke never ran (test_state=None)
873
+ # AND the merge-queue entry already latched HUMAN_REQUIRED — a
874
+ # stale-rebase worker refused to push a non-content-preserving
875
+ # rebase. Clearing the smoke gate cannot unstick that, so it must be
876
+ # the merge gate's HEADLINE reason, not "smoke_required".
877
+ work = _work(test_state=None)
878
+ review = _review("w1", verdict="approve")
879
+ board = Board(active=[], completed=[work, review])
880
+ mq.save_queue([
881
+ mq.QueuedMerge(
882
+ assignment_id="w1", repo_name="api", repo_github="acme/api",
883
+ branch="issue-42-foo", target_branch="main", issue_number=42,
884
+ issue_title="t", state=mq.HUMAN_REQUIRED,
885
+ error=(
886
+ "stale-rebase worker refused to push: rebase was not "
887
+ "content-preserving — manual resolution required"
888
+ ),
889
+ last_attempt=1_700_000_000.0,
890
+ )
891
+ ])
892
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
893
+
894
+ by_gate = {d.gate: d for d in report.decisions}
895
+ mq_decision = by_gate["merge_queue"]
896
+ assert mq_decision.state == "HUMAN_REQUIRED"
897
+ assert mq_decision.ok is False
898
+ assert "stale-rebase worker refused to push" in mq_decision.reason
899
+ assert "--override-human-required" in mq_decision.reason
900
+
901
+ merge = by_gate["merge"]
902
+ assert merge.ok is False
903
+ assert merge.reason != SMOKE_REQUIRED
904
+ assert merge.reason.startswith(HUMAN_REQUIRED_BLOCKED)
905
+ assert "HUMAN_REQUIRED" in merge.reason
906
+
907
+ text = format_gate_report(report)
908
+ assert "HUMAN_REQUIRED" in text
909
+ assert "stale-rebase worker refused to push" in text
910
+ assert "--override-human-required" in text
911
+ assert "merge-queue : HUMAN_REQUIRED" in text
912
+ assert "smoke_required" not in text
913
+
914
+ def test_human_required_with_no_recorded_error_still_reports(
915
+ self, config: Config, coord_db,
916
+ ) -> None:
917
+ """A HUMAN_REQUIRED entry with no `error` text at all (shouldn't
918
+ normally happen, but the reader must not crash or go silent)."""
919
+ work = _work(test_state="passed")
920
+ review = _review("w1", verdict="approve")
921
+ board = Board(active=[], completed=[work, review])
922
+ mq.save_queue([
923
+ mq.QueuedMerge(
924
+ assignment_id="w1", repo_name="api", repo_github="acme/api",
925
+ branch="issue-42-foo", target_branch="main", issue_number=42,
926
+ issue_title="t", state=mq.HUMAN_REQUIRED,
927
+ )
928
+ ])
929
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
930
+
931
+ by_gate = {d.gate: d for d in report.decisions}
932
+ assert "no reason recorded" in by_gate["merge_queue"].reason
933
+ assert "latched time unknown" in by_gate["merge_queue"].reason
934
+ assert by_gate["merge"].reason.startswith(HUMAN_REQUIRED_BLOCKED)
935
+
936
+ def test_skipped_entry_also_outranks_smoke_required(
937
+ self, config: Config, coord_db,
938
+ ) -> None:
939
+ """#3445 review: SKIPPED is the sibling terminal, needs-attention
940
+ state to HUMAN_REQUIRED (unlike CONFLICT, which self-heals via
941
+ `dispatch_conflict_fix`) — it must outrank `smoke_required` as the
942
+ merge gate's headline reason too, not just HUMAN_REQUIRED."""
943
+ work = _work(test_state=None)
944
+ review = _review("w1", verdict="approve")
945
+ board = Board(active=[], completed=[work, review])
946
+ mq.save_queue([
947
+ mq.QueuedMerge(
948
+ assignment_id="w1", repo_name="api", repo_github="acme/api",
949
+ branch="issue-42-foo", target_branch="main", issue_number=42,
950
+ issue_title="t", state=mq.SKIPPED,
951
+ error="closed as duplicate of #99",
952
+ )
953
+ ])
954
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
955
+
956
+ by_gate = {d.gate: d for d in report.decisions}
957
+ mq_decision = by_gate["merge_queue"]
958
+ assert mq_decision.state == "SKIPPED"
959
+ assert mq_decision.ok is False
960
+
961
+ merge = by_gate["merge"]
962
+ assert merge.ok is False
963
+ assert merge.reason != SMOKE_REQUIRED
964
+ assert merge.reason.startswith(SKIPPED_BLOCKED)
965
+ assert "SKIPPED" in merge.reason
966
+
967
+ text = format_gate_report(report)
968
+ assert "merge-queue : SKIPPED" in text
969
+ assert "smoke_required" not in text
970
+
971
+ def test_conflict_entry_does_not_outrank_smoke_required(
972
+ self, config: Config, coord_db,
973
+ ) -> None:
974
+ """CONFLICT is excluded from the headline override on purpose — it
975
+ self-heals via a `coord merge --only` retry (`dispatch_conflict_fix`,
976
+ #1474), so `smoke_required` stays the accurate headline reason."""
977
+ work = _work(test_state=None)
978
+ review = _review("w1", verdict="approve")
979
+ board = Board(active=[], completed=[work, review])
980
+ mq.save_queue([
981
+ mq.QueuedMerge(
982
+ assignment_id="w1", repo_name="api", repo_github="acme/api",
983
+ branch="issue-42-foo", target_branch="main", issue_number=42,
984
+ issue_title="t", state=mq.CONFLICT,
985
+ error="merge conflict in foo.py",
986
+ )
987
+ ])
988
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
989
+
990
+ by_gate = {d.gate: d for d in report.decisions}
991
+ assert by_gate["merge_queue"].state == "CONFLICT"
992
+ assert by_gate["merge_queue"].ok is False
993
+ assert by_gate["merge"].reason == SMOKE_REQUIRED
994
+
995
+ def test_multiple_rows_for_same_issue_picks_first_match_in_list_order(
996
+ self, config: Config, coord_db,
997
+ ) -> None:
998
+ """#3445 review: when more than one `merge_queue` row matches
999
+ `(repo_name, issue_number)` and none matches the winning work row's
1000
+ assignment id, `coord gates` must pick the SAME row every other
1001
+ `merge_queue` consumer would — `coord.drive_state._merge_entry`
1002
+ takes the first match in list order (oldest/lowest id), not the most
1003
+ recent, so this mirrors that instead of silently disagreeing with
1004
+ `coord drive-queue block-log`/`coord status`/`_decide_merge` about
1005
+ which row is "the" entry for this issue."""
1006
+ work = _work(test_state=None)
1007
+ review = _review("w1", verdict="approve")
1008
+ board = Board(active=[], completed=[work, review])
1009
+ mq.save_queue([
1010
+ mq.QueuedMerge(
1011
+ assignment_id="stale-aid", repo_name="api", repo_github="acme/api",
1012
+ branch="issue-42-old-branch", target_branch="main", issue_number=42,
1013
+ issue_title="t", state=mq.HUMAN_REQUIRED,
1014
+ error="first (older) row — left behind by a retarget",
1015
+ ),
1016
+ mq.QueuedMerge(
1017
+ assignment_id="other-stale-aid", repo_name="api", repo_github="acme/api",
1018
+ branch="issue-42-newer-branch", target_branch="main", issue_number=42,
1019
+ issue_title="t", state=mq.PENDING,
1020
+ error="second (newer) row",
1021
+ ),
1022
+ ])
1023
+ report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
1024
+
1025
+ by_gate = {d.gate: d for d in report.decisions}
1026
+ mq_decision = by_gate["merge_queue"]
1027
+ # Neither row's assignment_id matches the winning work row ("w1"),
1028
+ # so the fallback-by-assignment-id narrowing never kicks in — the
1029
+ # first (oldest) row in insertion order wins.
1030
+ assert mq_decision.assignment_id == "stale-aid"
1031
+ assert mq_decision.state == "HUMAN_REQUIRED"
1032
+ assert "first (older) row" in mq_decision.reason
1033
+
1034
+
827
1035
  # ── is_interactive enrichment (#748/#632: not an Assignment dataclass field) ─
828
1036
 
829
1037
  class TestIsInteractive:
@@ -220,7 +220,7 @@ SQLITE_CONNECT_ALLOWLIST: dict[str, Classification] = {
220
220
  "it.",
221
221
  ),
222
222
  "test_dr_verify.py": Classification(
223
- 4, (BUCKET_A,),
223
+ 5, (BUCKET_A,),
224
224
  "#3119's DR-verify lane — the restore half of test_backup.py directly "
225
225
  "above, and filed A for the same reason. All four sites build or "
226
226
  "mutate a real on-disk SQLite *file* that is then snapshotted, "
@@ -239,6 +239,15 @@ SQLITE_CONNECT_ALLOWLIST: dict[str, Classification] = {
239
239
  "restore it. (The zero-assignments parity case reuses "
240
240
  "hollow_out_assignments() rather than opening its own connection, so "
241
241
  "#3135 added one site, not two.) "
242
+ "+1 for #3451's _seed_recent_terminal_assignments(), which bulk-"
243
+ "inserts RECENT terminal rows past #1791's MAX_TERMINAL_ASSIGNMENTS "
244
+ "cardinality cap into a real on-disk file so the live side can be "
245
+ "pinned against a genuine /board TestClient response — the case "
246
+ "live_board_assignment_count silently skipped before this fix, "
247
+ "because #3135's retention window alone was not enough to trigger "
248
+ "the cap. Same file, same reason: it has to be an on-disk file "
249
+ "because the very next thing the test does is open it through both "
250
+ "SqliteStore(by path) and dr_verify.live_board_assignment_count(). "
242
251
  "The autouse coord_db fixture cannot serve any of them — there "
243
252
  "is no file to restic — and scratch_database() is out for the usual "
244
253
  "backend-following reason: under COORD_TEST_BACKEND=postgres these "