code-coordinator 0.5.490__tar.gz → 0.5.491__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 (897) hide show
  1. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/diagnose.py +164 -0
  5. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/state.py +30 -0
  6. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_diagnose.py +153 -0
  7. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_state.py +40 -0
  8. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/.gitignore +0 -0
  21. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/GOAL.md +0 -0
  23. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/LICENSE +0 -0
  24. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/README.md +0 -0
  26. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/approved_work.py +0 -0
  43. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/backup.py +0 -0
  46. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/ci_fix.py +0 -0
  55. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/claude_setup_token.py +0 -0
  60. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/client.py +0 -0
  62. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/codegen.py +0 -0
  63. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/backup.py +0 -0
  69. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/codegen.py +0 -0
  71. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/dr.py +0 -0
  74. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/drive.py +0 -0
  75. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/drive_queue.py +0 -0
  76. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/machine.py +0 -0
  81. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/pr.py +0 -0
  87. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/config.py +0 -0
  101. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/db.py +0 -0
  111. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dead_end.py +0 -0
  112. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/decomposition_chat.py +0 -0
  113. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-backup.service +0 -0
  116. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-backup.timer +0 -0
  117. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-dr-verify.service +0 -0
  121. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-dr-verify.timer +0 -0
  122. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-drive-queue.service +0 -0
  123. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-drive-queue.timer +0 -0
  124. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-failure-notify.service +0 -0
  125. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-fleet-watchdog.service +0 -0
  126. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  127. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-notify.service +0 -0
  128. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-notify.timer +0 -0
  129. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-release-propagate.service +0 -0
  130. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-release-propagate.timer +0 -0
  131. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-release-window.service +0 -0
  132. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-release-window.timer +0 -0
  133. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-serve.service +0 -0
  134. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-web-dist-build.service +0 -0
  135. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-web-dist-build.timer +0 -0
  136. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy/coord-web.service +0 -0
  137. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy_manifest.py +0 -0
  138. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deploy_units.py +0 -0
  139. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deprecation_telemetry.py +0 -0
  140. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/deps.py +0 -0
  141. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dispatch.py +0 -0
  142. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dispatch_liveness.py +0 -0
  143. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dist_name.py +0 -0
  144. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dr_promote.py +0 -0
  145. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/dr_verify.py +0 -0
  146. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/drive.py +0 -0
  147. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/drive_queue.py +0 -0
  148. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/drive_state.py +0 -0
  149. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/events.py +0 -0
  150. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/failure_class.py +0 -0
  151. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/failure_classifier.py +0 -0
  152. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/filelock.py +0 -0
  153. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/fleet_config_health.py +0 -0
  154. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/forge_availability.py +0 -0
  155. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/freshness.py +0 -0
  156. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/gate_a.py +0 -0
  157. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/gate_b.py +0 -0
  158. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/gate_snapshot.py +0 -0
  159. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/gates.py +0 -0
  160. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/gen_board_fixture.py +0 -0
  161. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/github_ops.py +0 -0
  162. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/github_throttle.py +0 -0
  163. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/goal.py +0 -0
  164. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/graph_health.py +0 -0
  165. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/__init__.py +0 -0
  166. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/aggregate.py +0 -0
  167. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/__init__.py +0 -0
  168. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/_ci_pin.py +0 -0
  169. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/agent_install.py +0 -0
  170. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/cargo_targets.py +0 -0
  171. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/claude_binary.py +0 -0
  172. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/config_drift.py +0 -0
  173. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  174. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/coord_web_ci_pin.py +0 -0
  175. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/deploy_lane_facts.py +0 -0
  176. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/disk.py +0 -0
  177. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/fleet_board.py +0 -0
  178. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  179. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/fleet_phantom.py +0 -0
  180. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/fleet_unit_drift.py +0 -0
  181. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/graph.py +0 -0
  182. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/graphify_cli.py +0 -0
  183. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/index_lock.py +0 -0
  184. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/issues_sync_staleness.py +0 -0
  185. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/plan_usage.py +0 -0
  186. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/pr_churn.py +0 -0
  187. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/release_cordon.py +0 -0
  188. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/repo_state.py +0 -0
  189. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/spawned_coord.py +0 -0
  190. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/stalled_pipeline.py +0 -0
  191. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/timer_active.py +0 -0
  192. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/toolchain.py +0 -0
  193. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/unit_drift.py +0 -0
  194. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/unit_enablement.py +0 -0
  195. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/wedged_drive_queue.py +0 -0
  196. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/checks/worktrees.py +0 -0
  197. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/cli.py +0 -0
  198. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/context.py +0 -0
  199. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/fleet_snapshot.py +0 -0
  200. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/models.py +0 -0
  201. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/pypi.py +0 -0
  202. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/registry.py +0 -0
  203. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/render.py +0 -0
  204. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/health/units.py +0 -0
  205. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/hooks.py +0 -0
  206. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/housekeeping.py +0 -0
  207. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/interactive.py +0 -0
  208. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/invariant_alarms.py +0 -0
  209. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/issue_store.py +0 -0
  210. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/issues_sync_status.py +0 -0
  211. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/liveness_auditor.py +0 -0
  212. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/machine_fault.py +0 -0
  213. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/machine_metrics.py +0 -0
  214. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/machine_onboard.py +0 -0
  215. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/machine_pause.py +0 -0
  216. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/machine_stats.py +0 -0
  217. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/merge_queue.py +0 -0
  218. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/milestone_chat.py +0 -0
  219. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/milestone_dispatch.py +0 -0
  220. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/milestone_gate.py +0 -0
  221. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/milestone_order.py +0 -0
  222. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/mock_author.py +0 -0
  223. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/models.py +0 -0
  224. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/network.py +0 -0
  225. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/new_issue_chat.py +0 -0
  226. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/__init__.py +0 -0
  227. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/baseline.py +0 -0
  228. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/cli.py +0 -0
  229. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/collect.py +0 -0
  230. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/digest.py +0 -0
  231. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/models.py +0 -0
  232. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/predicate.py +0 -0
  233. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/service.py +0 -0
  234. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/store.py +0 -0
  235. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notifier/transport.py +0 -0
  236. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/notify.py +0 -0
  237. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/openapi.py +0 -0
  238. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/overlap_fence.py +0 -0
  239. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/overlap_predict.py +0 -0
  240. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/parentage.py +0 -0
  241. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/parentage_github.py +0 -0
  242. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/pipeline.py +0 -0
  243. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/plan_parser.py +0 -0
  244. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/plans.py +0 -0
  245. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/platform_paths.py +0 -0
  246. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/portal_bridge.py +0 -0
  247. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/portal_store.py +0 -0
  248. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/portal_sync.py +0 -0
  249. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/pr_body_lint.py +0 -0
  250. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/prereqs.py +0 -0
  251. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/progress.py +0 -0
  252. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/providers/__init__.py +0 -0
  253. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/providers/base.py +0 -0
  254. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/providers/claude.py +0 -0
  255. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/providers/claude_pty.py +0 -0
  256. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/providers/opencode.py +0 -0
  257. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/queue_diagnose.py +0 -0
  258. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/reconcile.py +0 -0
  259. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/reconcile_tick.py +0 -0
  260. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/refine_chat.py +0 -0
  261. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/release_cordon.py +0 -0
  262. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/release_propagate.py +0 -0
  263. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/release_verify.py +0 -0
  264. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/release_window.py +0 -0
  265. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/repo_dormancy.py +0 -0
  266. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/repo_edit.py +0 -0
  267. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/repo_onboard.py +0 -0
  268. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/reports.py +0 -0
  269. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/rest_schema.py +0 -0
  270. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/revalidate.py +0 -0
  271. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/review.py +0 -0
  272. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/scorecard.py +0 -0
  273. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/self_health.py +0 -0
  274. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/serve_app.py +0 -0
  275. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  276. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  277. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  278. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  279. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  280. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/portal-followup/SKILL.md +0 -0
  281. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/release-now/SKILL.md +0 -0
  282. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  283. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  284. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/skills/update-issue/SKILL.md +0 -0
  285. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/smoke.py +0 -0
  286. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/spend_ceiling.py +0 -0
  287. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/split_work.py +0 -0
  288. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/sql.py +0 -0
  289. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/stage_projection.py +0 -0
  290. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/store_migrate.py +0 -0
  291. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/store_parity.py +0 -0
  292. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/templates/deploy-cloudflare.node.yml +0 -0
  293. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/test_author.py +0 -0
  294. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/test_chat.py +0 -0
  295. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/test_orchestrator.py +0 -0
  296. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/test_report.py +0 -0
  297. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/tui_release.py +0 -0
  298. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/uat_checks.py +0 -0
  299. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/usage.py +0 -0
  300. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/usage_limits.py +0 -0
  301. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/usage_rollup.py +0 -0
  302. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coord/worker_events.py +0 -0
  303. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/coordinator.example.yml +0 -0
  304. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-agent.service +0 -0
  305. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-backup.service +0 -0
  306. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-backup.timer +0 -0
  307. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-db-backup.service +0 -0
  308. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-db-backup.sh +0 -0
  309. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-db-backup.timer +0 -0
  310. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-dr-verify.service +0 -0
  311. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-dr-verify.timer +0 -0
  312. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-drive-queue.service +0 -0
  313. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-drive-queue.timer +0 -0
  314. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-failure-notify.service +0 -0
  315. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-failure-notify.sh +0 -0
  316. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-fleet-watchdog.service +0 -0
  317. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-fleet-watchdog.timer +0 -0
  318. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-notify.service +0 -0
  319. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-notify.timer +0 -0
  320. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-release-propagate.service +0 -0
  321. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-release-propagate.timer +0 -0
  322. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-release-window.service +0 -0
  323. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-release-window.timer +0 -0
  324. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-serve.service +0 -0
  325. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.service +0 -0
  326. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.sh +0 -0
  327. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.timer +0 -0
  328. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-web-rollback.sh +0 -0
  329. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/coord-web.service +0 -0
  330. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/deploy/node-shim.sh +0 -0
  331. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ADR_COORD_TUI_CI.md +0 -0
  332. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  333. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_CI.md +0 -0
  334. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_DIST.md +0 -0
  335. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  336. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/AGENT_OPERATIONS.md +0 -0
  337. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ARCHITECTURE.md +0 -0
  338. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ARCH_SECURITY_GATES.md +0 -0
  339. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/COCKPIT.md +0 -0
  340. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/CONTROL_CENTER.md +0 -0
  341. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/COST_DISCIPLINE.md +0 -0
  342. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/CROSS_PLATFORM.md +0 -0
  343. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/CUSTOMER_FACING_APPS.md +0 -0
  344. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/CUSTOMER_PORTAL.md +0 -0
  345. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/DATA_STORE_SELECTION.md +0 -0
  346. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/DISASTER_RECOVERY.md +0 -0
  347. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/DRIVE_QUEUE.md +0 -0
  348. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/EPHEMERAL_WORKERS.md +0 -0
  349. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/FORGE_MIGRATION.md +0 -0
  350. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/GRAPHIFY_SETUP.md +0 -0
  351. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ISSUE_GUIDANCE.md +0 -0
  352. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/MAC_MINI.md +0 -0
  353. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  354. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/NOTIFIER.md +0 -0
  355. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/OPENCODE_VERIFICATION.md +0 -0
  356. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/OPERATING_GOTCHAS.md +0 -0
  357. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/OPERATOR_GUIDES.md +0 -0
  358. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/ORACLE_LOOP.md +0 -0
  359. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/PHONE_WEBAPP.md +0 -0
  360. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/PIPELINE_V2.md +0 -0
  361. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/PLATFORM_EVOLUTION.md +0 -0
  362. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/SECOND_BACKEND.md +0 -0
  363. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/STORE_SERVICE.md +0 -0
  364. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  365. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/WEB_CONTROL_CENTER.md +0 -0
  366. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/WSL_WINDOWS_WORKER.md +0 -0
  367. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/mocks/web/README.md +0 -0
  368. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/mocks/web/_tokens.css +0 -0
  369. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/mocks/web/issue-detail.html +0 -0
  370. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/mocks/web/pipeline-narrow.html +0 -0
  371. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/docs/mocks/web/pipeline-wide.html +0 -0
  372. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/graphify-out/.gitignore +0 -0
  373. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/install-agent.sh +0 -0
  374. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/pyproject.toml +0 -0
  375. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/audit_review_verdict_overrides.py +0 -0
  376. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  377. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/build-worker-image.sh +0 -0
  378. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/coordinator-machine.py +0 -0
  379. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/dr-down.sh +0 -0
  380. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/dr-up.sh +0 -0
  381. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/epic-down.sh +0 -0
  382. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/epic-up.sh +0 -0
  383. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/preflight.sh +0 -0
  384. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/provision-server.sh +0 -0
  385. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/provision-worker.sh +0 -0
  386. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  387. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  388. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/throwaway-vm.sh +0 -0
  389. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/azure-workers/verify-github-token.sh +0 -0
  390. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/check_gh_argv_containment.py +0 -0
  391. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/codegen.py +0 -0
  392. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-test-runner.sh +0 -0
  393. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  394. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  395. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  396. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  397. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/coord-venv-rollback.sh +0 -0
  398. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/drive-batch.sh +0 -0
  399. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/extract-coord-tui.sh +0 -0
  400. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/fleet_watchdog.py +0 -0
  401. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/gen_board_fixture.py +0 -0
  402. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/gen_mock_index.py +0 -0
  403. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/lib/provision-core.sh +0 -0
  404. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/next_release_tag.py +0 -0
  405. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/provision-machine.sh +0 -0
  406. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/run_tests_in_populated_home.sh +0 -0
  407. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/run_tests_without_gh.sh +0 -0
  408. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/setup-macmini.sh +0 -0
  409. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/smoke_437_interactive.py +0 -0
  410. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/verify-provision-noble.sh +0 -0
  411. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/verify_878_review_capture.py +0 -0
  412. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/verify_release_published.py +0 -0
  413. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/scripts/verify_release_wheel.py +0 -0
  414. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/setup.cfg +0 -0
  415. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/SMOKE_SET.md +0 -0
  416. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/__init__.py +0 -0
  417. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-37/conftest.py +0 -0
  418. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-37/contract.md +0 -0
  419. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-37/manifest.yml +0 -0
  420. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  421. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  422. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/contract.md +0 -0
  423. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  424. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  425. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/manifest.yml +0 -0
  426. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  427. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-51/tsconfig.json +0 -0
  428. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/backends.py +0 -0
  430. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/conftest.py +0 -0
  431. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/board-pipeline-basic.json +0 -0
  432. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  433. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  434. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  435. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  436. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/all_pass.json +0 -0
  437. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  438. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/mixed_fail.json +0 -0
  439. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  440. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  441. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/skip.json +0 -0
  442. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/playwright/truncated.json +0 -0
  443. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  444. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  445. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  446. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  447. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  448. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  449. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  450. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  451. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_acceptance.py +0 -0
  452. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_acceptance_drivers.py +0 -0
  453. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent.py +0 -0
  454. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_api_error.py +0 -0
  455. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_app.py +0 -0
  456. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_branch_base.py +0 -0
  457. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_branch_capture.py +0 -0
  458. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_config_free_1712.py +0 -0
  459. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_deploy_units_endpoint.py +0 -0
  460. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_dirty_worktree.py +0 -0
  461. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  462. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_graph_self_heal.py +0 -0
  463. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_health_h3.py +0 -0
  464. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_idle_restart.py +0 -0
  465. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_push_failure.py +0 -0
  466. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_reap.py +0 -0
  467. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_repos_and_pull.py +0 -0
  468. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_restart_services_endpoint.py +0 -0
  469. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_skills_self_heal.py +0 -0
  470. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_startup_diagnostics.py +0 -0
  471. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_update.py +0 -0
  472. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_update_bluegreen.py +0 -0
  473. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_usage_limit.py +0 -0
  474. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_agent_zero_commit.py +0 -0
  475. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ambient_home_isolation.py +0 -0
  476. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approve_capability_reroute_3241.py +0 -0
  477. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approve_dependency_busy_2804.py +0 -0
  478. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approve_reject_plan.py +0 -0
  479. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approve_usage_gate.py +0 -0
  480. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approved_work_2532.py +0 -0
  481. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_approved_work_2996.py +0 -0
  482. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_assignment_already_recorded_daemon.py +0 -0
  483. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_audit_log.py +0 -0
  484. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_audit_outcome.py +0 -0
  485. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_audit_query.py +0 -0
  486. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_auto_loop.py +0 -0
  487. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_auto_release_publish_2035.py +0 -0
  488. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_backend_selection.py +0 -0
  489. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_backup.py +0 -0
  490. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_base_checkout_restore.py +0 -0
  491. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_block_log.py +0 -0
  492. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_cap_762.py +0 -0
  493. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_fixture.py +0 -0
  494. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_read_path.py +0 -0
  495. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_schema.py +0 -0
  496. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_service.py +0 -0
  497. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_state.py +0 -0
  498. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_board_wire.py +0 -0
  499. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_brain.py +0 -0
  500. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_branch_model.py +0 -0
  501. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_bug_intake.py +0 -0
  502. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_build_worker_image_env_update.py +0 -0
  503. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cargo_cache.py +0 -0
  504. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_check_gh_argv_containment.py +0 -0
  505. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_acceptance_gate_1950.py +0 -0
  506. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_fix.py +0 -0
  507. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_github.py +0 -0
  508. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_gitlab.py +0 -0
  509. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_parity_2091.py +0 -0
  510. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_ci_store.py +0 -0
  511. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_claim.py +0 -0
  512. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_claude_md_budget.py +0 -0
  513. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_claude_setup_token.py +0 -0
  514. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_acceptance.py +0 -0
  515. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_assign.py +0 -0
  516. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  517. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_assign_interactive_remote.py +0 -0
  518. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_assign_provider.py +0 -0
  519. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  520. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_audit.py +0 -0
  521. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_chat_continue.py +0 -0
  522. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_codegen.py +0 -0
  523. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_decide.py +0 -0
  524. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_capability_rules.py +0 -0
  525. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_config_provenance.py +0 -0
  526. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_forge_availability.py +0 -0
  527. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_graph.py +0 -0
  528. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_self.py +0 -0
  529. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_diagnose_test_coverage.py +0 -0
  530. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_doctor.py +0 -0
  531. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_doctor_config_free_1801.py +0 -0
  532. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  533. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  534. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_drive.py +0 -0
  535. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_drive_queue.py +0 -0
  536. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_escalate.py +0 -0
  537. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_fix_headless_review.py +0 -0
  538. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_gate_a.py +0 -0
  539. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_install_drift.py +0 -0
  540. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_install_skills.py +0 -0
  541. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_issue_comment.py +0 -0
  542. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_issue_create_label.py +0 -0
  543. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_issue_reopen.py +0 -0
  544. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_issue_view_list.py +0 -0
  545. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_merge.py +0 -0
  546. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_assign.py +0 -0
  547. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_capture.py +0 -0
  548. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_chat_add_child.py +0 -0
  549. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_dispatch.py +0 -0
  550. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_gate_b.py +0 -0
  551. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_gate_c.py +0 -0
  552. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_order.py +0 -0
  553. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  554. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_milestone_ship.py +0 -0
  555. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_network.py +0 -0
  556. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_new_issue_chat.py +0 -0
  557. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_plans.py +0 -0
  558. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_portal.py +0 -0
  559. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_pr.py +0 -0
  560. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_pull_artifact.py +0 -0
  561. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_queue.py +0 -0
  562. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_reattach_sessions.py +0 -0
  563. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_refine_board.py +0 -0
  564. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_release_preflight.py +0 -0
  565. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_release_propagate.py +0 -0
  566. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_release_window.py +0 -0
  567. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_repo_2220.py +0 -0
  568. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  569. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_scorecard.py +0 -0
  570. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_serve_store_backend_3084.py +0 -0
  571. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_contested_tag.py +0 -0
  574. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_invariant_alarms.py +0 -0
  575. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_machine_fault.py +0 -0
  576. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_merge_queue.py +0 -0
  577. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_provider.py +0 -0
  578. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_retried_3340.py +0 -0
  579. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_review_finalizing.py +0 -0
  580. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_test_failed_tag.py +0 -0
  581. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_status_usage_limit.py +0 -0
  582. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_sync_comments_873.py +0 -0
  583. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_test_plan.py +0 -0
  584. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_track.py +0 -0
  585. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_tui_update.py +0 -0
  586. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cli_wait.py +0 -0
  587. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_client.py +0 -0
  588. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_client_base_install.py +0 -0
  589. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_client_config_cache_atomic_3052.py +0 -0
  590. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_client_resource_migration_1946.py +0 -0
  591. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_commands_common.py +0 -0
  592. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_comments.py +0 -0
  593. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_completion_summary.py +0 -0
  594. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config.py +0 -0
  595. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_acceptance.py +0 -0
  596. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_audit.py +0 -0
  597. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_drift_check.py +0 -0
  598. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_pricing.py +0 -0
  599. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  600. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_config_usage_gate.py +0 -0
  601. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_confirm_test.py +0 -0
  602. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_conflict_fix.py +0 -0
  603. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_conflict_fix_semantic.py +0 -0
  604. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  605. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test.py +0 -0
  606. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  607. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test_runner_baseline.py +0 -0
  608. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test_runner_populated_home.py +0 -0
  609. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test_runner_routing.py +0 -0
  610. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_test_runner_toolchain.py +0 -0
  611. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_uat.py +0 -0
  612. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coord_web_sse_restart_live.py +0 -0
  613. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_coordinator_machine.py +0 -0
  614. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_cross_platform_imports.py +0 -0
  615. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dao.py +0 -0
  616. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard.py +0 -0
  617. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard_api.py +0 -0
  618. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard_fixture.py +0 -0
  619. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard_server.py +0 -0
  620. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard_terminal.py +0 -0
  621. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dashboard_terminal_live.py +0 -0
  622. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_db.py +0 -0
  623. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dead_end.py +0 -0
  624. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_decomposition_chat.py +0 -0
  625. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_coord_db_backup.py +0 -0
  626. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_coord_web_dist.py +0 -0
  627. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_coord_web_rollback.py +0 -0
  628. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_db_backup_unit.py +0 -0
  629. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_drive_queue_unit.py +0 -0
  630. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_failure_notify_unit.py +0 -0
  631. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_manifest.py +0 -0
  632. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_notify_unit.py +0 -0
  633. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_units_lane.py +0 -0
  634. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deploy_web_unit.py +0 -0
  635. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deprecation_telemetry.py +0 -0
  636. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_deps.py +0 -0
  637. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dispatch.py +0 -0
  638. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dispatch_liveness.py +0 -0
  639. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dispatch_workers.py +0 -0
  641. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dist_name.py +0 -0
  642. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_done_housekeeping.py +0 -0
  643. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dr_azure_scripts.py +0 -0
  644. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dr_promote.py +0 -0
  645. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_dr_verify.py +0 -0
  646. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive.py +0 -0
  647. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_machine_fault.py +0 -0
  648. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue.py +0 -0
  649. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue_blocked_rendering.py +0 -0
  650. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue_launch_argv.py +0 -0
  651. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  652. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue_roll_pending.py +0 -0
  653. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  654. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_state.py +0 -0
  655. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_drive_tmux.py +0 -0
  656. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_epic_up_capability_detection.py +0 -0
  657. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  658. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_epic_up_image_provenance.py +0 -0
  659. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_errors.py +0 -0
  660. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_events.py +0 -0
  661. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_failure_class.py +0 -0
  662. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_failure_classifier.py +0 -0
  663. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_filelock.py +0 -0
  664. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  665. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fix_escalation_classifier.py +0 -0
  666. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fix_of_force_override.py +0 -0
  667. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fleet_config_health.py +0 -0
  668. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fleet_health_probes.py +0 -0
  669. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fleet_health_snapshot.py +0 -0
  670. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_fleet_watchdog.py +0 -0
  671. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_forge_availability.py +0 -0
  672. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_freshness.py +0 -0
  673. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gate_a.py +0 -0
  674. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gate_b.py +0 -0
  675. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gate_snapshot_staleness.py +0 -0
  676. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gates.py +0 -0
  677. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  678. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_gen_mock_index.py +0 -0
  679. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_generated_rust_fixture.py +0 -0
  680. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_generated_rust_requests.py +0 -0
  681. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_generated_types_fixture.py +0 -0
  682. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_github_ops.py +0 -0
  683. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_github_throttle.py +0 -0
  684. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_goal.py +0 -0
  685. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_graph_health.py +0 -0
  686. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_graph_selfheal_absent_2237.py +0 -0
  687. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_handoff.py +0 -0
  688. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_checks.py +0 -0
  689. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_cli.py +0 -0
  690. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_cli_graph.py +0 -0
  691. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_config.py +0 -0
  692. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_context.py +0 -0
  693. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_coord_tui_ci_pin.py +0 -0
  694. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_coord_web_ci_pin.py +0 -0
  695. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_deploy_lane_facts.py +0 -0
  696. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_fix.py +0 -0
  697. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_incident_regression.py +0 -0
  698. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_issues_sync_staleness.py +0 -0
  699. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_pr_churn.py +0 -0
  700. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_pypi.py +0 -0
  701. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_registry.py +0 -0
  702. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_release_cordon_probe.py +0 -0
  703. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_timer_active.py +0 -0
  704. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_toolchain.py +0 -0
  705. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_unit_drift.py +0 -0
  706. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_unit_enablement.py +0 -0
  707. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_health_wedged_drive_queue.py +0 -0
  708. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_hooks.py +0 -0
  709. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_housekeeping.py +0 -0
  710. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_human_attended_437.py +0 -0
  711. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_init.py +0 -0
  712. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_install_agent_venv_2911.py +0 -0
  713. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_integration.py +0 -0
  714. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_briefing_echo.py +0 -0
  715. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_pane_log_2541.py +0 -0
  716. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_prefill_state.py +0 -0
  717. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_session_relaunch.py +0 -0
  718. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_test_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_token_attribution.py +0 -0
  720. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_interactive_worktree.py +0 -0
  721. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_invariant_alarms.py +0 -0
  722. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_issue_store_seam.py +0 -0
  723. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_issues_sync_status.py +0 -0
  724. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_liveness_auditor.py +0 -0
  725. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_liveness_notify.py +0 -0
  726. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_lock_contention_ratchet.py +0 -0
  727. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_machine_fault.py +0 -0
  728. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_machine_metrics.py +0 -0
  729. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_machine_onboard.py +0 -0
  730. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_machine_pause.py +0 -0
  731. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_machine_stats.py +0 -0
  732. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_merge_queue.py +0 -0
  733. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.490 → code_coordinator-0.5.491}/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.490
3
+ Version: 0.5.491
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.490
3
+ Version: 0.5.491
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.490",
2
+ "tag": "0.5.491",
3
3
  "distance": 0,
4
- "node": "gfb5dc047d0e9acfa22f379bebb343d14c749080c",
4
+ "node": "g0bf722668fffd8f60d76696692afdbf7f1b292ff",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -735,6 +735,22 @@ def diagnose_stage(
735
735
  latest = _latest(assignments)
736
736
 
737
737
  if latest is None:
738
+ # #3383: a `review_claims` row held for a work assignment with ZERO
739
+ # review/test-author/mock-author rows (never dispatched, or all
740
+ # deleted) is unreachable from `_recover_review` below — that
741
+ # function only ever runs once `latest` above is non-None. Before
742
+ # this, `--stage review` hit this exact branch and reported the
743
+ # stage healthy while `dispatch_review` was permanently wedged
744
+ # behind the leaked claim (#3206's failure one state earlier — see
745
+ # `_leaked_review_claim_without_row`'s docstring). Checked BEFORE
746
+ # the "no review assignment" finding below, on claim state rather
747
+ # than on row existence, exactly as #3206 already does once a row
748
+ # exists.
749
+ if stage == "review" and _leaked_review_claim_without_row(
750
+ board, repo_name, issue_number, res, reset=reset, dry_run=dry_run,
751
+ ):
752
+ _cleanup_issue(board, config, repo_name, issue_number, res, dry_run=dry_run, reset=reset)
753
+ return res
738
754
  res.findings.append(f"no {stage} assignment on the board for #{issue_number}")
739
755
  res.recovered = True # nothing wedged
740
756
  # Still run the issue-wide cleanup below.
@@ -818,6 +834,154 @@ def diagnose_stage(
818
834
  return res
819
835
 
820
836
 
837
+ # #3383: a claim taken by `claim_review_dispatch` shortly before its caller
838
+ # inserts the review row it's claiming for looks, from a single read,
839
+ # identical to a genuinely leaked claim — the same false-positive window
840
+ # `_recover_review` below already documents for the terminal-row case
841
+ # (#3206). Below this age the claim is reported but NOT offered for release;
842
+ # above it, treated as leaked.
843
+ #
844
+ # NOT short on purpose — `dispatch_review` (coord/review.py) claims at
845
+ # `claim_review_dispatch` (~line 3070) and does NOT insert the review's
846
+ # `assignments` row until `record_dispatched_assignment` (~line 3763); its
847
+ # own `except Exception` handler at ~line 3815 calls the ~500 lines between
848
+ # those two points "pr_lookup, briefing assembly, JSON handling of
849
+ # agent_response, ...". That gap includes several sequential GitHub API
850
+ # calls (`work_is_terminal`, `branch_commits_ahead`, `pr_lookup`,
851
+ # `branch_exists_on_remote`, `pr_diff`, `get_compare_files`,
852
+ # `get_compare_diff`, `get_pr_commit_messages`, an issue-body fetch) and then
853
+ # a candidate loop that POSTs to each reviewer machine's `/assign` with
854
+ # `timeout=ASSIGN_POST_TIMEOUT_SECS` (`coord/dispatch.py` — 60.0s),
855
+ # falling through to the next candidate on rejection/timeout/unreachability.
856
+ # A single slow/unreachable first-choice reviewer machine alone can burn the
857
+ # full 60s before a second candidate is even tried, and there is no hard cap
858
+ # on candidate count — so this has to clear that whole chain, not one
859
+ # network round trip. Picked as a small multiple of minutes so it
860
+ # comfortably outlasts a worst-case multi-candidate dispatch plus GitHub API
861
+ # latency, while still being short enough that a *genuinely* leaked claim
862
+ # doesn't sit unrecoverable for long once someone runs `--reset`.
863
+ _REVIEW_CLAIM_LEAK_GRACE_SECS = 600.0
864
+
865
+
866
+ def _leaked_review_claim_without_row(
867
+ board: "Board",
868
+ repo_name: str,
869
+ issue_number: int,
870
+ res: DiagnoseResult,
871
+ *,
872
+ reset: bool,
873
+ dry_run: bool,
874
+ ) -> bool:
875
+ """#3383: detect (and, under ``--reset``, release) a leaked
876
+ ``review_claims`` row for a work assignment that has NO review /
877
+ test-author / mock-author row at all — the one shape `_recover_review`
878
+ can never see, because `diagnose_stage` only calls it once
879
+ `stage_assignments(..., "review")` finds a row. A claim can be (and, per
880
+ the issue that reported this, was) taken and never released when the
881
+ work assignment it's keyed on was dispatched to review, that review
882
+ never got as far as inserting its own `assignments` row (or its row was
883
+ later deleted, e.g. by an earlier `--reset`), and the claim outlived it.
884
+ Every future `dispatch_review` for that work assignment then denies
885
+ forever with the misleading #3113 "lost the atomic dispatch-claim race"
886
+ reason — while `coord diagnose --stage review` (which hit the
887
+ `latest is None` "no review assignment" branch before this function
888
+ existed) reported the stage healthy.
889
+
890
+ Checked against the WORK assignment's id — `claim_review_dispatch` is
891
+ keyed on the id of the assignment BEING reviewed, never on a review
892
+ row's own id (see `_recover_review`'s `work_assignment_id` resolution).
893
+
894
+ Returns ``True`` when a claim was found (whether or not it could be
895
+ released yet — see the grace-period case) and this function has already
896
+ appended the appropriate finding(s); ``False`` when there is nothing to
897
+ report, in which case the caller's own "no review assignment" message
898
+ is the correct (healthy) diagnosis.
899
+ """
900
+ from coord.state import ( # noqa: PLC0415
901
+ has_review_claim,
902
+ release_review_dispatch_claim,
903
+ review_claim_age_secs,
904
+ )
905
+
906
+ # Narrowing, acknowledged: this only checks the NEWEST `work`-type row
907
+ # for the issue, whereas `claim_review_dispatch` is keyed on whatever
908
+ # work-assignment id `dispatch_review` was actually called with. If the
909
+ # issue ever accumulates more than one `work` row (e.g. a rework/retry
910
+ # dispatched after the original work assignment that leaked the claim),
911
+ # a claim held on the *older* id is invisible here because this checks
912
+ # only the *newest* one. `_recover_review` avoids this by reading the
913
+ # exact id off the review row's own `review_of_assignment_id` FK — there
914
+ # is no review row here to read that FK from, so this has to guess.
915
+ # Probably rare, and the issue's own "worth also considering" `coord
916
+ # doctor` suggestion is the more complete fix; left as a known gap
917
+ # rather than iterating over every `work` row here.
918
+ work_rows = stage_assignments(board, repo_name, issue_number, "work")
919
+ work_latest = _latest(work_rows)
920
+ if work_latest is None or not work_latest.assignment_id:
921
+ return False
922
+ work_assignment_id = work_latest.assignment_id
923
+ if not has_review_claim(work_assignment_id):
924
+ return False
925
+
926
+ age = review_claim_age_secs(work_assignment_id)
927
+ if age is not None and age < _REVIEW_CLAIM_LEAK_GRACE_SECS:
928
+ # Too fresh to distinguish from an in-flight `dispatch_review` call
929
+ # that has taken the claim but not yet inserted its review row —
930
+ # report it, but don't offer to release something that might still
931
+ # be a live, wanted dispatch.
932
+ res.findings.append(
933
+ f"work assignment {work_assignment_id} holds a review-dispatch "
934
+ f"claim taken {age:.1f}s ago with no review row yet — likely an "
935
+ "in-flight dispatch_review, not a leak; re-run diagnose again "
936
+ "shortly if this persists"
937
+ )
938
+ res.recovered = True
939
+ return True
940
+
941
+ res.findings.append(
942
+ f"no review assignment exists for #{issue_number}, but work "
943
+ f"assignment {work_assignment_id} still holds a review-dispatch "
944
+ "claim (leaked review_claims row, #3383 — the #3206 class one state "
945
+ "earlier) — every future dispatch_review for this work assignment "
946
+ "will deny with the misleading #3113 'lost the atomic dispatch-claim "
947
+ "race' reason until it is released. Re-run with --reset to release it."
948
+ )
949
+ res.recovered = False
950
+ res.needs_reset = True
951
+
952
+ if reset:
953
+ if dry_run:
954
+ res.findings.append(
955
+ "(dry-run) would release the leaked review-dispatch claim"
956
+ )
957
+ return True
958
+ release_review_dispatch_claim(work_assignment_id)
959
+ if has_review_claim(work_assignment_id):
960
+ res.findings.append(
961
+ f"release requested for {work_assignment_id}'s "
962
+ "review-dispatch claim, but it is still present on re-read "
963
+ "— the release did NOT persist"
964
+ )
965
+ else:
966
+ res.actions_taken.append(
967
+ "released leaked review-dispatch claim for work assignment "
968
+ f"{work_assignment_id} — dispatch_review is now re-dispatchable"
969
+ )
970
+ res.reset_performed = True
971
+ res.recovered = True
972
+ res.branch_preserved = True
973
+ # Matches `_do_reset`'s (#3206) convention: a successful release
974
+ # must clear the `needs_reset=True` set a few lines above, or
975
+ # `to_json_dict()` — documented as read by the TUI without
976
+ # scraping human-readable lines — carries the internally
977
+ # contradictory `recovered=true needs_reset=true
978
+ # reset_performed=true` even though the plain-text CLI's "still
979
+ # wedged" warning happens to be gated on `not reset` and so never
980
+ # shows it.
981
+ res.needs_reset = False
982
+ return True
983
+
984
+
821
985
  def _recover_review(
822
986
  board, config, latest, state, res: DiagnoseResult, *, dry_run: bool
823
987
  ) -> None:
@@ -2388,6 +2388,36 @@ def has_review_claim(of_assignment_id: str) -> bool:
2388
2388
  return row is not None
2389
2389
 
2390
2390
 
2391
+ def review_claim_age_secs(of_assignment_id: str) -> float | None:
2392
+ """Seconds since *of_assignment_id*'s ``review_claims`` row was taken, or
2393
+ ``None`` when no claim is held (#3383).
2394
+
2395
+ Sibling read to :func:`has_review_claim`, used by ``coord diagnose
2396
+ --stage review`` to gate a claim release on age: a claim taken
2397
+ microseconds ago by an in-flight :func:`claim_review_dispatch` call that
2398
+ has not yet inserted its review ``assignments`` row is indistinguishable,
2399
+ from a single read, from a genuinely leaked claim — exactly the
2400
+ false-positive window already documented on the terminal-review-row path
2401
+ in ``diagnose._recover_review`` (#3206). Comparing ``claimed_at`` against
2402
+ a short grace period lets the caller tell "just claimed, dispatch still
2403
+ running" apart from "claimed a long time ago, nothing is coming".
2404
+
2405
+ Same local-DB-only caveat as :func:`has_review_claim` — reads the local
2406
+ connection, not the daemon, so it undercounts on a thin client.
2407
+ """
2408
+ if not of_assignment_id:
2409
+ return None
2410
+ conn = get_connection()
2411
+ row = sql.execute(
2412
+ conn,
2413
+ "SELECT claimed_at FROM review_claims WHERE of_assignment_id=?",
2414
+ (of_assignment_id,),
2415
+ ).fetchone()
2416
+ if row is None or row[0] is None:
2417
+ return None
2418
+ return time.time() - row[0]
2419
+
2420
+
2391
2421
  def release_review_dispatch_claim(of_assignment_id: str) -> None:
2392
2422
  """Release a claim taken by :func:`claim_review_dispatch`.
2393
2423
 
@@ -1220,6 +1220,24 @@ def _record(a: Assignment) -> None:
1220
1220
  conn.commit()
1221
1221
 
1222
1222
 
1223
+ def _backdate_review_claim(of_assignment_id: str, *, seconds_ago: float) -> None:
1224
+ """Push a `review_claims` row's `claimed_at` into the past — used to put
1225
+ a claim outside #3383's grace period (real claims in these tests are
1226
+ taken via `state.claim_review_dispatch`, which stamps `time.time()`;
1227
+ without this every test claim looks "just taken", which is exactly the
1228
+ fresh-claim case the grace period is meant to protect)."""
1229
+ import time as _time
1230
+
1231
+ from coord.db import get_connection
1232
+
1233
+ conn = get_connection()
1234
+ conn.execute(
1235
+ "UPDATE review_claims SET claimed_at=? WHERE of_assignment_id=?",
1236
+ (_time.time() - seconds_ago, of_assignment_id),
1237
+ )
1238
+ conn.commit()
1239
+
1240
+
1223
1241
  def test_reset_review_real_db_deletes_review_when_latest_is_the_review_row(
1224
1242
  monkeypatch, config, coord_db
1225
1243
  ) -> None:
@@ -1381,6 +1399,141 @@ def test_diagnose_review_healthy_when_no_claim_leaked(
1381
1399
  assert any("healthy" in f for f in res.findings)
1382
1400
 
1383
1401
 
1402
+ def test_diagnose_review_detects_leaked_claim_with_no_review_rows(
1403
+ monkeypatch, config, coord_db
1404
+ ) -> None:
1405
+ """#3383 regression: a `review_claims` row held for a work assignment
1406
+ that has NO review/test-author/mock-author row AT ALL (the state one
1407
+ step earlier than #3206's terminal-row case) used to be unreachable —
1408
+ `stage_assignments(..., "review")` finds nothing, `latest is None`, and
1409
+ `diagnose_stage` took the "no review assignment on the board" early
1410
+ return before ever calling `_recover_review` (which is the only place
1411
+ that cross-checked `review_claims`). This left the claim permanently
1412
+ wedged with `coord diagnose --stage review --reset` reporting the stage
1413
+ healthy AND doing nothing. This reproduces against unfixed `main`: the
1414
+ old early return set `recovered=True` unconditionally with no claim
1415
+ check at all.
1416
+ """
1417
+ from coord import state
1418
+
1419
+ _stub(monkeypatch, session="dead")
1420
+ _record(_assign(
1421
+ aid="w1", typ="work", status="done", review_state="dispatched",
1422
+ dispatched_at=100.0,
1423
+ ))
1424
+ # Simulate the leak: a claim was taken (e.g. by a `dispatch_review` call
1425
+ # whose review row never landed, or was later deleted) and never
1426
+ # released — no review row exists to cross-check it against. Backdated
1427
+ # well past the #3383 grace period so it isn't mistaken for a claim an
1428
+ # in-flight `dispatch_review` just took (see the fresh-claim test below).
1429
+ assert state.claim_review_dispatch("w1") is True
1430
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1431
+
1432
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1433
+
1434
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", dry_run=True)
1435
+
1436
+ assert res.recovered is False
1437
+ assert res.needs_reset is True
1438
+ assert any("review_claims" in f or "review-dispatch claim" in f for f in res.findings)
1439
+ # A dry-run must not touch the claim.
1440
+ assert state.claim_review_dispatch("w1") is False
1441
+
1442
+
1443
+ def test_reset_review_releases_leaked_claim_with_no_review_rows(
1444
+ monkeypatch, config, coord_db
1445
+ ) -> None:
1446
+ """#3383: `--reset` must actually clear the leaked claim detected above
1447
+ so `coord review <work-assignment-id>` becomes dispatchable again — the
1448
+ whole point of the issue (there was previously NO operator CLI path at
1449
+ all to clear this)."""
1450
+ from coord import state
1451
+
1452
+ _stub(monkeypatch, session="dead")
1453
+ _record(_assign(
1454
+ aid="w1", typ="work", status="done", review_state="dispatched",
1455
+ dispatched_at=100.0,
1456
+ ))
1457
+ assert state.claim_review_dispatch("w1") is True
1458
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1459
+
1460
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1461
+
1462
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", reset=True)
1463
+
1464
+ assert res.reset_performed is True
1465
+ assert res.recovered is True
1466
+ # The claim is gone — a fresh claim attempt for "w1" must succeed again,
1467
+ # exactly like `dispatch_review` would need for a real re-dispatch.
1468
+ assert state.claim_review_dispatch("w1") is True
1469
+
1470
+
1471
+ def test_reset_review_reports_leaked_claim_delete_failure_when_row_survives(
1472
+ monkeypatch, config, coord_db
1473
+ ) -> None:
1474
+ """#3383 non-blocking review gap: `_leaked_review_claim_without_row`'s
1475
+ own release path has the same "trust the write, not a re-read" risk that
1476
+ `_do_reset`'s analogous #3206 terminal-row path already guards against
1477
+ (see `test_reset_review_reports_delete_failure_when_row_survives`
1478
+ above) — but nothing exercised it for this no-review-row shape. Simulate
1479
+ `release_review_dispatch_claim` reporting success while the claim is
1480
+ still present on re-read (mirrors the coord-tui#49 non-persisting write)
1481
+ and assert the action line is honest about it rather than claiming the
1482
+ claim is gone."""
1483
+ from coord import state
1484
+
1485
+ _stub(monkeypatch, session="dead")
1486
+ _record(_assign(
1487
+ aid="w1", typ="work", status="done", review_state="dispatched",
1488
+ dispatched_at=100.0,
1489
+ ))
1490
+ assert state.claim_review_dispatch("w1") is True
1491
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1492
+
1493
+ # Simulate a release call that reports success but never actually
1494
+ # removes the row — `has_review_claim` still finds it on re-read.
1495
+ monkeypatch.setattr(state, "release_review_dispatch_claim", lambda *a, **k: None)
1496
+
1497
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1498
+
1499
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", reset=True)
1500
+
1501
+ assert res.reset_performed is False
1502
+ assert res.recovered is False
1503
+ assert res.needs_reset is True
1504
+ assert any(
1505
+ "did NOT persist" in f
1506
+ for f in res.findings
1507
+ )
1508
+ # Still held — the release never actually took.
1509
+ assert state.claim_review_dispatch("w1") is False
1510
+
1511
+
1512
+ def test_diagnose_review_fresh_claim_without_row_not_treated_as_leaked(
1513
+ monkeypatch, config, coord_db
1514
+ ) -> None:
1515
+ """Sibling of the two tests above: a claim taken only moments ago, with
1516
+ no review row yet, is indistinguishable from an in-flight
1517
+ `dispatch_review` call that has claimed but not yet inserted its review
1518
+ row — the same false-positive window `_recover_review` already
1519
+ documents for the terminal-row case (#3206), one state earlier. Must be
1520
+ reported but NOT offered for release while this fresh."""
1521
+ from coord import state
1522
+
1523
+ _stub(monkeypatch, session="dead")
1524
+ _record(_assign(aid="w1", typ="work", status="done", dispatched_at=100.0))
1525
+ assert state.claim_review_dispatch("w1") is True # claimed "just now"
1526
+
1527
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1528
+
1529
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", dry_run=True)
1530
+
1531
+ assert res.needs_reset is False
1532
+ assert any("in-flight dispatch_review" in f for f in res.findings)
1533
+ # Untouched — still held.
1534
+ assert state.claim_review_dispatch("w1") is False
1535
+
1536
+
1384
1537
  def test_reset_review_reports_delete_failure_when_row_survives(
1385
1538
  monkeypatch, config, coord_db
1386
1539
  ) -> None:
@@ -4645,6 +4645,46 @@ class TestHasReviewClaim:
4645
4645
  assert state.has_review_claim("") is False
4646
4646
 
4647
4647
 
4648
+ class TestReviewClaimAgeSecs:
4649
+ """`review_claim_age_secs` (#3383): sibling read to `has_review_claim`
4650
+ used by `coord diagnose --stage review` to gate a claim release on age
4651
+ — a claim taken microseconds ago by an in-flight `claim_review_dispatch`
4652
+ call that hasn't inserted its review row yet must not be released as if
4653
+ it were a leak (the same false-positive window #3206 documents for the
4654
+ terminal-row case)."""
4655
+
4656
+ def test_small_positive_age_while_freshly_claimed(self, coord_db) -> None:
4657
+ assert state.claim_review_dispatch("w1") is True
4658
+ age = state.review_claim_age_secs("w1")
4659
+ assert age is not None
4660
+ assert 0.0 <= age < 5.0
4661
+
4662
+ def test_none_when_never_claimed(self, coord_db) -> None:
4663
+ assert state.review_claim_age_secs("never-claimed") is None
4664
+
4665
+ def test_none_after_release(self, coord_db) -> None:
4666
+ assert state.claim_review_dispatch("w1") is True
4667
+ state.release_review_dispatch_claim("w1")
4668
+ assert state.review_claim_age_secs("w1") is None
4669
+
4670
+ def test_none_for_empty_id(self, coord_db) -> None:
4671
+ assert state.review_claim_age_secs("") is None
4672
+
4673
+ def test_reflects_a_backdated_claim(self, coord_db) -> None:
4674
+ from coord.db import get_connection
4675
+
4676
+ assert state.claim_review_dispatch("w1") is True
4677
+ conn = get_connection()
4678
+ conn.execute(
4679
+ "UPDATE review_claims SET claimed_at=? WHERE of_assignment_id=?",
4680
+ (time.time() - 3600.0, "w1"),
4681
+ )
4682
+ conn.commit()
4683
+ age = state.review_claim_age_secs("w1")
4684
+ assert age is not None
4685
+ assert age >= 3599.0
4686
+
4687
+
4648
4688
  class TestMarkNotifiedReleasesLeakedReviewClaim:
4649
4689
  """#3206 root-cause regression: a review assignment reaped by
4650
4690
  `AgentServer._reap`'s SIGKILL max-wait ceiling writes its terminal