code-coordinator 0.5.453__tar.gz → 0.5.454__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 (878) hide show
  1. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/housekeeping.py +85 -7
  7. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/serve_app.py +35 -2
  8. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/state.py +84 -10
  9. code_coordinator-0.5.454/tests/test_housekeeping.py +259 -0
  10. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_sqlite_connect_ratchet.py +17 -0
  11. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/.gitignore +0 -0
  24. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/GOAL.md +0 -0
  26. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/LICENSE +0 -0
  27. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/README.md +0 -0
  29. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/backup.py +0 -0
  47. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/client.py +0 -0
  62. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/codegen.py +0 -0
  63. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/backup.py +0 -0
  69. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/codegen.py +0 -0
  71. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/dr.py +0 -0
  74. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/drive.py +0 -0
  75. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/drive_queue.py +0 -0
  76. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/machine.py +0 -0
  81. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/pr.py +0 -0
  87. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/config.py +0 -0
  101. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/db.py +0 -0
  111. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dead_end.py +0 -0
  112. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/decomposition_chat.py +0 -0
  113. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-backup.service +0 -0
  116. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-backup.timer +0 -0
  117. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-dr-verify.service +0 -0
  121. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-dr-verify.timer +0 -0
  122. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-drive-queue.service +0 -0
  123. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-drive-queue.timer +0 -0
  124. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-failure-notify.service +0 -0
  125. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-fleet-watchdog.service +0 -0
  126. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  127. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-notify.service +0 -0
  128. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-notify.timer +0 -0
  129. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-release-propagate.service +0 -0
  130. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-release-propagate.timer +0 -0
  131. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-release-window.service +0 -0
  132. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-release-window.timer +0 -0
  133. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-serve.service +0 -0
  134. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-web-dist-build.service +0 -0
  135. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-web-dist-build.timer +0 -0
  136. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy/coord-web.service +0 -0
  137. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy_manifest.py +0 -0
  138. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deploy_units.py +0 -0
  139. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deprecation_telemetry.py +0 -0
  140. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/deps.py +0 -0
  141. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/diagnose.py +0 -0
  142. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dispatch.py +0 -0
  143. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dist_name.py +0 -0
  144. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dr_promote.py +0 -0
  145. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/dr_verify.py +0 -0
  146. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/drive.py +0 -0
  147. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/drive_queue.py +0 -0
  148. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/drive_state.py +0 -0
  149. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/events.py +0 -0
  150. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/failure_class.py +0 -0
  151. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/filelock.py +0 -0
  152. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/fleet_config_health.py +0 -0
  153. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/forge_availability.py +0 -0
  154. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/freshness.py +0 -0
  155. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/gate_a.py +0 -0
  156. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/gate_b.py +0 -0
  157. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/gate_snapshot.py +0 -0
  158. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/gates.py +0 -0
  159. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/gen_board_fixture.py +0 -0
  160. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/github_ops.py +0 -0
  161. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/github_throttle.py +0 -0
  162. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/goal.py +0 -0
  163. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/graph_health.py +0 -0
  164. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/__init__.py +0 -0
  165. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/aggregate.py +0 -0
  166. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/__init__.py +0 -0
  167. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/_ci_pin.py +0 -0
  168. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/agent_install.py +0 -0
  169. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/cargo_targets.py +0 -0
  170. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/claude_binary.py +0 -0
  171. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/config_drift.py +0 -0
  172. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  173. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/coord_web_ci_pin.py +0 -0
  174. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/deploy_lane_facts.py +0 -0
  175. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/disk.py +0 -0
  176. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/fleet_board.py +0 -0
  177. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  178. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/fleet_phantom.py +0 -0
  179. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/fleet_unit_drift.py +0 -0
  180. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/graph.py +0 -0
  181. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/graphify_cli.py +0 -0
  182. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/index_lock.py +0 -0
  183. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/issues_sync_staleness.py +0 -0
  184. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/plan_usage.py +0 -0
  185. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/pr_churn.py +0 -0
  186. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/release_cordon.py +0 -0
  187. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/repo_state.py +0 -0
  188. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/spawned_coord.py +0 -0
  189. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/stalled_pipeline.py +0 -0
  190. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/timer_active.py +0 -0
  191. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/toolchain.py +0 -0
  192. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/unit_drift.py +0 -0
  193. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/unit_enablement.py +0 -0
  194. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/wedged_drive_queue.py +0 -0
  195. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/checks/worktrees.py +0 -0
  196. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/cli.py +0 -0
  197. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/context.py +0 -0
  198. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/fleet_snapshot.py +0 -0
  199. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/models.py +0 -0
  200. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/pypi.py +0 -0
  201. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/registry.py +0 -0
  202. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/render.py +0 -0
  203. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/health/units.py +0 -0
  204. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/hooks.py +0 -0
  205. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/interactive.py +0 -0
  206. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/issue_store.py +0 -0
  207. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/issues_sync_status.py +0 -0
  208. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/liveness_auditor.py +0 -0
  209. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/machine_metrics.py +0 -0
  210. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/machine_onboard.py +0 -0
  211. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/machine_pause.py +0 -0
  212. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/machine_stats.py +0 -0
  213. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/merge_queue.py +0 -0
  214. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/milestone_chat.py +0 -0
  215. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/milestone_dispatch.py +0 -0
  216. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/milestone_gate.py +0 -0
  217. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/milestone_order.py +0 -0
  218. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/mock_author.py +0 -0
  219. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/models.py +0 -0
  220. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/network.py +0 -0
  221. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/new_issue_chat.py +0 -0
  222. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/__init__.py +0 -0
  223. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/baseline.py +0 -0
  224. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/cli.py +0 -0
  225. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/collect.py +0 -0
  226. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/digest.py +0 -0
  227. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/models.py +0 -0
  228. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/predicate.py +0 -0
  229. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/service.py +0 -0
  230. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/store.py +0 -0
  231. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notifier/transport.py +0 -0
  232. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/notify.py +0 -0
  233. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/openapi.py +0 -0
  234. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/overlap_fence.py +0 -0
  235. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/overlap_predict.py +0 -0
  236. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/parentage.py +0 -0
  237. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/parentage_github.py +0 -0
  238. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/pipeline.py +0 -0
  239. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/plan_parser.py +0 -0
  240. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/plans.py +0 -0
  241. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/platform_paths.py +0 -0
  242. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/portal_bridge.py +0 -0
  243. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/portal_store.py +0 -0
  244. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/portal_sync.py +0 -0
  245. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/pr_body_lint.py +0 -0
  246. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/prereqs.py +0 -0
  247. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/progress.py +0 -0
  248. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/providers/__init__.py +0 -0
  249. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/providers/base.py +0 -0
  250. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/providers/claude.py +0 -0
  251. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/providers/claude_pty.py +0 -0
  252. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/providers/opencode.py +0 -0
  253. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/queue_diagnose.py +0 -0
  254. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/reconcile.py +0 -0
  255. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/reconcile_tick.py +0 -0
  256. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/refine_chat.py +0 -0
  257. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/release_cordon.py +0 -0
  258. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/release_propagate.py +0 -0
  259. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/release_verify.py +0 -0
  260. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/release_window.py +0 -0
  261. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/repo_dormancy.py +0 -0
  262. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/repo_edit.py +0 -0
  263. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/repo_onboard.py +0 -0
  264. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/reports.py +0 -0
  265. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/rest_schema.py +0 -0
  266. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/revalidate.py +0 -0
  267. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/review.py +0 -0
  268. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/scorecard.py +0 -0
  269. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/self_health.py +0 -0
  270. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  271. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  272. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  273. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  274. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  275. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/portal-followup/SKILL.md +0 -0
  276. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/release-now/SKILL.md +0 -0
  277. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  278. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  279. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/skills/update-issue/SKILL.md +0 -0
  280. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/smoke.py +0 -0
  281. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/spend_ceiling.py +0 -0
  282. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/split_work.py +0 -0
  283. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/sql.py +0 -0
  284. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/stage_projection.py +0 -0
  285. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/store_migrate.py +0 -0
  286. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/store_parity.py +0 -0
  287. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/templates/deploy-cloudflare.node.yml +0 -0
  288. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/test_author.py +0 -0
  289. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/test_chat.py +0 -0
  290. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/test_orchestrator.py +0 -0
  291. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/test_report.py +0 -0
  292. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/tui_release.py +0 -0
  293. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/uat_checks.py +0 -0
  294. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/usage.py +0 -0
  295. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/usage_limits.py +0 -0
  296. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/usage_rollup.py +0 -0
  297. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coord/worker_events.py +0 -0
  298. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/coordinator.example.yml +0 -0
  299. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-agent.service +0 -0
  300. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-backup.service +0 -0
  301. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-backup.timer +0 -0
  302. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-db-backup.service +0 -0
  303. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-db-backup.sh +0 -0
  304. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-db-backup.timer +0 -0
  305. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-dr-verify.service +0 -0
  306. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-dr-verify.timer +0 -0
  307. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-drive-queue.service +0 -0
  308. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-drive-queue.timer +0 -0
  309. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-failure-notify.service +0 -0
  310. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-failure-notify.sh +0 -0
  311. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-fleet-watchdog.service +0 -0
  312. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-fleet-watchdog.timer +0 -0
  313. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-notify.service +0 -0
  314. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-notify.timer +0 -0
  315. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-release-propagate.service +0 -0
  316. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-release-propagate.timer +0 -0
  317. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-release-window.service +0 -0
  318. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-release-window.timer +0 -0
  319. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-serve.service +0 -0
  320. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.service +0 -0
  321. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.sh +0 -0
  322. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.timer +0 -0
  323. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-web-rollback.sh +0 -0
  324. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/coord-web.service +0 -0
  325. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/deploy/node-shim.sh +0 -0
  326. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ADR_COORD_TUI_CI.md +0 -0
  327. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  328. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_CI.md +0 -0
  329. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_DIST.md +0 -0
  330. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  331. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/AGENT_OPERATIONS.md +0 -0
  332. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ARCHITECTURE.md +0 -0
  333. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ARCH_SECURITY_GATES.md +0 -0
  334. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/COCKPIT.md +0 -0
  335. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/CONTROL_CENTER.md +0 -0
  336. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/COST_DISCIPLINE.md +0 -0
  337. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/CROSS_PLATFORM.md +0 -0
  338. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/CUSTOMER_FACING_APPS.md +0 -0
  339. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/CUSTOMER_PORTAL.md +0 -0
  340. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/DATA_STORE_SELECTION.md +0 -0
  341. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/DISASTER_RECOVERY.md +0 -0
  342. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/DRIVE_QUEUE.md +0 -0
  343. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/EPHEMERAL_WORKERS.md +0 -0
  344. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/FORGE_MIGRATION.md +0 -0
  345. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/GRAPHIFY_SETUP.md +0 -0
  346. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ISSUE_GUIDANCE.md +0 -0
  347. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/MAC_MINI.md +0 -0
  348. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  349. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/NOTIFIER.md +0 -0
  350. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/OPENCODE_VERIFICATION.md +0 -0
  351. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/OPERATING_GOTCHAS.md +0 -0
  352. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/OPERATOR_GUIDES.md +0 -0
  353. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/ORACLE_LOOP.md +0 -0
  354. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/PHONE_WEBAPP.md +0 -0
  355. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/PIPELINE_V2.md +0 -0
  356. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/PLATFORM_EVOLUTION.md +0 -0
  357. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/SECOND_BACKEND.md +0 -0
  358. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/STORE_SERVICE.md +0 -0
  359. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  360. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/WEB_CONTROL_CENTER.md +0 -0
  361. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/WSL_WINDOWS_WORKER.md +0 -0
  362. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/mocks/web/README.md +0 -0
  363. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/mocks/web/_tokens.css +0 -0
  364. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/mocks/web/issue-detail.html +0 -0
  365. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/mocks/web/pipeline-narrow.html +0 -0
  366. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/docs/mocks/web/pipeline-wide.html +0 -0
  367. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/graphify-out/.gitignore +0 -0
  368. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/install-agent.sh +0 -0
  369. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/pyproject.toml +0 -0
  370. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/audit_review_verdict_overrides.py +0 -0
  371. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  372. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/build-worker-image.sh +0 -0
  373. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/coordinator-machine.py +0 -0
  374. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/dr-down.sh +0 -0
  375. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/dr-up.sh +0 -0
  376. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/epic-down.sh +0 -0
  377. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/epic-up.sh +0 -0
  378. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/preflight.sh +0 -0
  379. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/provision-server.sh +0 -0
  380. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/provision-worker.sh +0 -0
  381. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  382. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  383. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/throwaway-vm.sh +0 -0
  384. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/azure-workers/verify-github-token.sh +0 -0
  385. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/check_gh_argv_containment.py +0 -0
  386. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/codegen.py +0 -0
  387. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-test-runner.sh +0 -0
  388. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  389. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  390. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  391. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  392. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/coord-venv-rollback.sh +0 -0
  393. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/drive-batch.sh +0 -0
  394. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/extract-coord-tui.sh +0 -0
  395. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/fleet_watchdog.py +0 -0
  396. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/gen_board_fixture.py +0 -0
  397. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/gen_mock_index.py +0 -0
  398. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/lib/provision-core.sh +0 -0
  399. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/next_release_tag.py +0 -0
  400. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/provision-machine.sh +0 -0
  401. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/run_tests_in_populated_home.sh +0 -0
  402. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/run_tests_without_gh.sh +0 -0
  403. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/setup-macmini.sh +0 -0
  404. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/smoke_437_interactive.py +0 -0
  405. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/verify-provision-noble.sh +0 -0
  406. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/verify_878_review_capture.py +0 -0
  407. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/verify_release_published.py +0 -0
  408. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/scripts/verify_release_wheel.py +0 -0
  409. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/setup.cfg +0 -0
  410. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/SMOKE_SET.md +0 -0
  411. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/__init__.py +0 -0
  412. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-37/conftest.py +0 -0
  413. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-37/contract.md +0 -0
  414. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-37/manifest.yml +0 -0
  415. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  416. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  417. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/contract.md +0 -0
  418. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  419. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  420. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/manifest.yml +0 -0
  421. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  422. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-51/tsconfig.json +0 -0
  423. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  424. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/backends.py +0 -0
  425. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/conftest.py +0 -0
  426. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/board-pipeline-basic.json +0 -0
  427. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  428. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  429. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  430. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  431. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/all_pass.json +0 -0
  432. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  433. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/mixed_fail.json +0 -0
  434. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  435. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  436. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/skip.json +0 -0
  437. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/playwright/truncated.json +0 -0
  438. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  439. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  440. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  441. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  442. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  443. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  444. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  445. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  446. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_acceptance.py +0 -0
  447. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_acceptance_drivers.py +0 -0
  448. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent.py +0 -0
  449. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_api_error.py +0 -0
  450. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_app.py +0 -0
  451. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_branch_base.py +0 -0
  452. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_branch_capture.py +0 -0
  453. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_config_free_1712.py +0 -0
  454. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_deploy_units_endpoint.py +0 -0
  455. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_dirty_worktree.py +0 -0
  456. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  457. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_graph_self_heal.py +0 -0
  458. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_health_h3.py +0 -0
  459. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_idle_restart.py +0 -0
  460. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_push_failure.py +0 -0
  461. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_reap.py +0 -0
  462. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_repos_and_pull.py +0 -0
  463. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_restart_services_endpoint.py +0 -0
  464. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_skills_self_heal.py +0 -0
  465. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_startup_diagnostics.py +0 -0
  466. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_update.py +0 -0
  467. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_update_bluegreen.py +0 -0
  468. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_usage_limit.py +0 -0
  469. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_agent_zero_commit.py +0 -0
  470. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ambient_home_isolation.py +0 -0
  471. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approve_capability_reroute_3241.py +0 -0
  472. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approve_dependency_busy_2804.py +0 -0
  473. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approve_reject_plan.py +0 -0
  474. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approve_usage_gate.py +0 -0
  475. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approved_work_2532.py +0 -0
  476. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_approved_work_2996.py +0 -0
  477. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_assignment_already_recorded_daemon.py +0 -0
  478. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_audit_log.py +0 -0
  479. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_audit_outcome.py +0 -0
  480. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_audit_query.py +0 -0
  481. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_auto_loop.py +0 -0
  482. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_auto_release_publish_2035.py +0 -0
  483. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_backend_selection.py +0 -0
  484. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_backup.py +0 -0
  485. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_base_checkout_restore.py +0 -0
  486. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_block_log.py +0 -0
  487. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_cap_762.py +0 -0
  488. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_fixture.py +0 -0
  489. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_read_path.py +0 -0
  490. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_schema.py +0 -0
  491. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_service.py +0 -0
  492. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_state.py +0 -0
  493. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_board_wire.py +0 -0
  494. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_brain.py +0 -0
  495. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_branch_model.py +0 -0
  496. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_bug_intake.py +0 -0
  497. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_build_worker_image_env_update.py +0 -0
  498. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cargo_cache.py +0 -0
  499. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_check_gh_argv_containment.py +0 -0
  500. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_acceptance_gate_1950.py +0 -0
  501. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_fix.py +0 -0
  502. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_github.py +0 -0
  503. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_gitlab.py +0 -0
  504. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_parity_2091.py +0 -0
  505. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_ci_store.py +0 -0
  506. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_claim.py +0 -0
  507. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_claude_md_budget.py +0 -0
  508. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_acceptance.py +0 -0
  509. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_assign.py +0 -0
  510. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  511. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_assign_interactive_remote.py +0 -0
  512. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_assign_provider.py +0 -0
  513. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  514. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_audit.py +0 -0
  515. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_chat_continue.py +0 -0
  516. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_codegen.py +0 -0
  517. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_decide.py +0 -0
  518. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_capability_rules.py +0 -0
  519. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_config_provenance.py +0 -0
  520. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_forge_availability.py +0 -0
  521. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_graph.py +0 -0
  522. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_self.py +0 -0
  523. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_diagnose_test_coverage.py +0 -0
  524. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_doctor.py +0 -0
  525. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_doctor_config_free_1801.py +0 -0
  526. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  527. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  528. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_drive.py +0 -0
  529. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_drive_queue.py +0 -0
  530. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_escalate.py +0 -0
  531. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_fix_headless_review.py +0 -0
  532. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_gate_a.py +0 -0
  533. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_install_drift.py +0 -0
  534. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_install_skills.py +0 -0
  535. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_issue_comment.py +0 -0
  536. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_issue_create_label.py +0 -0
  537. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_issue_reopen.py +0 -0
  538. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_issue_view_list.py +0 -0
  539. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_merge.py +0 -0
  540. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_assign.py +0 -0
  541. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_capture.py +0 -0
  542. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_chat_add_child.py +0 -0
  543. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_dispatch.py +0 -0
  544. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_gate_b.py +0 -0
  545. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_gate_c.py +0 -0
  546. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_order.py +0 -0
  547. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  548. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_milestone_ship.py +0 -0
  549. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_network.py +0 -0
  550. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_new_issue_chat.py +0 -0
  551. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_plans.py +0 -0
  552. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_portal.py +0 -0
  553. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_pr.py +0 -0
  554. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_pull_artifact.py +0 -0
  555. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_queue.py +0 -0
  556. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_reattach_sessions.py +0 -0
  557. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_refine_board.py +0 -0
  558. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_release_preflight.py +0 -0
  559. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_release_propagate.py +0 -0
  560. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_release_window.py +0 -0
  561. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_repo_2220.py +0 -0
  562. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  563. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_scorecard.py +0 -0
  564. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_serve_store_backend_3084.py +0 -0
  565. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_set_review_findings.py +0 -0
  566. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_advisory_terminal.py +0 -0
  567. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_contested_tag.py +0 -0
  568. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_merge_queue.py +0 -0
  569. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_provider.py +0 -0
  570. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_review_finalizing.py +0 -0
  571. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_test_failed_tag.py +0 -0
  572. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_status_usage_limit.py +0 -0
  573. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_sync_comments_873.py +0 -0
  574. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_test_plan.py +0 -0
  575. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_track.py +0 -0
  576. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_tui_update.py +0 -0
  577. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cli_wait.py +0 -0
  578. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_client.py +0 -0
  579. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_client_base_install.py +0 -0
  580. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_client_config_cache_atomic_3052.py +0 -0
  581. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_client_resource_migration_1946.py +0 -0
  582. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_commands_common.py +0 -0
  583. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_comments.py +0 -0
  584. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_completion_summary.py +0 -0
  585. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config.py +0 -0
  586. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_acceptance.py +0 -0
  587. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_audit.py +0 -0
  588. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_drift_check.py +0 -0
  589. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_pricing.py +0 -0
  590. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  591. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_config_usage_gate.py +0 -0
  592. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_confirm_test.py +0 -0
  593. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_conflict_fix.py +0 -0
  594. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_conflict_fix_semantic.py +0 -0
  595. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  596. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test.py +0 -0
  597. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  598. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test_runner_baseline.py +0 -0
  599. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test_runner_populated_home.py +0 -0
  600. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test_runner_routing.py +0 -0
  601. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_test_runner_toolchain.py +0 -0
  602. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_uat.py +0 -0
  603. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coord_web_sse_restart_live.py +0 -0
  604. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_coordinator_machine.py +0 -0
  605. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_cross_platform_imports.py +0 -0
  606. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dao.py +0 -0
  607. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard.py +0 -0
  608. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard_api.py +0 -0
  609. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard_fixture.py +0 -0
  610. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard_server.py +0 -0
  611. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard_terminal.py +0 -0
  612. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dashboard_terminal_live.py +0 -0
  613. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_db.py +0 -0
  614. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dead_end.py +0 -0
  615. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_decomposition_chat.py +0 -0
  616. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_coord_db_backup.py +0 -0
  617. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_coord_web_dist.py +0 -0
  618. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_coord_web_rollback.py +0 -0
  619. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_db_backup_unit.py +0 -0
  620. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_drive_queue_unit.py +0 -0
  621. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_failure_notify_unit.py +0 -0
  622. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_manifest.py +0 -0
  623. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_notify_unit.py +0 -0
  624. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_units_lane.py +0 -0
  625. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deploy_web_unit.py +0 -0
  626. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deprecation_telemetry.py +0 -0
  627. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_deps.py +0 -0
  628. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_diagnose.py +0 -0
  629. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dispatch.py +0 -0
  630. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dispatch_target_validation.py +0 -0
  631. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dist_name.py +0 -0
  632. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_done_housekeeping.py +0 -0
  633. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dr_azure_scripts.py +0 -0
  634. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dr_promote.py +0 -0
  635. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_dr_verify.py +0 -0
  636. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive.py +0 -0
  637. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue.py +0 -0
  638. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue_blocked_rendering.py +0 -0
  639. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue_launch_argv.py +0 -0
  640. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  641. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue_roll_pending.py +0 -0
  642. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  643. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_state.py +0 -0
  644. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_drive_tmux.py +0 -0
  645. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_epic_up_capability_detection.py +0 -0
  646. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  647. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_epic_up_image_provenance.py +0 -0
  648. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_errors.py +0 -0
  649. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_events.py +0 -0
  650. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_failure_class.py +0 -0
  651. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_filelock.py +0 -0
  652. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  653. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_fix_of_force_override.py +0 -0
  654. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_fleet_config_health.py +0 -0
  655. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_fleet_health_probes.py +0 -0
  656. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_fleet_health_snapshot.py +0 -0
  657. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_fleet_watchdog.py +0 -0
  658. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_forge_availability.py +0 -0
  659. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_freshness.py +0 -0
  660. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gate_a.py +0 -0
  661. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gate_b.py +0 -0
  662. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gate_snapshot_staleness.py +0 -0
  663. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gates.py +0 -0
  664. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  665. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_gen_mock_index.py +0 -0
  666. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_generated_rust_fixture.py +0 -0
  667. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_generated_rust_requests.py +0 -0
  668. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_generated_types_fixture.py +0 -0
  669. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_github_ops.py +0 -0
  670. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_github_throttle.py +0 -0
  671. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_goal.py +0 -0
  672. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_graph_health.py +0 -0
  673. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_graph_selfheal_absent_2237.py +0 -0
  674. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_handoff.py +0 -0
  675. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_checks.py +0 -0
  676. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_cli.py +0 -0
  677. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_cli_graph.py +0 -0
  678. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_config.py +0 -0
  679. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_context.py +0 -0
  680. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_coord_tui_ci_pin.py +0 -0
  681. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_coord_web_ci_pin.py +0 -0
  682. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_deploy_lane_facts.py +0 -0
  683. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_fix.py +0 -0
  684. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_incident_regression.py +0 -0
  685. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_issues_sync_staleness.py +0 -0
  686. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_pr_churn.py +0 -0
  687. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_pypi.py +0 -0
  688. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_registry.py +0 -0
  689. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_release_cordon_probe.py +0 -0
  690. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_timer_active.py +0 -0
  691. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_toolchain.py +0 -0
  692. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_unit_drift.py +0 -0
  693. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_unit_enablement.py +0 -0
  694. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_health_wedged_drive_queue.py +0 -0
  695. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_hooks.py +0 -0
  696. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_human_attended_437.py +0 -0
  697. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_init.py +0 -0
  698. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_install_agent_venv_2911.py +0 -0
  699. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_integration.py +0 -0
  700. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_briefing_echo.py +0 -0
  701. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_pane_log_2541.py +0 -0
  702. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_prefill_state.py +0 -0
  703. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_session_relaunch.py +0 -0
  704. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_test_verdict_backstop.py +0 -0
  705. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_token_attribution.py +0 -0
  706. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_interactive_worktree.py +0 -0
  707. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_issue_store_seam.py +0 -0
  708. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_issues_sync_status.py +0 -0
  709. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_liveness_auditor.py +0 -0
  710. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_liveness_notify.py +0 -0
  711. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_lock_contention_ratchet.py +0 -0
  712. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_machine_metrics.py +0 -0
  713. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_machine_onboard.py +0 -0
  714. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_machine_pause.py +0 -0
  715. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_machine_stats.py +0 -0
  716. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_merge_queue.py +0 -0
  717. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_merge_verify.py +0 -0
  718. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_milestone_chat.py +0 -0
  719. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_milestone_dispatch.py +0 -0
  720. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_milestone_gate.py +0 -0
  721. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_milestone_order.py +0 -0
  722. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_milestone_seam.py +0 -0
  723. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_mock_author.py +0 -0
  724. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_model_tiering.py +0 -0
  725. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_models.py +0 -0
  726. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_models_config_labels.py +0 -0
  727. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_needs_attention.py +0 -0
  728. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_network.py +0 -0
  729. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_new_issue_chat.py +0 -0
  730. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_next_release_tag.py +0 -0
  731. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_node_shim.py +0 -0
  732. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_baseline.py +0 -0
  733. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_cli.py +0 -0
  734. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_collect.py +0 -0
  735. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_config.py +0 -0
  736. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_drive_seam.py +0 -0
  737. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_isolation.py +0 -0
  738. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_predicate.py +0 -0
  739. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_quiet_hours.py +0 -0
  740. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notifier_service.py +0 -0
  741. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notify.py +0 -0
  742. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_notify_drain.py +0 -0
  743. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_openapi.py +0 -0
  744. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_operational_defaults.py +0 -0
  745. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_overlap_fence.py +0 -0
  746. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_overlap_predict.py +0 -0
  747. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_packaged_deploy_units.py +0 -0
  748. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_parentage.py +0 -0
  749. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_paste_landed.py +0 -0
  750. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  751. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_pipeline.py +0 -0
  752. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_plan_followup_approve_plan_command.py +0 -0
  753. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_plan_followup_pr_command.py +0 -0
  754. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_plan_followup_review_command.py +0 -0
  755. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_plan_only.py +0 -0
  756. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_plan_parser.py +0 -0
  757. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_platform_paths.py +0 -0
  758. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_portal_bridge.py +0 -0
  759. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_portal_config.py +0 -0
  760. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_portal_store.py +0 -0
  761. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_portal_sync.py +0 -0
  762. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_pr_body_lint.py +0 -0
  763. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_prereqs.py +0 -0
  764. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_production_db_guard.py +0 -0
  765. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_progress.py +0 -0
  766. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_provider_seam.py +0 -0
  767. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_providers.py +0 -0
  768. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_providers_config_labels.py +0 -0
  769. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_providers_pty.py +0 -0
  770. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_provision_core.py +0 -0
  771. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_provision_machine.py +0 -0
  772. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_py_rust_mirror_inventory.py +0 -0
  773. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_quiet_hours.py +0 -0
  774. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_quiet_hours_store_2146.py +0 -0
  775. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reap_merged_sessions.py +0 -0
  776. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reap_stale_interactive_tick.py +0 -0
  777. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile.py +0 -0
  778. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_branch.py +0 -0
  779. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_completions.py +0 -0
  780. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  781. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_merges.py +0 -0
  782. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_no_agent_record.py +0 -0
  783. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_tick.py +0 -0
  784. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reconcile_usage_limit_done.py +0 -0
  785. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_refine_chat.py +0 -0
  786. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_cordon_2101.py +0 -0
  787. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  788. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_cordon_deadlock_2240.py +0 -0
  789. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_cordon_stuck_2490.py +0 -0
  790. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_propagate.py +0 -0
  791. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_propagate_threshold.py +0 -0
  792. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_roll_between_legs_2854.py +0 -0
  793. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_roll_window_handoff.py +0 -0
  794. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_unified_1242.py +0 -0
  795. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_verify.py +0 -0
  796. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_release_window.py +0 -0
  797. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_remote_auto_prune.py +0 -0
  798. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_remote_interactive_reaper.py +0 -0
  799. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_repo_add.py +0 -0
  800. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_repo_dormancy.py +0 -0
  801. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_repo_edit_2220.py +0 -0
  802. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_repo_graph_fleet_2237.py +0 -0
  803. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_repo_onboard_2220.py +0 -0
  804. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_report_result_push.py +0 -0
  805. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_reports.py +0 -0
  806. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_retry.py +0 -0
  807. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_retry_advisory_1606.py +0 -0
  808. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_retry_type_1636.py +0 -0
  809. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_revalidate.py +0 -0
  810. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review.py +0 -0
  811. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_end_review_without_verdict.py +0 -0
  812. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_parse_failure_diagnostic.py +0 -0
  813. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_reaffirm.py +0 -0
  814. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_state.py +0 -0
  815. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_verdict_backstop.py +0 -0
  816. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_verdict_override_audit.py +0 -0
  817. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_verdict_relay.py +0 -0
  818. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_review_zero_commits.py +0 -0
  819. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_scoped_review_wiring.py +0 -0
  820. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_scorecard.py +0 -0
  821. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_self_health.py +0 -0
  822. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_serve.py +0 -0
  823. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_serve_app.py +0 -0
  824. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_serve_app_board_trim.py +0 -0
  825. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_serve_rest_routes.py +0 -0
  826. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_session.py +0 -0
  827. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_slice_issue_attribution.py +0 -0
  828. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_smoke.py +0 -0
  829. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_smoke_live_checkout_restore.py +0 -0
  830. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_smoke_workflow.py +0 -0
  831. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_spend_ceiling.py +0 -0
  832. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_spend_ceiling_coordinator.py +0 -0
  833. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_split.py +0 -0
  834. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_split_work.py +0 -0
  835. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_sql_dialect.py +0 -0
  836. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stage_projection.py +0 -0
  837. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stale_busy_reviewer_697.py +0 -0
  838. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stalled_pipeline.py +0 -0
  839. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_state.py +0 -0
  840. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_state_review_findings_daemon.py +0 -0
  841. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_status_fleet_footer.py +0 -0
  842. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stop_1567.py +0 -0
  843. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_store_contract.py +0 -0
  844. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_store_migrate.py +0 -0
  845. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stuck.py +0 -0
  846. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  847. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_terminal_command.py +0 -0
  848. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_author.py +0 -0
  849. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_chat.py +0 -0
  850. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_orchestrator.py +0 -0
  851. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_report.py +0 -0
  852. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_verdict_parsing.py +0 -0
  853. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_test_verdict_transcript_floor.py +0 -0
  854. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_text_io_encoding_audit.py +0 -0
  855. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_thin_client_board_audit.py +0 -0
  856. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_thin_client_config_load_1080.py +0 -0
  857. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_thin_client_daemon_routing_906.py +0 -0
  858. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_throwaway_vm.py +0 -0
  859. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_tmux_host.py +0 -0
  860. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_tmux_session.py +0 -0
  861. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_transcript_floor.py +0 -0
  862. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_uat_checks.py +0 -0
  863. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_usage.py +0 -0
  864. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_usage_limits.py +0 -0
  865. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_usage_rollup.py +0 -0
  866. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_venv_live_install_2121.py +0 -0
  867. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_version_single_source.py +0 -0
  868. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_watch.py +0 -0
  869. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  870. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worker_env_venv_isolation.py +0 -0
  871. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worker_events.py +0 -0
  872. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worker_image_pin_sync.py +0 -0
  873. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worker_safety.py +0 -0
  874. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worker_test_scoping.py +0 -0
  875. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worktree.py +0 -0
  876. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  877. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/tests/test_write_parity.py +0 -0
  878. {code_coordinator-0.5.453 → code_coordinator-0.5.454}/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.453
3
+ Version: 0.5.454
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.453
3
+ Version: 0.5.454
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
@@ -657,6 +657,7 @@ tests/test_health_unit_drift.py
657
657
  tests/test_health_unit_enablement.py
658
658
  tests/test_health_wedged_drive_queue.py
659
659
  tests/test_hooks.py
660
+ tests/test_housekeeping.py
660
661
  tests/test_human_attended_437.py
661
662
  tests/test_init.py
662
663
  tests/test_install_agent_venv_2911.py
@@ -683,6 +683,7 @@
683
683
  "tests/test_health_unit_enablement.py",
684
684
  "tests/test_health_wedged_drive_queue.py",
685
685
  "tests/test_hooks.py",
686
+ "tests/test_housekeeping.py",
686
687
  "tests/test_human_attended_437.py",
687
688
  "tests/test_init.py",
688
689
  "tests/test_install_agent_venv_2911.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.453",
2
+ "tag": "0.5.454",
3
3
  "distance": 0,
4
- "node": "gf9162e8b92018087ab923c640b8eb07b232cf9bd",
4
+ "node": "ga4a99bfd3ea79dd343b5828974ef637592ae4897",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-11"
@@ -41,6 +41,30 @@ is wired in too, reclaiming ``~/.coord/confirm-worktrees/`` entries that
41
41
  outlived ``confirm_branch``'s own per-run cleanup. That is disk hygiene, not
42
42
  DB archiving, but reusing this sweep's cadence beats inventing a second timer
43
43
  for a second maintenance job.
44
+
45
+ #3296: the same sweep also archives two tables #1107/#762 never reached —
46
+ both ~800 KB of every ``/board`` poll with no retention policy at all, per a
47
+ live-fleet sample that found 1,114 ``drive_queue`` rows all ``state=done``
48
+ and 13 of 14 ``plans`` rows belonging to assignments no longer on the board:
49
+
50
+ * terminal ``drive_queue`` rows (:data:`coord.drive_queue.TERMINAL_QUEUE_STATES`
51
+ — the same "is this queue entry terminal" answer the tick processor itself
52
+ uses, not a second definition) older than the retention window ->
53
+ ``drive_queue_archive``. Age is read off the row's own last-touched
54
+ timestamp (``reason_at`` if the row was ever updated post-launch, else
55
+ ``launched_at``, else ``enqueued_at``) — the same fallback chain
56
+ ``merge_queue``'s ``last_attempt or enqueued_at`` uses just below.
57
+ * ``plans`` rows whose ``assignment_id`` no longer appears in the live
58
+ ``assignments`` table (i.e. that assignment has itself already been
59
+ archived — by this sweep or an earlier one) -> ``plans_archive``. A plan
60
+ can only orphan once its assignment ages out, which already implies it is
61
+ past the retention window, so no separate cutoff is needed for ``plans``.
62
+
63
+ Both move via the same ``_move_rows``/``_ensure_archive_mirror`` machinery
64
+ above — move-not-delete, dumb-mirror archive tables — so ``GET
65
+ /drive-queue?state=...`` can still retrieve archived history (see
66
+ ``coord.serve_app``) and nothing is ever unreachable, only un-shipped by
67
+ default from the live table / board projection.
44
68
  """
45
69
 
46
70
  from __future__ import annotations
@@ -71,6 +95,10 @@ _NOTIFICATIONS_ARCHIVE = "notifications_archive"
71
95
  _MERGE_QUEUE = "merge_queue"
72
96
  _MERGE_QUEUE_ARCHIVE = "merge_queue_archive"
73
97
  _MERGE_QUEUE_MERGED_STATE = "merged"
98
+ _DRIVE_QUEUE = "drive_queue"
99
+ _DRIVE_QUEUE_ARCHIVE = "drive_queue_archive"
100
+ _PLANS = "plans"
101
+ _PLANS_ARCHIVE = "plans_archive"
74
102
  _BATCH = 400 # keep IN(...) clauses well under SQLite's 999-variable limit
75
103
 
76
104
 
@@ -148,20 +176,27 @@ def _move_rows(
148
176
 
149
177
  def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
150
178
  """Archive stale terminal assignments + their notifications + merged
151
- merge_queue entries, and reclaim leaked confirm-worktree directories.
179
+ merge_queue entries + terminal drive_queue rows + orphaned plans, and
180
+ reclaim leaked confirm-worktree directories.
152
181
 
153
182
  Returns ``{"archived_assignments": N, "archived_notifications": M,
154
- "archived_merge_queue": K, "removed_confirm_worktrees": W, "dry_run": bool,
155
- "retention_days": D}``. ``archived_*``/``removed_confirm_worktrees`` are
156
- the counts that were (or, for ``dry_run``, would be) moved/deleted. A
157
- no-op returns zeros.
183
+ "archived_merge_queue": K, "archived_drive_queue": Q, "archived_plans": P,
184
+ "removed_confirm_worktrees": W, "dry_run": bool, "retention_days": D}``.
185
+ ``archived_*``/``removed_confirm_worktrees`` are the counts that were (or,
186
+ for ``dry_run``, would be) moved/deleted. A no-op returns zeros.
158
187
 
159
188
  Conservative by construction: nothing active, recent (within the archive
160
189
  window), queued-for-merge, latest-of-an-open-issue, or review-linked to any
161
190
  such row is ever moved. Merge queue entries are archived only once they
162
191
  are in the terminal ``MERGED`` state (#1107 Part 3) — non-terminal /
163
192
  conflicted entries are left for ``prune_stale_queue_entries`` or manual
164
- ``coord merge --drop``.
193
+ ``coord merge --drop``. Drive-queue entries are archived only once they
194
+ are in a :data:`coord.drive_queue.TERMINAL_QUEUE_STATES` state AND older
195
+ than the retention window (#3296) — a fresh ``done``/``blocked``/
196
+ ``failed`` row stays put until it ages out, same as everything else this
197
+ sweep touches. ``plans`` rows follow their assignment: once an
198
+ assignment_id no longer appears in the live ``assignments`` table, its
199
+ plan is orphaned and moves too.
165
200
 
166
201
  #2974: ``removed_confirm_worktrees`` is independent of the DB-archiving
167
202
  ``cutoff``/``retention_days`` above (it has its own, much shorter,
@@ -179,6 +214,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
179
214
  "archived_assignments": 0,
180
215
  "archived_notifications": 0,
181
216
  "archived_merge_queue": 0,
217
+ "archived_drive_queue": 0,
218
+ "archived_plans": 0,
182
219
  "removed_confirm_worktrees": len(swept_worktrees["removed"]),
183
220
  "dry_run": dry_run,
184
221
  "retention_days": _archive_retention_days(),
@@ -240,10 +277,47 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
240
277
  )
241
278
  ]
242
279
 
280
+ # #3296: terminal drive_queue rows past the retention window. Reuses
281
+ # `coord.drive_queue.TERMINAL_QUEUE_STATES` — the same "is this queue
282
+ # entry terminal" the tick processor itself answers — rather than a
283
+ # second, driftable definition here.
284
+ from coord.drive_queue import TERMINAL_QUEUE_STATES # noqa: PLC0415
285
+
286
+ dq_rows = sql.execute(
287
+ conn,
288
+ "SELECT id, state, reason_at, launched_at, enqueued_at " # noqa: S608
289
+ f"FROM {_DRIVE_QUEUE}",
290
+ ).fetchall()
291
+ dq_candidates = [
292
+ r["id"]
293
+ for r in dq_rows
294
+ if (r["state"] or "").lower() in TERMINAL_QUEUE_STATES
295
+ and (r["reason_at"] or r["launched_at"] or r["enqueued_at"] or 0) < cutoff
296
+ ]
297
+
298
+ # #3296: `plans` rows whose assignment is no longer in the live
299
+ # `assignments` table — orphaned either by the archiving just computed
300
+ # above, or by an earlier sweep (run before this feature existed, hence
301
+ # the live fleet's 13-of-14-orphaned sample). No separate cutoff: a plan
302
+ # can only orphan once its assignment ages out, which already implies
303
+ # it's past the retention window.
304
+ live_assignment_ids = {r["assignment_id"] for r in index} - candidate_set
305
+ plan_candidates = [
306
+ r["assignment_id"]
307
+ for r in sql.execute(
308
+ conn, f"SELECT assignment_id FROM {_PLANS}" # noqa: S608
309
+ ).fetchall()
310
+ if r["assignment_id"] and r["assignment_id"] not in live_assignment_ids
311
+ ]
312
+
243
313
  result["archived_assignments"] = len(candidates)
244
314
  result["archived_notifications"] = len(notif_ids)
245
315
  result["archived_merge_queue"] = len(mq_merged_ids)
246
- if dry_run or (not candidates and not notif_ids and not mq_merged_ids):
316
+ result["archived_drive_queue"] = len(dq_candidates)
317
+ result["archived_plans"] = len(plan_candidates)
318
+ if dry_run or not (
319
+ candidates or notif_ids or mq_merged_ids or dq_candidates or plan_candidates
320
+ ):
247
321
  return result
248
322
 
249
323
  with conn:
@@ -259,4 +333,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
259
333
  _move_rows(
260
334
  conn, _MERGE_QUEUE, _MERGE_QUEUE_ARCHIVE, "assignment_id", mq_merged_ids
261
335
  )
336
+ if dq_candidates:
337
+ _move_rows(conn, _DRIVE_QUEUE, _DRIVE_QUEUE_ARCHIVE, "id", dq_candidates)
338
+ if plan_candidates:
339
+ _move_rows(conn, _PLANS, _PLANS_ARCHIVE, "assignment_id", plan_candidates)
262
340
  return result
@@ -4800,7 +4800,11 @@ def openapi_spec() -> dict:
4800
4800
  "summary": (
4801
4801
  "#1753: read the operator-declared `coord drive` work "
4802
4802
  "queue in run order. Filter by repo_name (+ optional "
4803
- "issue_number); omit both to list the whole queue."
4803
+ "issue_number); omit both to list the whole queue. "
4804
+ "#3296: an explicit `state` also pulls in matching rows "
4805
+ "`coord.housekeeping.sweep()` has since archived, so "
4806
+ "terminal history stays reachable after it ages out of "
4807
+ "the live table."
4804
4808
  ),
4805
4809
  "parameters": [
4806
4810
  {
@@ -4811,6 +4815,16 @@ def openapi_spec() -> dict:
4811
4815
  "name": "issue_number", "in": "query", "required": False,
4812
4816
  "schema": {"type": "integer"},
4813
4817
  },
4818
+ {
4819
+ "name": "state", "in": "query", "required": False,
4820
+ "schema": {"type": "string"},
4821
+ "description": (
4822
+ "#3296: filter by drive_queue.state (e.g. "
4823
+ "'done'/'blocked'/'failed'). When given, also "
4824
+ "reads drive_queue_archive so archived rows "
4825
+ "matching this state are still returned."
4826
+ ),
4827
+ },
4814
4828
  ],
4815
4829
  "responses": {
4816
4830
  "200": {"description": "OK"},
@@ -8745,9 +8759,16 @@ def build_app(
8745
8759
  # filters to that repo; `repo_name` + `issue_number` narrows to the (at
8746
8760
  # most one) entry for that issue; neither given lists the whole queue
8747
8761
  # (hand-sized by definition — one row per issue an operator queued).
8762
+ #
8763
+ # #3296: `?state=` additionally reads `drive_queue_archive` — the
8764
+ # live table alone would silently lose a terminal entry the moment
8765
+ # `coord.housekeeping.sweep()` ages it out, making archived history
8766
+ # unreachable rather than merely un-shipped-by-default from the
8767
+ # unfiltered list.
8748
8768
  from coord import state # noqa: PLC0415
8749
8769
 
8750
8770
  repo_name = request.query_params.get("repo_name")
8771
+ state_filter = request.query_params.get("state")
8751
8772
  raw_issue = request.query_params.get("issue_number")
8752
8773
  issue_number = None
8753
8774
  if raw_issue is not None:
@@ -8760,9 +8781,21 @@ def build_app(
8760
8781
  try:
8761
8782
  if repo_name and issue_number is not None:
8762
8783
  entry = state._get_drive_queue_entry_local(repo_name, issue_number)
8784
+ if entry is None and state_filter:
8785
+ entry = state._get_drive_queue_archive_entry_local(
8786
+ repo_name, issue_number
8787
+ )
8788
+ if (
8789
+ entry is not None
8790
+ and state_filter
8791
+ and entry.get("state") != state_filter
8792
+ ):
8793
+ entry = None
8763
8794
  entries = [entry] if entry else []
8764
8795
  else:
8765
- entries = state._list_drive_queue_local(repo_name)
8796
+ entries = state._list_drive_queue_local(
8797
+ repo_name, state=state_filter
8798
+ )
8766
8799
  except Exception as e: # noqa: BLE001
8767
8800
  return JSONResponse(
8768
8801
  {"error": "drive-queue read failed", "detail": str(e)},
@@ -7829,6 +7829,32 @@ def _get_drive_queue_entry_local(repo_name: str, issue_number: int) -> dict | No
7829
7829
  return _decode_drive_queue_row(row) if row is not None else None
7830
7830
 
7831
7831
 
7832
+ def _get_drive_queue_archive_entry_local(
7833
+ repo_name: str, issue_number: int
7834
+ ) -> dict | None:
7835
+ """The archived drive-queue entry for one issue, or ``None``.
7836
+
7837
+ #3296: a live-table miss for (repo_name, issue_number) is ambiguous —
7838
+ "never queued" and "archived after going terminal" look identical
7839
+ without this. Callers that want to tell them apart (the `?state=`
7840
+ history read in ``coord.serve_app``) fall back to this. Defensive
7841
+ against ``drive_queue_archive`` not existing yet, same guard as
7842
+ :func:`_drive_queue_archive_rows_local`.
7843
+ """
7844
+ conn = get_connection()
7845
+ try:
7846
+ row = sql.execute(
7847
+ conn,
7848
+ f"SELECT {_DRIVE_QUEUE_COLUMNS} FROM drive_queue_archive " # noqa: S608 — constant
7849
+ "WHERE repo_name = ? AND issue_number = ?",
7850
+ (repo_name, issue_number),
7851
+ ).fetchone()
7852
+ except sql.driver_errors() as exc: # #2784: not just sqlite3.OperationalError
7853
+ rollback_after_driver_error(conn, exc)
7854
+ return None
7855
+ return _decode_drive_queue_row(row) if row is not None else None
7856
+
7857
+
7832
7858
  def list_drive_queue(repo_name: str | None = None) -> list[dict]:
7833
7859
  """Every drive-queue entry in run order, optionally filtered to one repo.
7834
7860
 
@@ -7843,19 +7869,67 @@ def list_drive_queue(repo_name: str | None = None) -> list[dict]:
7843
7869
  return _list_drive_queue_local(repo_name)
7844
7870
 
7845
7871
 
7846
- def _list_drive_queue_local(repo_name: str | None = None) -> list[dict]:
7872
+ def _list_drive_queue_local(
7873
+ repo_name: str | None = None, *, state: str | None = None
7874
+ ) -> list[dict]:
7875
+ """Live ``drive_queue`` rows, optionally filtered to one repo and/or one
7876
+ ``state`` value.
7877
+
7878
+ #3296: an explicit ``state`` filter also pulls in matching
7879
+ ``drive_queue_archive`` rows — ``coord.housekeeping.sweep()`` moves
7880
+ terminal drive-queue rows there once they age out of the retention
7881
+ window, and a caller asking "show me every `done` entry" must not have
7882
+ them silently vanish the moment they're archived. Omitting ``state``
7883
+ (the pre-#3296 call shape every other caller in this module still uses)
7884
+ reads only the live table, unchanged.
7885
+ """
7886
+ conn = get_connection()
7887
+ where: list[str] = []
7888
+ params: list[object] = []
7889
+ if repo_name:
7890
+ where.append("repo_name = ?")
7891
+ params.append(repo_name)
7892
+ if state:
7893
+ where.append("state = ?")
7894
+ params.append(state)
7895
+ clause = f" WHERE {' AND '.join(where)}" if where else ""
7896
+ rows = sql.execute(
7897
+ conn,
7898
+ f"SELECT {_DRIVE_QUEUE_COLUMNS} FROM drive_queue{clause} " # noqa: S608 — constant
7899
+ "ORDER BY position, id",
7900
+ params,
7901
+ ).fetchall()
7902
+ entries = [_decode_drive_queue_row(r) for r in rows]
7903
+ if state:
7904
+ entries.extend(_drive_queue_archive_rows_local(repo_name, state))
7905
+ return entries
7906
+
7907
+
7908
+ def _drive_queue_archive_rows_local(repo_name: str | None, state: str) -> list[dict]:
7909
+ """``drive_queue_archive`` rows matching *state* (+ optional *repo_name*).
7910
+
7911
+ Defensive against ``drive_queue_archive`` not existing yet — it is only
7912
+ created the first time ``coord.housekeeping.sweep()`` archives a
7913
+ drive-queue row — mirroring
7914
+ :func:`coord.merge_queue._archived_merged_issue_keys`'s guard for the
7915
+ same not-yet-archived case on ``merge_queue_archive``.
7916
+ """
7847
7917
  conn = get_connection()
7918
+ where = ["state = ?"]
7919
+ params: list[object] = [state]
7848
7920
  if repo_name:
7849
- rows = sql.execute(conn,
7850
- f"SELECT {_DRIVE_QUEUE_COLUMNS} FROM drive_queue " # noqa: S608 — constant
7851
- "WHERE repo_name = ? ORDER BY position, id",
7852
- (repo_name,),
7853
- ).fetchall()
7854
- else:
7855
- rows = sql.execute(conn,
7856
- f"SELECT {_DRIVE_QUEUE_COLUMNS} FROM drive_queue " # noqa: S608 — constant
7857
- "ORDER BY position, id"
7921
+ where.append("repo_name = ?")
7922
+ params.append(repo_name)
7923
+ try:
7924
+ rows = sql.execute(
7925
+ conn,
7926
+ f"SELECT {_DRIVE_QUEUE_COLUMNS} FROM drive_queue_archive " # noqa: S608 — constant
7927
+ f"WHERE {' AND '.join(where)} ORDER BY id",
7928
+ params,
7858
7929
  ).fetchall()
7930
+ except sql.driver_errors() as exc: # #2784: not just sqlite3.OperationalError
7931
+ rollback_after_driver_error(conn, exc)
7932
+ return []
7859
7933
  return [_decode_drive_queue_row(r) for r in rows]
7860
7934
 
7861
7935
 
@@ -0,0 +1,259 @@
1
+ """#3296: extend `coord housekeeping` to archive terminal `drive_queue` rows
2
+ and `plans` rows orphaned by an archived assignment.
3
+
4
+ `coord.housekeeping.sweep()` (#762/#1107) already moves stale terminal
5
+ `assignments`/`notifications`/`merge_queue` rows to their `_archive` tables
6
+ on a retention timer — move-not-delete, nothing ever deleted. A live-fleet
7
+ sample found the two tables this issue covers made up ~800 KB of every
8
+ `/board` poll with no retention policy at all: 1,114 `drive_queue` rows all
9
+ `state=done`, and 13 of 14 `plans` rows belonging to assignments no longer
10
+ on the board. These tests exercise the real write path (the sweep) and the
11
+ real read paths (`SqliteStore.board_projection` + the `/drive-queue` HTTP
12
+ route), not just a pure helper — the same shape as `tests/test_board_cap_762.py`.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import sqlite3
18
+ import time
19
+
20
+ import pytest
21
+
22
+ from coord.dao import SqliteStore
23
+ from coord.db import _ensure_schema
24
+
25
+ NOW = time.time()
26
+ RECENT = NOW - 2 * 86400 # 2 days ago → inside the 30d archive window
27
+ OLD = NOW - 40 * 86400 # 40 days ago → outside the archive window
28
+
29
+
30
+ @pytest.fixture(autouse=True)
31
+ def _isolated_confirm_worktrees_dir(monkeypatch, tmp_path):
32
+ """See `tests/test_board_cap_762.py`'s fixture of the same name:
33
+ `housekeeping.sweep()` always also sweeps `~/.coord/confirm-worktrees/`
34
+ (#2974), so every test in this module that calls the real sweep needs
35
+ `coord.state.COORD_DIR` pinned to a private tmp dir, or it would touch
36
+ the operator's real `~/.coord/` as a side effect of running pytest.
37
+ """
38
+ monkeypatch.setattr("coord.state.COORD_DIR", tmp_path / "coord-state")
39
+
40
+
41
+ def _ins_assignment(
42
+ conn: sqlite3.Connection,
43
+ aid: str,
44
+ *,
45
+ status: str,
46
+ issue: int,
47
+ repo: str = "r",
48
+ dispatched_at: float | None = None,
49
+ finished_at: float | None = None,
50
+ ) -> None:
51
+ conn.execute(
52
+ "INSERT INTO assignments (assignment_id, machine_name, repo_name, "
53
+ "issue_number, issue_title, status, type, dispatched_at, finished_at) "
54
+ "VALUES (?,?,?,?,?,?,?,?,?)",
55
+ (aid, "m", repo, issue, f"#{issue}", status, "work", dispatched_at, finished_at),
56
+ )
57
+
58
+
59
+ def _ins_issue(conn: sqlite3.Connection, number: int, state: str, repo: str = "r") -> None:
60
+ conn.execute(
61
+ "INSERT INTO issues (repo_name, number, state) VALUES (?,?,?)",
62
+ (repo, number, state),
63
+ )
64
+
65
+
66
+ def _ins_drive_queue(
67
+ conn: sqlite3.Connection,
68
+ repo: str,
69
+ issue: int,
70
+ *,
71
+ position: int,
72
+ state: str,
73
+ enqueued_at: float,
74
+ reason_at: float | None = None,
75
+ launched_at: float | None = None,
76
+ ) -> None:
77
+ conn.execute(
78
+ "INSERT INTO drive_queue (repo_name, issue_number, position, state, "
79
+ "enqueued_at, reason_at, launched_at) VALUES (?,?,?,?,?,?,?)",
80
+ (repo, issue, position, state, enqueued_at, reason_at, launched_at),
81
+ )
82
+
83
+
84
+ def _ins_plan(conn: sqlite3.Connection, assignment_id: str, plan_data: str = "{}") -> None:
85
+ conn.execute(
86
+ "INSERT INTO plans (assignment_id, plan_data) VALUES (?, ?)",
87
+ (assignment_id, plan_data),
88
+ )
89
+
90
+
91
+ # ── drive_queue archival ───────────────────────────────────────────────────
92
+
93
+ def test_housekeeping_archives_old_terminal_drive_queue(coord_db, monkeypatch):
94
+ monkeypatch.setenv("COORD_ARCHIVE_RETENTION_DAYS", "30")
95
+ from coord import housekeeping
96
+
97
+ conn = coord_db
98
+ _ins_drive_queue(conn, "r", 1, position=0, state="waiting", enqueued_at=OLD)
99
+ _ins_drive_queue(
100
+ conn, "r", 2, position=1, state="done", enqueued_at=RECENT, reason_at=RECENT
101
+ )
102
+ _ins_drive_queue(
103
+ conn, "r", 3, position=2, state="done", enqueued_at=OLD, reason_at=OLD
104
+ )
105
+ _ins_drive_queue(
106
+ conn, "r", 4, position=3, state="blocked", enqueued_at=OLD, reason_at=OLD
107
+ )
108
+ # No reason_at/launched_at at all → falls back to enqueued_at, same
109
+ # fallback chain merge_queue's archival already relies on.
110
+ _ins_drive_queue(conn, "r", 5, position=4, state="failed", enqueued_at=OLD)
111
+ conn.commit()
112
+
113
+ dry = housekeeping.sweep(dry_run=True)
114
+ assert dry["archived_drive_queue"] == 3 and dry["dry_run"] is True
115
+ assert conn.execute("SELECT COUNT(*) FROM drive_queue").fetchone()[0] == 5
116
+
117
+ res = housekeeping.sweep()
118
+ assert res["archived_drive_queue"] == 3
119
+ live = {r[0] for r in conn.execute("SELECT issue_number FROM drive_queue")}
120
+ arch = {r[0] for r in conn.execute("SELECT issue_number FROM drive_queue_archive")}
121
+ assert live == {1, 2} # non-terminal + recent-terminal untouched
122
+ assert arch == {3, 4, 5} # old done/blocked/failed all moved
123
+ # conservation: nothing lost
124
+ assert len(live) + len(arch) == 5
125
+
126
+
127
+ def test_housekeeping_drive_queue_archive_row_shape_preserved(coord_db, monkeypatch):
128
+ """The archived row keeps its full column set (position, after_json, ...)
129
+ — dumb-mirror storage, not a lossy projection."""
130
+ monkeypatch.setenv("COORD_ARCHIVE_RETENTION_DAYS", "30")
131
+ from coord import housekeeping
132
+
133
+ conn = coord_db
134
+ _ins_drive_queue(conn, "r", 9, position=0, state="done", enqueued_at=OLD, reason_at=OLD)
135
+ conn.commit()
136
+
137
+ housekeeping.sweep()
138
+ row = conn.execute(
139
+ "SELECT repo_name, issue_number, state, position FROM drive_queue_archive"
140
+ ).fetchone()
141
+ assert tuple(row) == ("r", 9, "done", 0)
142
+
143
+
144
+ # ── plans archival ─────────────────────────────────────────────────────────
145
+
146
+ def test_housekeeping_archives_orphaned_plans(coord_db, monkeypatch):
147
+ monkeypatch.setenv("COORD_ARCHIVE_RETENTION_DAYS", "30")
148
+ from coord import housekeeping
149
+
150
+ conn = coord_db
151
+ _ins_assignment(conn, "active", status="running", issue=1, dispatched_at=OLD)
152
+ _ins_assignment(
153
+ conn, "old_closed", status="merged", issue=2, dispatched_at=OLD, finished_at=OLD
154
+ )
155
+ _ins_issue(conn, 2, "closed")
156
+ _ins_plan(conn, "active") # assignment stays live → plan stays
157
+ _ins_plan(conn, "old_closed") # assignment archived THIS sweep → plan archived
158
+ _ins_plan(conn, "long_gone") # no matching assignment at all → pre-existing orphan
159
+ conn.commit()
160
+
161
+ dry = housekeeping.sweep(dry_run=True)
162
+ assert dry["archived_plans"] == 2 and dry["dry_run"] is True
163
+ assert conn.execute("SELECT COUNT(*) FROM plans").fetchone()[0] == 3
164
+
165
+ res = housekeeping.sweep()
166
+ assert res["archived_plans"] == 2
167
+ live = {r[0] for r in conn.execute("SELECT assignment_id FROM plans")}
168
+ arch = {r[0] for r in conn.execute("SELECT assignment_id FROM plans_archive")}
169
+ assert live == {"active"}
170
+ assert arch == {"old_closed", "long_gone"}
171
+ # conservation: nothing lost
172
+ assert len(live) + len(arch) == 3
173
+
174
+
175
+ # ── board_projection excludes archived rows (real read path, file-backed) ──
176
+
177
+ @pytest.fixture
178
+ def file_db(tmp_path):
179
+ path = tmp_path / "coord.db"
180
+ conn = sqlite3.connect(path)
181
+ conn.row_factory = sqlite3.Row
182
+ _ensure_schema(conn)
183
+ yield path, conn
184
+ conn.close()
185
+
186
+
187
+ def test_board_projection_excludes_archived_drive_queue_and_plans(file_db, monkeypatch):
188
+ monkeypatch.setenv("COORD_ARCHIVE_RETENTION_DAYS", "30")
189
+ from coord import db, housekeeping
190
+
191
+ path, conn = file_db
192
+ _ins_assignment(
193
+ conn, "old_closed", status="merged", issue=3, dispatched_at=OLD, finished_at=OLD
194
+ )
195
+ _ins_issue(conn, 3, "closed")
196
+ _ins_drive_queue(conn, "r", 1, position=0, state="done", enqueued_at=OLD, reason_at=OLD)
197
+ _ins_drive_queue(conn, "r", 2, position=1, state="waiting", enqueued_at=RECENT)
198
+ _ins_plan(conn, "old_closed")
199
+ conn.commit()
200
+
201
+ # housekeeping.sweep() reads/writes via coord.db.get_connection() — point
202
+ # that singleton at this same file-backed connection so the sweep and the
203
+ # projection read agree, mirroring test_board_cap_762's daemon-route test.
204
+ db.override_connection(conn)
205
+ housekeeping.sweep()
206
+
207
+ proj = SqliteStore(path).board_projection()
208
+ dq_issues = {e["issue_number"] for e in proj["drive_queue"]}
209
+ assert dq_issues == {2} # the archived 'done' row is gone
210
+ assert proj["plans"] == {} # the orphaned plan is gone
211
+
212
+
213
+ # ── GET /drive-queue?state= reaches the archive (black-box, real route) ────
214
+
215
+ def test_drive_queue_endpoint_state_param_reads_archived_history(
216
+ tmp_path, valid_config_path, monkeypatch
217
+ ):
218
+ monkeypatch.setenv("COORD_ARCHIVE_RETENTION_DAYS", "30")
219
+ from starlette.testclient import TestClient
220
+
221
+ from coord import db, housekeeping
222
+ from coord.config import load as load_config
223
+ from coord.dao import SqliteStore
224
+ from coord.serve_app import build_app
225
+
226
+ path = tmp_path / "coord.db"
227
+ conn = sqlite3.connect(str(path), check_same_thread=False)
228
+ conn.row_factory = sqlite3.Row
229
+ _ensure_schema(conn)
230
+ db.override_connection(conn)
231
+ _ins_drive_queue(conn, "r", 7, position=0, state="done", enqueued_at=OLD, reason_at=OLD)
232
+ _ins_drive_queue(conn, "r", 8, position=1, state="waiting", enqueued_at=RECENT)
233
+ conn.commit()
234
+ housekeeping.sweep() # moves issue 7 to drive_queue_archive
235
+
236
+ app = build_app(SqliteStore(path), load_config(valid_config_path))
237
+ with TestClient(app) as cli:
238
+ # Un-shipped-by-default: no `state` filter → archived row stays hidden.
239
+ default = cli.get("/drive-queue", params={"repo_name": "r"}).json()
240
+ assert {e["issue_number"] for e in default["entries"]} == {8}
241
+
242
+ # Explicit `state=done` reaches into the archive → archived row returns.
243
+ by_state = cli.get(
244
+ "/drive-queue", params={"repo_name": "r", "state": "done"}
245
+ ).json()
246
+ assert {e["issue_number"] for e in by_state["entries"]} == {7}
247
+
248
+ # Point lookup by (repo_name, issue_number) + state also finds it.
249
+ point = cli.get(
250
+ "/drive-queue",
251
+ params={"repo_name": "r", "issue_number": 7, "state": "done"},
252
+ ).json()
253
+ assert {e["issue_number"] for e in point["entries"]} == {7}
254
+
255
+ # Same point lookup with NO state param stays un-shipped-by-default.
256
+ point_no_state = cli.get(
257
+ "/drive-queue", params={"repo_name": "r", "issue_number": 7}
258
+ ).json()
259
+ assert point_no_state["entries"] == []
@@ -458,6 +458,23 @@ SQLITE_CONNECT_ALLOWLIST: dict[str, Classification] = {
458
458
  "A file DB for board_projection, plus a check_same_thread=False "
459
459
  "connection for the daemon threadpool sweep.",
460
460
  ),
461
+ "test_housekeeping.py": Classification(
462
+ 2, (BUCKET_C,),
463
+ "#3296's drive_queue/plans archival tests, the same two shapes as "
464
+ "test_board_cap_762.py above (the file this one extends the sweep "
465
+ "alongside). One is a `file_db` fixture whose *path* is handed to "
466
+ "SqliteStore(path) for the board_projection read while its *conn* is "
467
+ "handed to db.override_connection() for the sweep's write, so both "
468
+ "halves must agree on one on-disk database; the other is a "
469
+ "check_same_thread=False connection because the /drive-queue route "
470
+ "runs on a TestClient worker thread. Neither fits the autouse "
471
+ "coord_db fixture (`:memory:` has no path for SqliteStore to open, "
472
+ "and it is single-thread-bound) nor tests.backends."
473
+ "scratch_database() (it yields a connection, not the path "
474
+ "SqliteStore needs, and SqliteStore is the SQLite arm of the store "
475
+ "seam by definition — following COORD_TEST_BACKEND to Postgres "
476
+ "would hand it a database it cannot open).",
477
+ ),
461
478
  "test_approved_work_2532.py": Classification(
462
479
  2, (BUCKET_C,),
463
480
  "A thread-safe rw_db override for the write side plus a detail_db "