code-coordinator 0.5.288__tar.gz → 0.5.290__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 (888) hide show
  1. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agent.py +95 -5
  5. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/cargo_cache.py +340 -51
  6. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/portal.py +62 -8
  7. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/decomposition_chat.py +21 -0
  8. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/cargo_targets.py +95 -12
  9. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/portal_store.py +133 -1
  10. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/serve_app.py +90 -0
  11. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cargo_cache.py +282 -1
  12. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_portal.py +121 -0
  13. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_decomposition_chat.py +149 -0
  14. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_checks.py +90 -0
  15. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_fix.py +56 -0
  16. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_portal_store.py +212 -0
  17. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_sqlite_connect_ratchet.py +13 -3
  18. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/workflows/cargo-test.yml +0 -0
  29. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.github/workflows/test.yml +0 -0
  31. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/.gitignore +0 -0
  32. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/CLAUDE.md +0 -0
  33. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/GOAL.md +0 -0
  34. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/LICENSE +0 -0
  35. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/MANIFEST.in +0 -0
  36. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/README.md +0 -0
  37. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/SOURCES.txt +0 -0
  38. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/dependency_links.txt +0 -0
  39. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/entry_points.txt +0 -0
  40. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/requires.txt +0 -0
  41. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/scm_file_list.json +0 -0
  42. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/code_coordinator.egg-info/top_level.txt +0 -0
  43. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/__init__.py +0 -0
  44. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/_board_mapping.py +0 -0
  45. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/acceptance.py +0 -0
  46. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/acceptance_drivers.py +0 -0
  47. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/block_log.py +0 -0
  56. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/board_bool_guard.py +0 -0
  57. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/ci_fix.py +0 -0
  64. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/ci_github.py +0 -0
  65. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/ci_gitlab.py +0 -0
  66. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/ci_store.py +0 -0
  67. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/claim.py +0 -0
  68. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/cli.py +0 -0
  69. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/client.py +0 -0
  70. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/__init__.py +0 -0
  71. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/_common.py +0 -0
  72. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/acceptance.py +0 -0
  73. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/agent_ops.py +0 -0
  74. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/audit.py +0 -0
  75. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/chat.py +0 -0
  76. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/drive.py +0 -0
  79. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/drive_queue.py +0 -0
  80. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/gate_a.py +0 -0
  81. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/machine.py +0 -0
  85. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/merge.py +0 -0
  86. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/milestone.py +0 -0
  87. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/plan_followup.py +0 -0
  88. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/plans.py +0 -0
  89. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/config.py +0 -0
  104. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/db.py +0 -0
  114. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/README.md +0 -0
  116. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-agent.service +0 -0
  117. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-drive-queue.service +0 -0
  121. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-drive-queue.timer +0 -0
  122. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-failure-notify.service +0 -0
  123. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-fleet-watchdog.service +0 -0
  124. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  125. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-notify.service +0 -0
  126. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-notify.timer +0 -0
  127. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-release-propagate.service +0 -0
  128. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-release-propagate.timer +0 -0
  129. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-release-window.service +0 -0
  130. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-release-window.timer +0 -0
  131. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-serve.service +0 -0
  132. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-web-dist-build.service +0 -0
  133. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-web-dist-build.timer +0 -0
  134. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy/coord-web.service +0 -0
  135. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy_manifest.py +0 -0
  136. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deploy_units.py +0 -0
  137. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/deps.py +0 -0
  138. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/diagnose.py +0 -0
  139. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dispatch.py +0 -0
  140. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/dist_name.py +0 -0
  141. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/drive.py +0 -0
  142. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/drive_queue.py +0 -0
  143. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/drive_state.py +0 -0
  144. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/events.py +0 -0
  145. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/failure_class.py +0 -0
  146. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/filelock.py +0 -0
  147. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/fleet_config_health.py +0 -0
  148. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/forge_availability.py +0 -0
  149. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/freshness.py +0 -0
  150. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/gate_a.py +0 -0
  151. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/gate_b.py +0 -0
  152. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/gate_snapshot.py +0 -0
  153. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/gates.py +0 -0
  154. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/github_ops.py +0 -0
  155. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/github_throttle.py +0 -0
  156. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/goal.py +0 -0
  157. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/graph_health.py +0 -0
  158. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/__init__.py +0 -0
  159. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/aggregate.py +0 -0
  160. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/__init__.py +0 -0
  161. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/agent_install.py +0 -0
  162. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/claude_binary.py +0 -0
  163. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/issues_sync_staleness.py +0 -0
  174. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/plan_usage.py +0 -0
  175. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/release_cordon.py +0 -0
  176. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/repo_state.py +0 -0
  177. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/spawned_coord.py +0 -0
  178. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/stalled_pipeline.py +0 -0
  179. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/timer_active.py +0 -0
  180. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/toolchain.py +0 -0
  181. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/unit_drift.py +0 -0
  182. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/unit_enablement.py +0 -0
  183. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/checks/worktrees.py +0 -0
  184. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/cli.py +0 -0
  185. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/context.py +0 -0
  186. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/fleet_snapshot.py +0 -0
  187. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/models.py +0 -0
  188. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/pypi.py +0 -0
  189. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/registry.py +0 -0
  190. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/render.py +0 -0
  191. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/health/units.py +0 -0
  192. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/hooks.py +0 -0
  193. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/housekeeping.py +0 -0
  194. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/interactive.py +0 -0
  195. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/issue_store.py +0 -0
  196. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/issues_sync_status.py +0 -0
  197. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/liveness_auditor.py +0 -0
  198. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/machine_onboard.py +0 -0
  199. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/machine_pause.py +0 -0
  200. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/merge_queue.py +0 -0
  201. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/milestone_chat.py +0 -0
  202. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/milestone_dispatch.py +0 -0
  203. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/milestone_gate.py +0 -0
  204. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/milestone_order.py +0 -0
  205. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/mock_author.py +0 -0
  206. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/models.py +0 -0
  207. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/network.py +0 -0
  208. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/new_issue_chat.py +0 -0
  209. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/__init__.py +0 -0
  210. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/baseline.py +0 -0
  211. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/cli.py +0 -0
  212. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/collect.py +0 -0
  213. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/digest.py +0 -0
  214. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/models.py +0 -0
  215. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/predicate.py +0 -0
  216. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/service.py +0 -0
  217. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/store.py +0 -0
  218. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notifier/transport.py +0 -0
  219. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/notify.py +0 -0
  220. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/openapi.py +0 -0
  221. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/overlap_fence.py +0 -0
  222. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/overlap_predict.py +0 -0
  223. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/parentage.py +0 -0
  224. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/parentage_github.py +0 -0
  225. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/pipeline.py +0 -0
  226. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/plan_parser.py +0 -0
  227. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/plans.py +0 -0
  228. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/platform_paths.py +0 -0
  229. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/portal_bridge.py +0 -0
  230. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/portal_sync.py +0 -0
  231. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/pr_body_lint.py +0 -0
  232. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/prereqs.py +0 -0
  233. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/progress.py +0 -0
  234. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/providers/__init__.py +0 -0
  235. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/providers/base.py +0 -0
  236. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/providers/claude.py +0 -0
  237. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/providers/claude_pty.py +0 -0
  238. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/providers/opencode.py +0 -0
  239. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/queue_diagnose.py +0 -0
  240. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/reconcile.py +0 -0
  241. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/reconcile_tick.py +0 -0
  242. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/refine_chat.py +0 -0
  243. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/release_cordon.py +0 -0
  244. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/release_propagate.py +0 -0
  245. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/release_verify.py +0 -0
  246. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/release_window.py +0 -0
  247. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/repo_edit.py +0 -0
  248. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/repo_onboard.py +0 -0
  249. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/reports.py +0 -0
  250. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/rest_schema.py +0 -0
  251. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/revalidate.py +0 -0
  252. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/review.py +0 -0
  253. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/scorecard.py +0 -0
  254. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/self_health.py +0 -0
  255. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  256. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  257. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  258. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/portal-followup/SKILL.md +0 -0
  261. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/release-now/SKILL.md +0 -0
  262. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  263. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  264. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/skills/update-issue/SKILL.md +0 -0
  265. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/smoke.py +0 -0
  266. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/spend_ceiling.py +0 -0
  267. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/split_work.py +0 -0
  268. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/sql.py +0 -0
  269. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/stage_projection.py +0 -0
  270. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/state.py +0 -0
  271. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/store_migrate.py +0 -0
  272. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/test_author.py +0 -0
  273. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/test_chat.py +0 -0
  274. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/test_orchestrator.py +0 -0
  275. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/test_report.py +0 -0
  276. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/tui_release.py +0 -0
  277. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/usage.py +0 -0
  278. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/usage_limits.py +0 -0
  279. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/usage_rollup.py +0 -0
  280. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coord/worker_events.py +0 -0
  281. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/coordinator.example.yml +0 -0
  282. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-agent.service +0 -0
  283. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-db-backup.service +0 -0
  284. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-db-backup.sh +0 -0
  285. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-db-backup.timer +0 -0
  286. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-drive-queue.service +0 -0
  287. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-drive-queue.timer +0 -0
  288. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-failure-notify.service +0 -0
  289. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-failure-notify.sh +0 -0
  290. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-fleet-watchdog.service +0 -0
  291. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-fleet-watchdog.timer +0 -0
  292. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-notify.service +0 -0
  293. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-notify.timer +0 -0
  294. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-release-propagate.service +0 -0
  295. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-release-propagate.timer +0 -0
  296. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-release-window.service +0 -0
  297. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-release-window.timer +0 -0
  298. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-serve.service +0 -0
  299. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-web-dist-build.service +0 -0
  300. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-web-dist-build.sh +0 -0
  301. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-web-dist-build.timer +0 -0
  302. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-web-rollback.sh +0 -0
  303. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/coord-web.service +0 -0
  304. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/deploy/node-shim.sh +0 -0
  305. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  306. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ADR_COORD_WEB_CI.md +0 -0
  307. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ADR_COORD_WEB_DIST.md +0 -0
  308. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/AGENT_OPERATIONS.md +0 -0
  309. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ARCHITECTURE.md +0 -0
  310. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ARCH_SECURITY_GATES.md +0 -0
  311. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/COCKPIT.md +0 -0
  312. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/CONTROL_CENTER.md +0 -0
  313. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/COST_DISCIPLINE.md +0 -0
  314. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/CROSS_PLATFORM.md +0 -0
  315. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/CUSTOMER_FACING_APPS.md +0 -0
  316. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/CUSTOMER_PORTAL.md +0 -0
  317. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/DRIVE_QUEUE.md +0 -0
  318. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/EPHEMERAL_WORKERS.md +0 -0
  319. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/FORGE_MIGRATION.md +0 -0
  320. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/GRAPHIFY_SETUP.md +0 -0
  321. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ISSUE_GUIDANCE.md +0 -0
  322. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/MAC_MINI.md +0 -0
  323. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  324. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/NOTIFIER.md +0 -0
  325. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/OPENCODE_VERIFICATION.md +0 -0
  326. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/OPERATING_GOTCHAS.md +0 -0
  327. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/OPERATOR_GUIDES.md +0 -0
  328. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/ORACLE_LOOP.md +0 -0
  329. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/PHONE_WEBAPP.md +0 -0
  330. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/PIPELINE_V2.md +0 -0
  331. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/PLATFORM_EVOLUTION.md +0 -0
  332. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/SECOND_BACKEND.md +0 -0
  333. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/STORE_SERVICE.md +0 -0
  334. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  335. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/WEB_CONTROL_CENTER.md +0 -0
  336. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/WSL_WINDOWS_WORKER.md +0 -0
  337. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/mocks/web/README.md +0 -0
  338. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/mocks/web/_tokens.css +0 -0
  339. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/mocks/web/issue-detail.html +0 -0
  340. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/mocks/web/pipeline-narrow.html +0 -0
  341. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/docs/mocks/web/pipeline-wide.html +0 -0
  342. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/graphify-out/.gitignore +0 -0
  343. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/install-agent.sh +0 -0
  344. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/pyproject.toml +0 -0
  345. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/audit_review_verdict_overrides.py +0 -0
  346. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  347. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/build-worker-image.sh +0 -0
  348. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/coordinator-machine.py +0 -0
  349. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/epic-down.sh +0 -0
  350. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/epic-up.sh +0 -0
  351. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/preflight.sh +0 -0
  352. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/provision-worker.sh +0 -0
  353. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  354. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  355. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/azure-workers/verify-github-token.sh +0 -0
  356. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/check_gh_argv_containment.py +0 -0
  357. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/codegen.py +0 -0
  358. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/coord-test-runner.sh +0 -0
  359. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/coord-venv-rollback.sh +0 -0
  360. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/drive-batch.sh +0 -0
  361. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/fleet_watchdog.py +0 -0
  362. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/gen_board_fixture.py +0 -0
  363. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/gen_mock_index.py +0 -0
  364. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/next_release_tag.py +0 -0
  365. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/run_tests_in_populated_home.sh +0 -0
  366. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/run_tests_without_gh.sh +0 -0
  367. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/smoke_437_interactive.py +0 -0
  368. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/verify_878_review_capture.py +0 -0
  369. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/verify_release_published.py +0 -0
  370. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/scripts/verify_release_wheel.py +0 -0
  371. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/setup.cfg +0 -0
  372. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/SMOKE_SET.md +0 -0
  373. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/__init__.py +0 -0
  374. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-37/conftest.py +0 -0
  375. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-37/contract.md +0 -0
  376. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-37/manifest.yml +0 -0
  377. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  378. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  379. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/contract.md +0 -0
  380. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  381. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  382. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/manifest.yml +0 -0
  383. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-51/tsconfig.json +0 -0
  385. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  386. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/backends.py +0 -0
  387. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/conftest.py +0 -0
  388. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/board-pipeline-basic.json +0 -0
  389. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  390. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  391. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  392. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  393. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/all_pass.json +0 -0
  394. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  395. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/mixed_fail.json +0 -0
  396. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  397. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  398. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/skip.json +0 -0
  399. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/playwright/truncated.json +0 -0
  400. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  401. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  402. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  403. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  404. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  405. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  406. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  407. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_acceptance.py +0 -0
  409. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_acceptance_drivers.py +0 -0
  410. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent.py +0 -0
  411. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_api_error.py +0 -0
  412. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_app.py +0 -0
  413. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_branch_base.py +0 -0
  414. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_branch_capture.py +0 -0
  415. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_config_free_1712.py +0 -0
  416. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_deploy_units_endpoint.py +0 -0
  417. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_dirty_worktree.py +0 -0
  418. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  419. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_graph_self_heal.py +0 -0
  420. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_health_h3.py +0 -0
  421. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_idle_restart.py +0 -0
  422. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_push_failure.py +0 -0
  423. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_reap.py +0 -0
  424. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_repos_and_pull.py +0 -0
  425. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_restart_services_endpoint.py +0 -0
  426. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_skills_self_heal.py +0 -0
  427. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_startup_diagnostics.py +0 -0
  428. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_update.py +0 -0
  429. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_update_bluegreen.py +0 -0
  430. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_usage_limit.py +0 -0
  431. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_agent_zero_commit.py +0 -0
  432. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ambient_home_isolation.py +0 -0
  433. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_approve_dependency_busy_2804.py +0 -0
  434. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_approve_reject_plan.py +0 -0
  435. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_approve_usage_gate.py +0 -0
  436. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_approved_work_2532.py +0 -0
  437. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_assignment_already_recorded_daemon.py +0 -0
  438. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_audit_log.py +0 -0
  439. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_audit_outcome.py +0 -0
  440. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_audit_query.py +0 -0
  441. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_auto_loop.py +0 -0
  442. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_auto_release_publish_2035.py +0 -0
  443. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_backend_selection.py +0 -0
  444. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_base_checkout_restore.py +0 -0
  445. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_block_log.py +0 -0
  446. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_cap_762.py +0 -0
  447. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_fixture.py +0 -0
  448. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_read_path.py +0 -0
  449. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_schema.py +0 -0
  450. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_service.py +0 -0
  451. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_state.py +0 -0
  452. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_board_wire.py +0 -0
  453. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_brain.py +0 -0
  454. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_branch_model.py +0 -0
  455. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_bug_intake.py +0 -0
  456. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_build_worker_image_env_update.py +0 -0
  457. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_check_gh_argv_containment.py +0 -0
  458. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ci_acceptance_gate_1950.py +0 -0
  459. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ci_fix.py +0 -0
  460. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ci_gitlab.py +0 -0
  461. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ci_parity_2091.py +0 -0
  462. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_ci_store.py +0 -0
  463. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_claim.py +0 -0
  464. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_claude_md_budget.py +0 -0
  465. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_acceptance.py +0 -0
  466. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_assign.py +0 -0
  467. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  468. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_assign_interactive_remote.py +0 -0
  469. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_assign_provider.py +0 -0
  470. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  471. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_audit.py +0 -0
  472. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_chat_continue.py +0 -0
  473. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_decide.py +0 -0
  474. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_diagnose_config_provenance.py +0 -0
  475. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_diagnose_forge_availability.py +0 -0
  476. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_diagnose_graph.py +0 -0
  477. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_diagnose_self.py +0 -0
  478. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_doctor.py +0 -0
  479. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_doctor_config_free_1801.py +0 -0
  480. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  481. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_drive.py +0 -0
  482. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_drive_queue.py +0 -0
  483. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_escalate.py +0 -0
  484. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_fix_headless_review.py +0 -0
  485. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_gate_a.py +0 -0
  486. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_install_drift.py +0 -0
  487. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_install_skills.py +0 -0
  488. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_issue_comment.py +0 -0
  489. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_issue_create_label.py +0 -0
  490. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_issue_reopen.py +0 -0
  491. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_issue_view_list.py +0 -0
  492. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_merge.py +0 -0
  493. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_assign.py +0 -0
  494. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_capture.py +0 -0
  495. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_chat_add_child.py +0 -0
  496. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_dispatch.py +0 -0
  497. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_gate_b.py +0 -0
  498. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_gate_c.py +0 -0
  499. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_order.py +0 -0
  500. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  501. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_milestone_ship.py +0 -0
  502. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_network.py +0 -0
  503. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_new_issue_chat.py +0 -0
  504. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_plans.py +0 -0
  505. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_pr.py +0 -0
  506. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_pull_artifact.py +0 -0
  507. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_queue.py +0 -0
  508. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_reattach_sessions.py +0 -0
  509. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_refine_board.py +0 -0
  510. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_release_preflight.py +0 -0
  511. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_release_propagate.py +0 -0
  512. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_release_window.py +0 -0
  513. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_repo_2220.py +0 -0
  514. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  515. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_scorecard.py +0 -0
  516. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_set_review_findings.py +0 -0
  517. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_advisory_terminal.py +0 -0
  518. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_contested_tag.py +0 -0
  519. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_merge_queue.py +0 -0
  520. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_provider.py +0 -0
  521. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_review_finalizing.py +0 -0
  522. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_test_failed_tag.py +0 -0
  523. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_status_usage_limit.py +0 -0
  524. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_sync_comments_873.py +0 -0
  525. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_test_plan.py +0 -0
  526. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_track.py +0 -0
  527. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_tui_update.py +0 -0
  528. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cli_wait.py +0 -0
  529. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_client_base_install.py +0 -0
  530. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_commands_common.py +0 -0
  531. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_comments.py +0 -0
  532. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_completion_summary.py +0 -0
  533. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config.py +0 -0
  534. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config_acceptance.py +0 -0
  535. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config_audit.py +0 -0
  536. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config_pricing.py +0 -0
  537. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  538. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_config_usage_gate.py +0 -0
  539. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_confirm_test.py +0 -0
  540. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_conflict_fix.py +0 -0
  541. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_conflict_fix_semantic.py +0 -0
  542. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  543. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_test.py +0 -0
  544. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_test_runner_baseline.py +0 -0
  545. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_test_runner_populated_home.py +0 -0
  546. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_test_runner_routing.py +0 -0
  547. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_test_runner_toolchain.py +0 -0
  548. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_uat.py +0 -0
  549. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coord_web_sse_restart_live.py +0 -0
  550. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_coordinator_machine.py +0 -0
  551. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_cross_platform_imports.py +0 -0
  552. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dao.py +0 -0
  553. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dashboard.py +0 -0
  554. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dashboard_fixture.py +0 -0
  555. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dashboard_terminal.py +0 -0
  556. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dashboard_terminal_live.py +0 -0
  557. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_db.py +0 -0
  558. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dead_end.py +0 -0
  559. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_coord_db_backup.py +0 -0
  560. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_coord_web_dist.py +0 -0
  561. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_coord_web_rollback.py +0 -0
  562. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_drive_queue_unit.py +0 -0
  563. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_failure_notify_unit.py +0 -0
  564. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_manifest.py +0 -0
  565. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_notify_unit.py +0 -0
  566. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_units_lane.py +0 -0
  567. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deploy_web_unit.py +0 -0
  568. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_deps.py +0 -0
  569. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_diagnose.py +0 -0
  570. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dispatch.py +0 -0
  571. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dispatch_target_validation.py +0 -0
  572. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_dist_name.py +0 -0
  573. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive.py +0 -0
  575. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue.py +0 -0
  576. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue_blocked_rendering.py +0 -0
  577. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue_launch_argv.py +0 -0
  578. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  579. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue_roll_pending.py +0 -0
  580. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  581. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_state.py +0 -0
  582. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_drive_tmux.py +0 -0
  583. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_epic_up_capability_detection.py +0 -0
  584. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  585. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_epic_up_image_provenance.py +0 -0
  586. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_errors.py +0 -0
  587. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_events.py +0 -0
  588. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_failure_class.py +0 -0
  589. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_filelock.py +0 -0
  590. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  591. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_fix_of_force_override.py +0 -0
  592. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_fleet_config_health.py +0 -0
  593. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_fleet_health_probes.py +0 -0
  594. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_fleet_health_snapshot.py +0 -0
  595. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_fleet_watchdog.py +0 -0
  596. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_forge_availability.py +0 -0
  597. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_freshness.py +0 -0
  598. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gate_a.py +0 -0
  599. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gate_b.py +0 -0
  600. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gate_snapshot_staleness.py +0 -0
  601. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gates.py +0 -0
  602. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  603. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_gen_mock_index.py +0 -0
  604. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_generated_rust_fixture.py +0 -0
  605. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_generated_types_fixture.py +0 -0
  606. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_github_ops.py +0 -0
  607. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_github_throttle.py +0 -0
  608. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_goal.py +0 -0
  609. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_graph_health.py +0 -0
  610. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_graph_selfheal_absent_2237.py +0 -0
  611. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_handoff.py +0 -0
  612. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_cli.py +0 -0
  613. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_cli_graph.py +0 -0
  614. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_config.py +0 -0
  615. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_context.py +0 -0
  616. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_coord_web_ci_pin.py +0 -0
  617. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_deploy_lane_facts.py +0 -0
  618. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_incident_regression.py +0 -0
  619. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_issues_sync_staleness.py +0 -0
  620. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_pypi.py +0 -0
  621. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_registry.py +0 -0
  622. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_release_cordon_probe.py +0 -0
  623. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_timer_active.py +0 -0
  624. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_toolchain.py +0 -0
  625. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_unit_drift.py +0 -0
  626. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_health_unit_enablement.py +0 -0
  627. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_hooks.py +0 -0
  628. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_human_attended_437.py +0 -0
  629. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_init.py +0 -0
  630. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_install_agent_venv_2911.py +0 -0
  631. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_integration.py +0 -0
  632. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_briefing_echo.py +0 -0
  633. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_pane_log_2541.py +0 -0
  634. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_prefill_state.py +0 -0
  635. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_session_relaunch.py +0 -0
  636. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_test_verdict_backstop.py +0 -0
  637. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_token_attribution.py +0 -0
  638. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_interactive_worktree.py +0 -0
  639. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_issue_store_seam.py +0 -0
  640. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_issues_sync_status.py +0 -0
  641. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_liveness_auditor.py +0 -0
  642. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_liveness_notify.py +0 -0
  643. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_lock_contention_ratchet.py +0 -0
  644. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_machine_onboard.py +0 -0
  645. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_machine_pause.py +0 -0
  646. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_merge_queue.py +0 -0
  647. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_merge_verify.py +0 -0
  648. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_milestone_chat.py +0 -0
  649. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_milestone_dispatch.py +0 -0
  650. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_milestone_gate.py +0 -0
  651. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_milestone_order.py +0 -0
  652. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_milestone_seam.py +0 -0
  653. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_mock_author.py +0 -0
  654. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_model_tiering.py +0 -0
  655. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_models.py +0 -0
  656. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_models_config_labels.py +0 -0
  657. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_needs_attention.py +0 -0
  658. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_network.py +0 -0
  659. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_new_issue_chat.py +0 -0
  660. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_next_release_tag.py +0 -0
  661. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_node_shim.py +0 -0
  662. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_baseline.py +0 -0
  663. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_cli.py +0 -0
  664. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_collect.py +0 -0
  665. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_config.py +0 -0
  666. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_drive_seam.py +0 -0
  667. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_isolation.py +0 -0
  668. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_predicate.py +0 -0
  669. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_quiet_hours.py +0 -0
  670. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notifier_service.py +0 -0
  671. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notify.py +0 -0
  672. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_notify_drain.py +0 -0
  673. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_openapi.py +0 -0
  674. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_operational_defaults.py +0 -0
  675. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_overlap_fence.py +0 -0
  676. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_overlap_predict.py +0 -0
  677. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_packaged_deploy_units.py +0 -0
  678. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_parentage.py +0 -0
  679. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_paste_landed.py +0 -0
  680. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  681. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_pipeline.py +0 -0
  682. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_plan_followup_approve_plan_command.py +0 -0
  683. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_plan_followup_pr_command.py +0 -0
  684. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_plan_followup_review_command.py +0 -0
  685. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_plan_only.py +0 -0
  686. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_plan_parser.py +0 -0
  687. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_platform_paths.py +0 -0
  688. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_portal_bridge.py +0 -0
  689. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_portal_config.py +0 -0
  690. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_portal_sync.py +0 -0
  691. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_pr_body_lint.py +0 -0
  692. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_prereqs.py +0 -0
  693. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_production_db_guard.py +0 -0
  694. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_progress.py +0 -0
  695. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_provider_seam.py +0 -0
  696. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_providers.py +0 -0
  697. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_providers_config_labels.py +0 -0
  698. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_providers_pty.py +0 -0
  699. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_quiet_hours.py +0 -0
  700. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_quiet_hours_store_2146.py +0 -0
  701. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reap_merged_sessions.py +0 -0
  702. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reap_stale_interactive_tick.py +0 -0
  703. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile.py +0 -0
  704. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_branch.py +0 -0
  705. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_completions.py +0 -0
  706. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  707. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_merges.py +0 -0
  708. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_no_agent_record.py +0 -0
  709. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_tick.py +0 -0
  710. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reconcile_usage_limit_done.py +0 -0
  711. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_refine_chat.py +0 -0
  712. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_cordon_2101.py +0 -0
  713. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  714. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_cordon_deadlock_2240.py +0 -0
  715. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_cordon_stuck_2490.py +0 -0
  716. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_propagate.py +0 -0
  717. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_propagate_threshold.py +0 -0
  718. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_roll_between_legs_2854.py +0 -0
  719. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_roll_window_handoff.py +0 -0
  720. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_unified_1242.py +0 -0
  721. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_verify.py +0 -0
  722. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_release_window.py +0 -0
  723. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_remote_auto_prune.py +0 -0
  724. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_remote_interactive_reaper.py +0 -0
  725. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_repo_add.py +0 -0
  726. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_repo_edit_2220.py +0 -0
  727. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_repo_graph_fleet_2237.py +0 -0
  728. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_repo_onboard_2220.py +0 -0
  729. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_report_result_push.py +0 -0
  730. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_reports.py +0 -0
  731. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_retry.py +0 -0
  732. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_retry_advisory_1606.py +0 -0
  733. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_retry_type_1636.py +0 -0
  734. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_revalidate.py +0 -0
  735. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review.py +0 -0
  736. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_end_review_without_verdict.py +0 -0
  737. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_parse_failure_diagnostic.py +0 -0
  738. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_reaffirm.py +0 -0
  739. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_state.py +0 -0
  740. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_verdict_backstop.py +0 -0
  741. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_verdict_override_audit.py +0 -0
  742. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_verdict_relay.py +0 -0
  743. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_review_zero_commits.py +0 -0
  744. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_scoped_review_wiring.py +0 -0
  745. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_scorecard.py +0 -0
  746. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_self_health.py +0 -0
  747. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_serve.py +0 -0
  748. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_serve_app_board_trim.py +0 -0
  749. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_serve_rest_routes.py +0 -0
  750. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_session.py +0 -0
  751. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_slice_issue_attribution.py +0 -0
  752. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_smoke.py +0 -0
  753. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_smoke_live_checkout_restore.py +0 -0
  754. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_smoke_workflow.py +0 -0
  755. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_spend_ceiling.py +0 -0
  756. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_spend_ceiling_coordinator.py +0 -0
  757. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_split.py +0 -0
  758. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_split_work.py +0 -0
  759. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_sql_dialect.py +0 -0
  760. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stage_projection.py +0 -0
  761. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stale_busy_reviewer_697.py +0 -0
  762. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stalled_pipeline.py +0 -0
  763. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_state.py +0 -0
  764. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_state_review_findings_daemon.py +0 -0
  765. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_status_fleet_footer.py +0 -0
  766. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stop_1567.py +0 -0
  767. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_store_contract.py +0 -0
  768. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_store_migrate.py +0 -0
  769. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stuck.py +0 -0
  770. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  771. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_terminal_command.py +0 -0
  772. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_author.py +0 -0
  773. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_chat.py +0 -0
  774. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_orchestrator.py +0 -0
  775. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_report.py +0 -0
  776. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_verdict_parsing.py +0 -0
  777. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_test_verdict_transcript_floor.py +0 -0
  778. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_text_io_encoding_audit.py +0 -0
  779. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_thin_client_board_audit.py +0 -0
  780. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_thin_client_config_load_1080.py +0 -0
  781. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_thin_client_daemon_routing_906.py +0 -0
  782. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_tmux_host.py +0 -0
  783. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_tmux_session.py +0 -0
  784. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_transcript_floor.py +0 -0
  785. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_usage.py +0 -0
  786. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_usage_limits.py +0 -0
  787. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_usage_rollup.py +0 -0
  788. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_venv_live_install_2121.py +0 -0
  789. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_version_single_source.py +0 -0
  790. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_watch.py +0 -0
  791. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  792. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worker_env_venv_isolation.py +0 -0
  793. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worker_events.py +0 -0
  794. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worker_image_pin_sync.py +0 -0
  795. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worker_safety.py +0 -0
  796. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worker_test_scoping.py +0 -0
  797. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worktree.py +0 -0
  798. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  799. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/test_write_parity.py +0 -0
  800. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tests/write_parity.py +0 -0
  801. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/.github/workflows/release-tui.yml +0 -0
  802. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/Cargo.lock +0 -0
  803. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/Cargo.toml +0 -0
  804. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/cargo-config-local-quadraui.toml.example +0 -0
  805. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/approved.rs +0 -0
  806. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/audit.rs +0 -0
  807. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/chat.rs +0 -0
  808. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/data.rs +0 -0
  809. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/dialogs.rs +0 -0
  810. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/doc_tabs.rs +0 -0
  811. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/drive.rs +0 -0
  812. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/drive_queue.rs +0 -0
  813. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/escalation.rs +0 -0
  814. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/events.rs +0 -0
  815. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/fixtures.rs +0 -0
  816. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/fleet_health.rs +0 -0
  817. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/fleet_sessions.rs +0 -0
  818. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/fleet_terminals.rs +0 -0
  819. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/format.rs +0 -0
  820. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/milestone_dag.rs +0 -0
  821. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/mod.rs +0 -0
  822. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/msv.rs +0 -0
  823. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/pipeline.rs +0 -0
  824. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/plans.rs +0 -0
  825. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/render.rs +0 -0
  826. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/reports.rs +0 -0
  827. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/sessions.rs +0 -0
  828. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/settings_ui.rs +0 -0
  829. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/sidebar.rs +0 -0
  830. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/terminal.rs +0 -0
  831. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/tests.rs +0 -0
  832. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/types/generated.rs +0 -0
  833. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/types.rs +0 -0
  834. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/app/workspace.rs +0 -0
  835. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/bin/gtk.rs +0 -0
  836. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/commands.rs +0 -0
  837. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/lib.rs +0 -0
  838. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/main.rs +0 -0
  839. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/src/settings.rs +0 -0
  840. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  841. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/contract.md +0 -0
  842. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  843. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  844. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  845. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  846. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  847. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/contract.md +0 -0
  848. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  849. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  850. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  851. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  852. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  853. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  854. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  855. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  856. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  857. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  858. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  859. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  860. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  861. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  862. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/contract.md +0 -0
  863. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  864. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  865. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  866. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  867. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  868. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  869. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  870. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  871. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  872. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  873. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  874. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  875. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  876. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  877. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/contract.md +0 -0
  878. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  879. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  880. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  881. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  882. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  883. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  884. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  885. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  886. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/acceptance.rs +0 -0
  887. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/cli.rs +0 -0
  888. {code_coordinator-0.5.288 → code_coordinator-0.5.290}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.288
3
+ Version: 0.5.290
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.288
3
+ Version: 0.5.290
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.288",
2
+ "tag": "0.5.290",
3
3
  "distance": 0,
4
- "node": "gc15b59071ef9a73aaca54a53587f2604b0d0fbe0",
4
+ "node": "gd9ef2036c79e6b93ba2c92ee4c1a1756d509370f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -4139,6 +4139,82 @@ and report back what you asked/proposed/filed/queued/linked (and any gap) \
4139
4139
  when done.\
4140
4140
  """
4141
4141
 
4142
+ # #2867: the ATTENDED posture. Appended to (never merged into)
4143
+ # DECOMPOSITION_CHAT_SYSTEM_PROMPT by `coord portal decompose-chat
4144
+ # --interactive` only — the headless dispatch
4145
+ # (`default_worker_command`'s `spec.type == "decomposition-chat"` branch)
4146
+ # must keep receiving the base prompt byte-for-byte, because it genuinely
4147
+ # has nobody to ask and its one-turn fire-and-forget shape is correct there.
4148
+ #
4149
+ # WHY this exists at all: #2750 shipped `--interactive` reusing the headless
4150
+ # prompt verbatim, so the attended session was written for an agent with
4151
+ # nobody to ask ("THIS iteration ends in EXACTLY ONE of three terminal
4152
+ # moves", each a command to run) and duly read the ledger, chose ASK, and
4153
+ # ran `enqueue-question` in the SAME turn — its whole output to the human
4154
+ # sitting there was a report of what it had already done. On a paid client
4155
+ # engagement where a round-trip takes days, that spent a day on questions
4156
+ # the operator may already have had answers to. The base prompt's
4157
+ # "summarize your plan before writing anything" was not enough: nothing
4158
+ # made it a STOP, and without a turn boundary a compliant session still
4159
+ # writes.
4160
+ DECOMPOSITION_CHAT_ATTENDED_ADDENDUM = """\
4161
+
4162
+ ── ATTENDED SESSION (`--interactive`) — OVERRIDES THE ABOVE ──
4163
+
4164
+ An operator is sitting at this terminal RIGHT NOW, watching you type. That \
4165
+ changes the shape of this iteration, and where this section conflicts with \
4166
+ anything above, THIS SECTION WINS.
4167
+
4168
+ **YOUR FIRST TURN WRITES NOTHING.** Not `coord portal enqueue-question`, not \
4169
+ `coord portal enqueue-status`, not `coord portal decision propose/reject/\
4170
+ supersede`, not `coord issue create`, not `coord milestone create`, not \
4171
+ `coord drive-queue add`, not `coord portal link`, not `coord issue edit`. \
4172
+ Read-only commands (`coord portal ledger`, `gh issue view`, reading files) \
4173
+ are fine and expected. The "EXACTLY ONE of three terminal moves" rule above \
4174
+ still decides WHICH exit this iteration takes — it just does not get to \
4175
+ happen until the operator has answered you.
4176
+
4177
+ So your first turn is:
4178
+
4179
+ 1. State your READ — the MODE line verbatim (as always), then what RUNNING \
4180
+ CONTEXT already tells you, explicitly including any operator-supplied \
4181
+ background recorded there.
4182
+ 2. State your PROPOSED EXIT — which of Ask / Propose / Decompose you intend, \
4183
+ the exact command(s) you would run (question text, decision text, issue \
4184
+ titles), and WHY that exit and not the other two.
4185
+ 3. State what you are ASSUMING or MISSING — above all, anything you were \
4186
+ about to ask the CLIENT that the OPERATOR may simply know. The operator may \
4187
+ have spoken to the client since the last iteration; a client round-trip \
4188
+ costs days and an operator answer costs one line, so ask the human in front \
4189
+ of you FIRST.
4190
+ 4. END YOUR TURN AND WAIT. Do not narrate a plan and then execute it in the \
4191
+ same turn — the turn boundary IS the confirmation.
4192
+
4193
+ Then act on what the operator says: carry out the exit as proposed, or the \
4194
+ revised one they steer you to. If they confirm with no changes, run the \
4195
+ commands exactly as you stated them and report back. If they redirect you \
4196
+ into a different exit, take that one — it is still exactly one terminal \
4197
+ move per iteration.
4198
+
4199
+ **Recording what the operator tells you.** Background the operator relays \
4200
+ ("I spoke to her — it's just the two of them, and the calendar is a \
4201
+ nice-to-have") is durable, ledger-class context that every FUTURE session on \
4202
+ every machine should see. It is not a decision, so do NOT push it through \
4203
+ `coord portal decision propose`. Record it verbatim with:
4204
+
4205
+ coord portal note <submission_id> "<what the operator told you>"
4206
+
4207
+ This is an ADDITIONAL write path you are permitted, on top of the ones the \
4208
+ Rules section above enumerates — and, being a write, it is also subject to \
4209
+ the first-turn rule: offer it, then record it once the operator agrees. \
4210
+ OFFER IT PROACTIVELY: the operator should not have to know this command \
4211
+ exists. Any time the operator gives you a substantive fact about the \
4212
+ client, the users, or the scope, say back what you would record and ask \
4213
+ whether to record it. Keep the wording theirs, not your paraphrase — the \
4214
+ ledger is verbatim by design, and the narrative (which is regenerable) is \
4215
+ where summarizing belongs.\
4216
+ """
4217
+
4142
4218
  # Deny list applied to decomposition-chat workers (#2533; extended #2750
4143
4219
  # IL-4 for the ask/propose/decompose intake loop). Unlike milestone-chat,
4144
4220
  # this type's WHOLE job is to write (issue create / issue edit / milestone
@@ -6879,11 +6955,19 @@ class AgentServer:
6879
6955
  reclaimed, which is how ``cargo-target/quadraui`` reached 38G against
6880
6956
  a 20 GiB cap and filled ``/home``.
6881
6957
 
6882
- Also passes the absolute free-disk floor (#2137 item 4), and parks
6883
- the sweep's verdict where the ``cargo_targets`` health check can read
6884
- it so ``cargo_over_cap`` reaches an operator instead of dead-ending
6885
- in this dict. Best-effort: any failure degrades to an empty dict
6886
- rather than aborting the worktree sweep that calls it.
6958
+ Also passes the absolute free-disk floor (#2137 item 4) and, since
6959
+ #2919, every local checkout's own ``target/`` dir
6960
+ (``checkout_target_dirs``) — without this the floor can only ever
6961
+ reclaim from the shared cache, which is precisely the 2026-08-28
6962
+ incident: a stale ``~/src/quadraui/target`` sat untouched two
6963
+ directories away while the sweep evicted the whole cache to
6964
+ compensate for bytes it structurally could not reach. Mirrors
6965
+ ``fix_cargo_targets``'s own ``_checkout_target_dirs`` in
6966
+ ``coord/health/checks/cargo_targets.py``. Also parks the sweep's
6967
+ verdict where the ``cargo_targets`` health check can read it so
6968
+ ``cargo_over_cap`` reaches an operator instead of dead-ending in this
6969
+ dict. Best-effort: any failure degrades to an empty dict rather than
6970
+ aborting the worktree sweep that calls it.
6887
6971
  """
6888
6972
  with self._lock:
6889
6973
  live_repos = {
@@ -6892,10 +6976,16 @@ class AgentServer:
6892
6976
  if a.status in (PENDING, RUNNING)
6893
6977
  }
6894
6978
  try:
6979
+ from coord.health.context import local_checkouts # noqa: PLC0415
6980
+
6981
+ checkout_target_dirs = [
6982
+ c.path / "target" for c in local_checkouts(self._health_config)
6983
+ ]
6895
6984
  result = cargo_cache.sweep(
6896
6985
  self.state_dir,
6897
6986
  protect_repos=live_repos,
6898
6987
  free_floor=cargo_cache.free_floor_bytes(),
6988
+ checkout_target_dirs=checkout_target_dirs,
6899
6989
  )
6900
6990
  except OSError as e: # pragma: no cover - defensive
6901
6991
  _log.warning("cargo cache GC failed: %s", e)
@@ -54,6 +54,26 @@ agent log, and a status file (:func:`write_gc_status`) the ``cargo_targets``
54
54
  health check renders — rather than returning quietly the way it did while 38G
55
55
  accumulated.
56
56
 
57
+ #2919: the free-space floor above can only ever reclaim from *this* cache,
58
+ but on a machine where a per-checkout ``target/`` dominates the disk (a human
59
+ building directly in ``~/src/<repo>``, invisible to everything above), the
60
+ cache is not what filled the disk and evicting it whole does not fix that —
61
+ it just forces a fleet-wide cold rebuild that buys back, at best, an hour.
62
+ Two changes:
63
+
64
+ * :func:`sweep` accepts *checkout_target_dirs* — an optional list of
65
+ per-checkout ``target/`` paths outside the cache root entirely. When the
66
+ free-space floor is breached, these are reclaimed *first* (stale + idle
67
+ ones only, same :func:`build_active` gate), because a dir nothing has
68
+ touched in weeks and nothing is compiling against costs nothing to lose —
69
+ unlike any tier of the shared cache, which something reuses this hour.
70
+ * If even zeroing the *entire* cache could not close the remaining shortfall
71
+ (``cargo_floor_unreachable``), tier-3 whole-cache eviction is skipped: it
72
+ cannot satisfy the floor either way, so spending it anyway would only buy a
73
+ fleet-wide rebuild for nothing. The cheap tiers (1-2) still run. Either
74
+ way the verdict — reason, and the biggest non-cache dirs it saw — lands in
75
+ ``cargo_over_cap_reason`` the same as an ordinary cap breach.
76
+
57
77
  Set ``COORD_SHARED_CARGO_TARGET=0`` to disable the whole feature; an operator
58
78
  who exports their own ``CARGO_TARGET_DIR`` also wins (we never override it).
59
79
  """
@@ -88,7 +108,18 @@ DEFAULT_CACHE_CAP_GB = 20.0
88
108
  # cap can never see because the per-checkout ``target/`` dirs (17G + 13G + 11G
89
109
  # on the machine that filled) are outside it. When free space is under this
90
110
  # floor the sweep reclaims the shortfall from the cache even if the cache is
91
- # under its cap — the cache is the cheapest thing on the disk to give up.
111
+ # under its cap — the cache is the cheapest thing on the disk *this module
112
+ # has authority over* to give up.
113
+ #
114
+ # #2919: that framing turned out to be incomplete — a single repo's cache
115
+ # routinely returns to 14-18G within the hour, well above this floor, so
116
+ # evicting it whole buys almost nothing when a stale per-checkout ``target/``
117
+ # dominates the disk instead. Rather than raise this number (there is no
118
+ # value that is both "below one repo's steady state" and "big enough to
119
+ # matter"), the floor path below now reaches the *actually* cheap thing
120
+ # first (a stale, idle per-checkout ``target/``, see ``checkout_target_dirs``
121
+ # on :func:`sweep`) and refuses to spend the cache on a shortfall it cannot
122
+ # close either way. The default stays put until that's shown insufficient.
92
123
  DEFAULT_FREE_FLOOR_GB = 10.0
93
124
 
94
125
  # A profile dir untouched for this long is "stale": its artifacts predate the
@@ -96,9 +127,15 @@ DEFAULT_FREE_FLOOR_GB = 10.0
96
127
  # the bytes once we're over the cap.
97
128
  DEFAULT_STALE_DAYS = 7.0
98
129
 
130
+ # #2919: a *per-checkout* ``target/`` may be a human's working tree they
131
+ # intend to return to, not just a rebuild-speed cache — so the bar for
132
+ # reclaiming one defaults well above a shared-cache profile dir's.
133
+ DEFAULT_CHECKOUT_STALE_DAYS = 30.0
134
+
99
135
  CAP_ENV = "COORD_CARGO_CACHE_CAP_GB"
100
136
  FREE_FLOOR_ENV = "COORD_CARGO_FREE_FLOOR_GB"
101
137
  STALE_DAYS_ENV = "COORD_CARGO_STALE_DAYS"
138
+ CHECKOUT_STALE_DAYS_ENV = "COORD_CARGO_CHECKOUT_STALE_DAYS"
102
139
  ENABLE_ENV = "COORD_SHARED_CARGO_TARGET"
103
140
  CARGO_ENV = "CARGO_TARGET_DIR"
104
141
 
@@ -228,6 +265,22 @@ def stale_secs(env: dict[str, str] | None = None) -> float | None:
228
265
  return days * 86400.0
229
266
 
230
267
 
268
+ def checkout_stale_secs(env: dict[str, str] | None = None) -> float | None:
269
+ """Age at which a per-checkout ``target/`` dir counts as stale enough to
270
+ reclaim (#2919), or ``None`` when disabled.
271
+
272
+ Deliberately separate from :func:`stale_secs`: a *shared-cache* profile
273
+ dir (tier 2) is cheap to lose — cargo rebuilds just that one profile —
274
+ where a per-checkout ``target/`` may belong to a working tree a human
275
+ intends to return to, so the default bar is much higher (see
276
+ :data:`DEFAULT_CHECKOUT_STALE_DAYS`).
277
+ """
278
+ days = _float_env(env, CHECKOUT_STALE_DAYS_ENV, DEFAULT_CHECKOUT_STALE_DAYS)
279
+ if days <= 0:
280
+ return None
281
+ return days * 86400.0
282
+
283
+
231
284
  def dir_size(path: Path) -> int:
232
285
  """Total size of the regular files under *path* (symlinks not followed)."""
233
286
  total = 0
@@ -280,6 +333,19 @@ def _last_used(path: Path) -> float:
280
333
  return newest
281
334
 
282
335
 
336
+ def target_dir_age_secs(path: Path, now: float) -> float:
337
+ """Seconds since *path* — any cargo target dir, shared cache or
338
+ per-checkout — was last built into (#2919).
339
+
340
+ Exposes the same cheap "newest mtime, shallow-sampled" heuristic
341
+ :func:`sweep`'s own tiers use internally (:func:`_last_used`), so a
342
+ surface with no business reaching into this module's guts — the
343
+ ``cargo_targets`` health check reporting how stale a per-checkout
344
+ ``target/`` is — doesn't have to re-derive it.
345
+ """
346
+ return max(0.0, now - _last_used(path))
347
+
348
+
283
349
  # ── #2137: intra-repo pruning ───────────────────────────────────────────────
284
350
 
285
351
 
@@ -495,6 +561,110 @@ def build_active(repo_dir: Path) -> bool:
495
561
  return True
496
562
 
497
563
 
564
+ # ── #2919: per-checkout ``target/`` dirs, outside the cache root ───────────
565
+
566
+
567
+ def stale_checkout_targets(
568
+ dirs: "list[Path] | tuple[Path, ...]", older_than_secs: float | None, now: float
569
+ ) -> list[Path]:
570
+ """Per-checkout ``target/`` dirs idle longer than *older_than_secs*.
571
+
572
+ Unlike everything else in this module, these live outside
573
+ :func:`cache_root` entirely — a human's own checkout, not a per-machine
574
+ cache keyed on repo name — so the caller supplies the candidate paths
575
+ rather than this walking a known root. Purely a filter: it does not
576
+ check :func:`build_active`, so a caller that intends to delete anything
577
+ returned here still has to gate each one itself (:func:`sweep` does).
578
+ """
579
+ if not older_than_secs or older_than_secs <= 0:
580
+ return []
581
+ out: list[Path] = []
582
+ for d in dirs:
583
+ try:
584
+ if d.is_symlink() or not d.is_dir():
585
+ continue
586
+ except OSError:
587
+ continue
588
+ if (now - _last_used(d)) >= older_than_secs:
589
+ out.append(d)
590
+ return out
591
+
592
+
593
+ def _reclaim_checkout_targets(
594
+ dirs: "list[Path] | tuple[Path, ...]",
595
+ *,
596
+ stale_after_secs: float | None,
597
+ now: float,
598
+ needed_bytes: int,
599
+ dry_run: bool,
600
+ result: dict,
601
+ ) -> int:
602
+ """#2919: reclaim stale, idle per-checkout ``target/`` dirs for the
603
+ free-space floor, stopping as soon as *needed_bytes* is covered.
604
+
605
+ Real bytes on the same filesystem the floor cares about, entirely
606
+ outside the cache :func:`sweep` otherwise governs — and the cheapest
607
+ thing on the disk to give back, because nothing has touched it in a
608
+ long time and (:func:`build_active`) nothing is compiling against it
609
+ right now. Populates ``result["cargo_checkout_*"]`` and returns bytes
610
+ freed (or, for a dry run, bytes that *would* be freed).
611
+ """
612
+ # The staleness predicate is `stale_checkout_targets` — computed once,
613
+ # up front, rather than re-derived inline here, so there is exactly one
614
+ # answer to "is this checkout target stale enough to reclaim" instead of
615
+ # two implementations that only agree because they were written together.
616
+ stale_dirs = set(stale_checkout_targets(dirs, stale_after_secs, now))
617
+
618
+ scanned: list[dict] = []
619
+ candidates: list[tuple[float, Path, int]] = []
620
+ for d in dirs:
621
+ try:
622
+ if d.is_symlink() or not d.is_dir():
623
+ continue
624
+ except OSError:
625
+ continue
626
+ last_used = _last_used(d)
627
+ age = max(0.0, now - last_used)
628
+ size = dir_size(d)
629
+ stale = d in stale_dirs
630
+ scanned.append(
631
+ {
632
+ "path": str(d),
633
+ "bytes": size,
634
+ "last_used": last_used,
635
+ "age_secs": age,
636
+ "stale": stale,
637
+ }
638
+ )
639
+ if stale:
640
+ candidates.append((last_used, d, size))
641
+ result["cargo_checkout_scanned"] = scanned
642
+
643
+ candidates.sort(key=lambda c: (c[0], str(c[1])))
644
+ freed = 0
645
+ blocked: list[str] = []
646
+ pruned: list[dict] = []
647
+ for _last_used_at, d, size in candidates:
648
+ if freed >= needed_bytes:
649
+ break
650
+ if build_active(d):
651
+ blocked.append(str(d))
652
+ continue
653
+ if size <= 0:
654
+ continue
655
+ if not dry_run:
656
+ try:
657
+ shutil.rmtree(d)
658
+ except OSError:
659
+ continue
660
+ freed += size
661
+ pruned.append({"path": str(d), "bytes": size})
662
+ result["cargo_checkout_pruned"] = pruned
663
+ result["cargo_checkout_pruned_bytes"] = freed
664
+ result["cargo_checkout_prune_blocked"] = blocked
665
+ return freed
666
+
667
+
498
668
  # ── #2137: the GC's verdict, for operator surfaces ──────────────────────────
499
669
 
500
670
 
@@ -544,6 +714,8 @@ def sweep(
544
714
  dry_run: bool = False,
545
715
  free_floor: int | None = None,
546
716
  stale_after_secs: float | None = -1.0,
717
+ checkout_target_dirs: "list[Path] | tuple[Path, ...] | None" = None,
718
+ checkout_stale_after_secs: float | None = -1.0,
547
719
  now: float | None = None,
548
720
  ) -> dict:
549
721
  """Reclaim cache space until the total is under the cap.
@@ -577,6 +749,19 @@ def sweep(
577
749
  *stale_after_secs* defaults to the sentinel ``-1`` meaning "read it from
578
750
  the environment" (:func:`stale_secs`); ``None`` disables tier 2.
579
751
 
752
+ *checkout_target_dirs* (#2919, default ``None``) names per-checkout
753
+ ``target/`` paths on this machine, outside the cache root — the thing the
754
+ free-space floor could never previously reach. When the floor is
755
+ breached, stale + idle ones (:func:`stale_checkout_targets`,
756
+ :func:`build_active`) are reclaimed *before* the cache's own limit is
757
+ tightened, because losing one costs nothing: nothing has touched it in a
758
+ long time and nothing is building against it right now. If even the
759
+ entire cache could not have closed the remaining shortfall on its own,
760
+ ``cargo_floor_unreachable`` is set and tier-3 whole-cache eviction is
761
+ skipped — it would not satisfy the floor either way, so there is no
762
+ reason to spend it. *checkout_stale_after_secs* is the analogous sentinel
763
+ for :func:`checkout_stale_secs`.
764
+
580
765
  Returns ``{"cargo_cache_bytes": B, "cargo_caches_evicted": N,
581
766
  "cargo_evicted_repos": [...], "cargo_cap_bytes": C|None,
582
767
  "cargo_over_cap": bool, "cargo_dry_run": bool}`` plus, since #2137,
@@ -585,8 +770,16 @@ def sweep(
585
770
  (repos left untouched because a build is live), ``cargo_over_cap_reason``,
586
771
  ``cargo_limit_bytes`` (what the sweep actually aimed at — the cap, or
587
772
  tighter when the floor bites), ``cargo_disk_free_bytes``,
588
- ``cargo_disk_floor_bytes`` and ``cargo_disk_low``. ``cargo_cache_bytes`` is the total *after* the sweep
589
- (or, for ``dry_run``, what it would be).
773
+ ``cargo_disk_floor_bytes`` and ``cargo_disk_low``. ``cargo_disk_low`` can
774
+ flip back to ``False`` mid-function (#2919): it is set ``True`` as soon as
775
+ the floor is breached, then reset if reclaiming stale checkout
776
+ ``target/`` dirs alone closes the shortfall, so the cache tiers below
777
+ never had to give anything back. ``cargo_cache_bytes`` is the total
778
+ *after* the sweep (or, for ``dry_run``, what it would be). Since #2919, also
779
+ ``cargo_checkout_scanned`` (every candidate seen, with size/age/staleness),
780
+ ``cargo_checkout_pruned``, ``cargo_checkout_pruned_bytes``,
781
+ ``cargo_checkout_prune_blocked`` (a live build) and
782
+ ``cargo_floor_unreachable``.
590
783
  """
591
784
  limit = cap_bytes() if cap == -1 else cap
592
785
  stale_cutoff = stale_secs() if stale_after_secs == -1.0 else stale_after_secs
@@ -612,6 +805,12 @@ def sweep(
612
805
  "cargo_disk_free_bytes": None,
613
806
  "cargo_disk_floor_bytes": free_floor,
614
807
  "cargo_disk_low": False,
808
+ # #2919.
809
+ "cargo_checkout_scanned": [],
810
+ "cargo_checkout_pruned": [],
811
+ "cargo_checkout_pruned_bytes": 0,
812
+ "cargo_checkout_prune_blocked": [],
813
+ "cargo_floor_unreachable": False,
615
814
  }
616
815
 
617
816
  root = cache_root(state_dir)
@@ -637,7 +836,7 @@ def sweep(
637
836
  # #2137 item 4: the failure that actually bit was "0 bytes free", not
638
837
  # "cache over cap". A floor on absolute free space tightens the limit so
639
838
  # the cache gives back the shortfall — it is the cheapest thing on the
640
- # filesystem to lose, and the only thing here we have authority over.
839
+ # filesystem *this module has authority over* to lose.
641
840
  if free_floor:
642
841
  try:
643
842
  usage = shutil.disk_usage(str(root))
@@ -648,11 +847,48 @@ def sweep(
648
847
  shortfall = free_floor - usage.free
649
848
  if shortfall > 0:
650
849
  result["cargo_disk_low"] = True
651
- disk_limit = max(0, total - shortfall)
652
- limit = disk_limit if limit is None else min(limit, disk_limit)
653
- result["cargo_limit_bytes"] = limit
654
850
 
655
- if limit is None or total <= limit:
851
+ # #2919: reclaim stale, idle per-checkout target/ dirs
852
+ # first — real bytes on this same filesystem, entirely
853
+ # outside the cache, and cheaper to lose than anything in
854
+ # it: nothing has touched them in a long time and nothing
855
+ # is building against them right now.
856
+ if checkout_target_dirs:
857
+ checkout_cutoff = (
858
+ checkout_stale_secs()
859
+ if checkout_stale_after_secs == -1.0
860
+ else checkout_stale_after_secs
861
+ )
862
+ shortfall -= _reclaim_checkout_targets(
863
+ checkout_target_dirs,
864
+ stale_after_secs=checkout_cutoff,
865
+ now=clock,
866
+ needed_bytes=shortfall,
867
+ dry_run=dry_run,
868
+ result=result,
869
+ )
870
+
871
+ if shortfall <= 0:
872
+ # The non-cache tier closed the gap on its own — the
873
+ # cache is not touched at all.
874
+ result["cargo_disk_low"] = False
875
+ else:
876
+ if shortfall >= total:
877
+ # #2919: even zeroing the ENTIRE cache would not
878
+ # close this gap. Escalating to tier-3 eviction
879
+ # below would buy a fleet-wide cold rebuild for
880
+ # nothing, so it is skipped and the sweep says why.
881
+ result["cargo_floor_unreachable"] = True
882
+ disk_limit = max(0, total - shortfall)
883
+ limit = disk_limit if limit is None else min(limit, disk_limit)
884
+ result["cargo_limit_bytes"] = limit
885
+
886
+ if limit is None:
887
+ # GC disabled entirely. Note this cannot skip the floor-unreachable
888
+ # reason/log below: `limit` only stays `None` here when the free-disk
889
+ # floor never set `disk_limit` in the first place (see the
890
+ # `if free_floor:` block above), which means `cargo_floor_unreachable`
891
+ # is `False` too — there is nothing for this early return to lose.
656
892
  return result
657
893
 
658
894
  # Oldest-used first; ties broken by name so the sweep is deterministic.
@@ -660,6 +896,7 @@ def sweep(
660
896
  remaining = {name: size for _m, name, _p, size in entries}
661
897
  pruned: list[dict] = []
662
898
  blocked: list[str] = []
899
+ evicted: list[str] = []
663
900
  # A repo's build-activity verdict is probed at most once per sweep: the
664
901
  # /proc scan is not free and the answer cannot usefully change mid-sweep.
665
902
  idle: dict[str, bool] = {}
@@ -697,49 +934,64 @@ def sweep(
697
934
  )
698
935
  return size
699
936
 
700
- # Tier 1 then tier 2, each across every repo before the next escalates —
701
- # "cheapest to recreate first" is a property of the whole cache, not of one
702
- # repo, so an incremental dir on a hot repo goes before a stale profile dir
703
- # on a cold one.
704
- for tier in ("incremental", "stale"):
705
- for _mtime, name, path, _size in entries:
937
+ # Everything below is the reclaim work itself, skipped outright when the
938
+ # cache is already at/under the limit (including the common post-#2919
939
+ # case of a prior sweep having already drained it to 0) — but the
940
+ # aggregation and floor-unreachable/over-cap reporting after it always
941
+ # runs, even then: `cargo_floor_unreachable` can be `True` with nothing
942
+ # left here to reclaim, and that verdict must still reach
943
+ # `cargo_over_cap_reason` and the log rather than being lost to an early
944
+ # return, which was the bug (#2919 review).
945
+ if total > limit:
946
+ # Tier 1 then tier 2, each across every repo before the next
947
+ # escalates — "cheapest to recreate first" is a property of the whole
948
+ # cache, not of one repo, so an incremental dir on a hot repo goes
949
+ # before a stale profile dir on a cold one.
950
+ for tier in ("incremental", "stale"):
951
+ for _mtime, name, path, _size in entries:
952
+ if total <= limit:
953
+ break
954
+ if not _may_touch(name, path):
955
+ continue
956
+ if tier == "incremental":
957
+ subtrees = incremental_dirs(path)
958
+ elif stale_cutoff is None:
959
+ subtrees = []
960
+ else:
961
+ subtrees = stale_profile_dirs(path, stale_cutoff, clock)
962
+ for subtree in subtrees:
963
+ if total <= limit:
964
+ break
965
+ total -= _reclaim(name, subtree, tier)
706
966
  if total <= limit:
707
967
  break
708
- if not _may_touch(name, path):
709
- continue
710
- if tier == "incremental":
711
- subtrees = incremental_dirs(path)
712
- elif stale_cutoff is None:
713
- subtrees = []
714
- else:
715
- subtrees = stale_profile_dirs(path, stale_cutoff, clock)
716
- for subtree in subtrees:
968
+
969
+ # Tier 3: whole-directory eviction, as since #1402 — the last resort,
970
+ # and never against a repo with a live assignment. The
971
+ # build-activity gate applies here too: refusing to prune a busy tree
972
+ # and then rmtree-ing the whole thing two lines later would be the
973
+ # worse of both behaviours.
974
+ #
975
+ # #2919: skipped entirely when the free-space floor is unreachable
976
+ # from the cache alone — spending the whole cache would not close
977
+ # that gap either, so there is nothing to buy by evicting it, only a
978
+ # fleet-wide cold rebuild to pay for.
979
+ if not result["cargo_floor_unreachable"]:
980
+ for _mtime, name, path, _size in entries:
717
981
  if total <= limit:
718
982
  break
719
- total -= _reclaim(name, subtree, tier)
720
- if total <= limit:
721
- break
722
-
723
- # Tier 3: whole-directory eviction, as since #1402 — the last resort, and
724
- # never against a repo with a live assignment. The build-activity gate
725
- # applies here too: refusing to prune a busy tree and then rmtree-ing the
726
- # whole thing two lines later would be the worse of both behaviours.
727
- evicted: list[str] = []
728
- for _mtime, name, path, _size in entries:
729
- if total <= limit:
730
- break
731
- if name in protected:
732
- continue
733
- if not _may_touch(name, path):
734
- continue
735
- if not dry_run:
736
- try:
737
- shutil.rmtree(path)
738
- except OSError:
739
- continue
740
- total -= remaining[name]
741
- remaining[name] = 0
742
- evicted.append(name)
983
+ if name in protected:
984
+ continue
985
+ if not _may_touch(name, path):
986
+ continue
987
+ if not dry_run:
988
+ try:
989
+ shutil.rmtree(path)
990
+ except OSError:
991
+ continue
992
+ total -= remaining[name]
993
+ remaining[name] = 0
994
+ evicted.append(name)
743
995
 
744
996
  pruned_bytes = sum(int(p["bytes"]) for p in pruned)
745
997
  result["cargo_cache_bytes"] = total
@@ -751,7 +1003,21 @@ def sweep(
751
1003
  result["cargo_prune_blocked"] = blocked
752
1004
  result["cargo_over_cap"] = total > limit
753
1005
 
754
- if result["cargo_over_cap"]:
1006
+ if result["cargo_floor_unreachable"]:
1007
+ # Independent of `cargo_over_cap` below: this is true — and worth
1008
+ # saying — even if tiers 1-2 happened to drain the cache to 0 and
1009
+ # `cargo_over_cap` ends up False.
1010
+ reason = _over_cap_reason(
1011
+ total,
1012
+ limit,
1013
+ floor_unreachable=True,
1014
+ top_consumers=result.get("cargo_checkout_scanned"),
1015
+ )
1016
+ result["cargo_over_cap_reason"] = reason
1017
+ _log.warning(
1018
+ "cargo free-space floor unreachable from the cache alone: %s", reason
1019
+ )
1020
+ elif result["cargo_over_cap"]:
755
1021
  reason = _over_cap_reason(total, limit, protected, blocked, remaining)
756
1022
  result["cargo_over_cap_reason"] = reason
757
1023
  # Escalate rather than return quietly (#2137): this is the exact state
@@ -763,12 +1029,35 @@ def sweep(
763
1029
  def _over_cap_reason(
764
1030
  total: int,
765
1031
  limit: int,
766
- protected: "set[str]",
767
- blocked: "list[str]",
768
- remaining: dict[str, int],
1032
+ protected: "set[str] | None" = None,
1033
+ blocked: "list[str] | None" = None,
1034
+ remaining: "dict[str, int] | None" = None,
1035
+ *,
1036
+ floor_unreachable: bool = False,
1037
+ top_consumers: "list[dict] | None" = None,
769
1038
  ) -> str:
770
1039
  """One line an operator can act on: how far over, and what stopped us."""
1040
+ if floor_unreachable:
1041
+ ranked = sorted(
1042
+ (c for c in (top_consumers or []) if c.get("bytes")),
1043
+ key=lambda c: -int(c["bytes"]),
1044
+ )[:3]
1045
+ names = ", ".join(
1046
+ f"{c['path']} {_human(int(c['bytes']))} ({c['age_secs'] / 86400:.0f}d idle)"
1047
+ for c in ranked
1048
+ )
1049
+ detail = f"top non-cache consumers: {names}" if names else (
1050
+ "no non-cache target dirs were passed in to check"
1051
+ )
1052
+ return (
1053
+ f"{_human(total)} cache cannot cover the free-space shortfall on its "
1054
+ f"own — evicting it would not resolve this, so it was left alone; "
1055
+ f"{detail}"
1056
+ )
771
1057
  over = _human(total - limit)
1058
+ blocked = blocked or []
1059
+ protected = protected or set()
1060
+ remaining = remaining or {}
772
1061
  if blocked:
773
1062
  why = f"live build in {', '.join(sorted(blocked))}"
774
1063
  elif protected: