code-coordinator 0.5.220__tar.gz → 0.5.222__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 (809) hide show
  1. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agent.py +77 -0
  5. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/drive_queue.py +14 -7
  6. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/drive_queue.py +83 -20
  7. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/merge_queue.py +35 -0
  8. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/test_author.py +30 -0
  9. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent.py +93 -0
  10. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_drive_queue.py +48 -0
  11. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_drive.py +37 -17
  12. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_drive_queue.py +90 -0
  13. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_author.py +68 -0
  14. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/.gitignore +0 -0
  29. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/GOAL.md +0 -0
  31. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/LICENSE +0 -0
  32. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/README.md +0 -0
  34. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/approved_work.py +0 -0
  50. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/client.py +0 -0
  67. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/release.py +0 -0
  86. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/repo.py +0 -0
  87. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/report.py +0 -0
  88. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/review.py +0 -0
  89. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/scorecard.py +0 -0
  90. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/sessions.py +0 -0
  91. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/setup.py +0 -0
  92. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/status.py +0 -0
  93. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/config.py +0 -0
  98. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/db.py +0 -0
  108. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dead_end.py +0 -0
  109. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-notify.service +0 -0
  117. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-notify.timer +0 -0
  118. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.service +0 -0
  119. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.timer +0 -0
  120. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.service +0 -0
  121. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.timer +0 -0
  122. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-serve.service +0 -0
  123. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.service +0 -0
  124. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.timer +0 -0
  125. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy/coord-web.service +0 -0
  126. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy_manifest.py +0 -0
  127. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deploy_units.py +0 -0
  128. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/deps.py +0 -0
  129. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/diagnose.py +0 -0
  130. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dispatch.py +0 -0
  131. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/dist_name.py +0 -0
  132. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/drive.py +0 -0
  133. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/drive_state.py +0 -0
  134. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/events.py +0 -0
  135. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/failure_class.py +0 -0
  136. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/filelock.py +0 -0
  137. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/fleet_config_health.py +0 -0
  138. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/forge_availability.py +0 -0
  139. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/freshness.py +0 -0
  140. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/gate_a.py +0 -0
  141. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/gate_b.py +0 -0
  142. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/gate_snapshot.py +0 -0
  143. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/gates.py +0 -0
  144. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/github_ops.py +0 -0
  145. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/goal.py +0 -0
  146. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/graph_health.py +0 -0
  147. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/__init__.py +0 -0
  148. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/aggregate.py +0 -0
  149. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/__init__.py +0 -0
  150. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/agent_install.py +0 -0
  151. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/cargo_targets.py +0 -0
  152. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/claude_binary.py +0 -0
  153. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/coord_web_ci_pin.py +0 -0
  154. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/deploy_lane_facts.py +0 -0
  155. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/disk.py +0 -0
  156. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/fleet_board.py +0 -0
  157. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  158. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/fleet_phantom.py +0 -0
  159. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/fleet_unit_drift.py +0 -0
  160. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/graph.py +0 -0
  161. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/graphify_cli.py +0 -0
  162. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/index_lock.py +0 -0
  163. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/plan_usage.py +0 -0
  164. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/repo_state.py +0 -0
  165. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/spawned_coord.py +0 -0
  166. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/timer_active.py +0 -0
  167. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/toolchain.py +0 -0
  168. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/unit_drift.py +0 -0
  169. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/unit_enablement.py +0 -0
  170. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/checks/worktrees.py +0 -0
  171. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/cli.py +0 -0
  172. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/context.py +0 -0
  173. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/fleet_snapshot.py +0 -0
  174. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/models.py +0 -0
  175. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/pypi.py +0 -0
  176. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/registry.py +0 -0
  177. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/render.py +0 -0
  178. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/health/units.py +0 -0
  179. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/hooks.py +0 -0
  180. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/housekeeping.py +0 -0
  181. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/interactive.py +0 -0
  182. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/issue_store.py +0 -0
  183. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/liveness_auditor.py +0 -0
  184. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/machine_pause.py +0 -0
  185. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/milestone_chat.py +0 -0
  186. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/milestone_dispatch.py +0 -0
  187. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/milestone_gate.py +0 -0
  188. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/milestone_order.py +0 -0
  189. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/mock_author.py +0 -0
  190. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/models.py +0 -0
  191. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/network.py +0 -0
  192. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/notify.py +0 -0
  204. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/openapi.py +0 -0
  205. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/overlap_fence.py +0 -0
  206. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/overlap_predict.py +0 -0
  207. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/parentage.py +0 -0
  208. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/parentage_github.py +0 -0
  209. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/pipeline.py +0 -0
  210. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/plan_parser.py +0 -0
  211. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/plans.py +0 -0
  212. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/platform_paths.py +0 -0
  213. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/portal_bridge.py +0 -0
  214. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/portal_store.py +0 -0
  215. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/portal_sync.py +0 -0
  216. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/pr_body_lint.py +0 -0
  217. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/prereqs.py +0 -0
  218. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/progress.py +0 -0
  219. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/providers/__init__.py +0 -0
  220. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/providers/base.py +0 -0
  221. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/providers/claude.py +0 -0
  222. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/providers/claude_pty.py +0 -0
  223. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/providers/opencode.py +0 -0
  224. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/queue_diagnose.py +0 -0
  225. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/reconcile.py +0 -0
  226. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/reconcile_tick.py +0 -0
  227. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/refine_chat.py +0 -0
  228. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/release_cordon.py +0 -0
  229. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/release_propagate.py +0 -0
  230. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/release_verify.py +0 -0
  231. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/release_window.py +0 -0
  232. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/repo_edit.py +0 -0
  233. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/repo_onboard.py +0 -0
  234. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/reports.py +0 -0
  235. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/revalidate.py +0 -0
  236. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/review.py +0 -0
  237. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/scorecard.py +0 -0
  238. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/self_health.py +0 -0
  239. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/serve_app.py +0 -0
  240. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  241. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  242. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  243. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  245. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/portal-followup/SKILL.md +0 -0
  246. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  247. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  248. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/skills/update-issue/SKILL.md +0 -0
  249. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/smoke.py +0 -0
  250. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/spend_ceiling.py +0 -0
  251. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/split_work.py +0 -0
  252. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/stage_projection.py +0 -0
  253. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/state.py +0 -0
  254. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/test_chat.py +0 -0
  255. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/test_orchestrator.py +0 -0
  256. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/test_report.py +0 -0
  257. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/tui_release.py +0 -0
  258. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/usage.py +0 -0
  259. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/usage_limits.py +0 -0
  260. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/usage_rollup.py +0 -0
  261. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coord/worker_events.py +0 -0
  262. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/coordinator.example.yml +0 -0
  263. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-agent.service +0 -0
  264. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-db-backup.service +0 -0
  265. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-db-backup.sh +0 -0
  266. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-db-backup.timer +0 -0
  267. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-drive-queue.service +0 -0
  268. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-drive-queue.timer +0 -0
  269. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-notify.service +0 -0
  270. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-notify.timer +0 -0
  271. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-release-propagate.service +0 -0
  272. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-release-propagate.timer +0 -0
  273. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-release-window.service +0 -0
  274. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-release-window.timer +0 -0
  275. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-serve.service +0 -0
  276. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.service +0 -0
  277. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.sh +0 -0
  278. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.timer +0 -0
  279. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-web-rollback.sh +0 -0
  280. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/coord-web.service +0 -0
  281. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/deploy/node-shim.sh +0 -0
  282. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  283. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_CI.md +0 -0
  284. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_DIST.md +0 -0
  285. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/AGENT_OPERATIONS.md +0 -0
  286. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ARCHITECTURE.md +0 -0
  287. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ARCH_SECURITY_GATES.md +0 -0
  288. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/COCKPIT.md +0 -0
  289. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/CONTROL_CENTER.md +0 -0
  290. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/COST_DISCIPLINE.md +0 -0
  291. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/CROSS_PLATFORM.md +0 -0
  292. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/CUSTOMER_PORTAL.md +0 -0
  293. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/DRIVE_QUEUE.md +0 -0
  294. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/EPHEMERAL_WORKERS.md +0 -0
  295. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/FORGE_MIGRATION.md +0 -0
  296. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/GRAPHIFY_SETUP.md +0 -0
  297. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ISSUE_GUIDANCE.md +0 -0
  298. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/MAC_MINI.md +0 -0
  299. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  300. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/NOTIFIER.md +0 -0
  301. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/OPENCODE_VERIFICATION.md +0 -0
  302. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/OPERATING_GOTCHAS.md +0 -0
  303. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/ORACLE_LOOP.md +0 -0
  304. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/PHONE_WEBAPP.md +0 -0
  305. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/PIPELINE_V2.md +0 -0
  306. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/PLATFORM_EVOLUTION.md +0 -0
  307. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/SECOND_BACKEND.md +0 -0
  308. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/STORE_SERVICE.md +0 -0
  309. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  310. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/WEB_CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/WSL_WINDOWS_WORKER.md +0 -0
  312. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/mocks/web/README.md +0 -0
  313. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/mocks/web/_tokens.css +0 -0
  314. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/mocks/web/issue-detail.html +0 -0
  315. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-narrow.html +0 -0
  316. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-wide.html +0 -0
  317. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/graphify-out/.gitignore +0 -0
  318. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/install-agent.sh +0 -0
  319. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/pyproject.toml +0 -0
  320. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/audit_review_verdict_overrides.py +0 -0
  321. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  322. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/build-worker-image.sh +0 -0
  323. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/coordinator-machine.py +0 -0
  324. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/epic-down.sh +0 -0
  325. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/epic-up.sh +0 -0
  326. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/preflight.sh +0 -0
  327. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/provision-worker.sh +0 -0
  328. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  329. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  330. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/azure-workers/verify-github-token.sh +0 -0
  331. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/check_gh_argv_containment.py +0 -0
  332. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/codegen.py +0 -0
  333. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/coord-test-runner.sh +0 -0
  334. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/drive-batch.sh +0 -0
  335. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/gen_board_fixture.py +0 -0
  336. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/gen_mock_index.py +0 -0
  337. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/next_release_tag.py +0 -0
  338. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/run_tests_in_populated_home.sh +0 -0
  339. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/run_tests_without_gh.sh +0 -0
  340. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/smoke_437_interactive.py +0 -0
  341. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/verify_878_review_capture.py +0 -0
  342. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/verify_release_published.py +0 -0
  343. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/scripts/verify_release_wheel.py +0 -0
  344. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/setup.cfg +0 -0
  345. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/SMOKE_SET.md +0 -0
  346. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/__init__.py +0 -0
  347. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  348. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/contract.md +0 -0
  349. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/manifest.yml +0 -0
  350. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  351. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  352. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  353. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  354. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-37/conftest.py +0 -0
  355. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-37/contract.md +0 -0
  356. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-37/manifest.yml +0 -0
  357. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  358. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  359. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/contract.md +0 -0
  360. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/manifest.yml +0 -0
  361. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  362. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  363. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  364. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  365. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  366. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  367. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  368. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  369. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  370. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  371. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/contract.md +0 -0
  372. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  373. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  374. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/manifest.yml +0 -0
  375. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  376. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-51/tsconfig.json +0 -0
  377. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  378. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  379. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  380. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/contract.md +0 -0
  381. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  382. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/manifest.yml +0 -0
  383. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  384. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  385. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  386. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  387. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  388. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  389. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  390. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  391. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  392. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  393. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  394. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  395. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/contract.md +0 -0
  396. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/manifest.yml +0 -0
  397. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  398. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  399. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  400. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  401. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  402. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  403. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/conftest.py +0 -0
  404. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-basic.json +0 -0
  405. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  406. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  407. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  408. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  409. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/all_pass.json +0 -0
  410. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  411. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/mixed_fail.json +0 -0
  412. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  413. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  414. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/skip.json +0 -0
  415. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/playwright/truncated.json +0 -0
  416. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  417. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  418. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  419. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  420. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  421. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  422. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  423. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  424. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_acceptance.py +0 -0
  425. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_acceptance_drivers.py +0 -0
  426. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_api_error.py +0 -0
  427. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_app.py +0 -0
  428. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_branch_base.py +0 -0
  429. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_branch_capture.py +0 -0
  430. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_config_free_1712.py +0 -0
  431. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_deploy_units_endpoint.py +0 -0
  432. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_dirty_worktree.py +0 -0
  433. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  434. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_graph_self_heal.py +0 -0
  435. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_health_h3.py +0 -0
  436. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_idle_restart.py +0 -0
  437. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_push_failure.py +0 -0
  438. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_reap.py +0 -0
  439. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_repos_and_pull.py +0 -0
  440. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_restart_services_endpoint.py +0 -0
  441. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_skills_self_heal.py +0 -0
  442. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_startup_diagnostics.py +0 -0
  443. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_update.py +0 -0
  444. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_update_bluegreen.py +0 -0
  445. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_usage_limit.py +0 -0
  446. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_agent_zero_commit.py +0 -0
  447. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ambient_home_isolation.py +0 -0
  448. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_approve_reject_plan.py +0 -0
  449. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_approve_usage_gate.py +0 -0
  450. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_approved_work_2532.py +0 -0
  451. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_assignment_already_recorded_daemon.py +0 -0
  452. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_audit_log.py +0 -0
  453. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_audit_outcome.py +0 -0
  454. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_audit_query.py +0 -0
  455. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_auto_loop.py +0 -0
  456. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_auto_release_publish_2035.py +0 -0
  457. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_base_checkout_restore.py +0 -0
  458. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_block_log.py +0 -0
  459. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_cap_762.py +0 -0
  460. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_fixture.py +0 -0
  461. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_read_path.py +0 -0
  462. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_service.py +0 -0
  463. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_state.py +0 -0
  464. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_board_wire.py +0 -0
  465. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_brain.py +0 -0
  466. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_branch_model.py +0 -0
  467. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_bug_intake.py +0 -0
  468. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_build_worker_image_env_update.py +0 -0
  469. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cargo_cache.py +0 -0
  470. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_check_gh_argv_containment.py +0 -0
  471. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ci_acceptance_gate_1950.py +0 -0
  472. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ci_fix.py +0 -0
  473. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ci_gitlab.py +0 -0
  474. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ci_parity_2091.py +0 -0
  475. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_ci_store.py +0 -0
  476. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_claim.py +0 -0
  477. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_acceptance.py +0 -0
  478. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_assign.py +0 -0
  479. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  480. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_remote.py +0 -0
  481. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_assign_provider.py +0 -0
  482. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  483. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_audit.py +0 -0
  484. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_chat_continue.py +0 -0
  485. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_decide.py +0 -0
  486. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_diagnose_config_provenance.py +0 -0
  487. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_diagnose_forge_availability.py +0 -0
  488. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_diagnose_graph.py +0 -0
  489. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_diagnose_self.py +0 -0
  490. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_doctor.py +0 -0
  491. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_free_1801.py +0 -0
  492. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  493. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_drive.py +0 -0
  494. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_escalate.py +0 -0
  495. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_fix_headless_review.py +0 -0
  496. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_gate_a.py +0 -0
  497. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_install_drift.py +0 -0
  498. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_install_skills.py +0 -0
  499. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_issue_create_label.py +0 -0
  500. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_issue_reopen.py +0 -0
  501. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_merge.py +0 -0
  502. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_assign.py +0 -0
  503. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_capture.py +0 -0
  504. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_chat_add_child.py +0 -0
  505. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_dispatch.py +0 -0
  506. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_b.py +0 -0
  507. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_c.py +0 -0
  508. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_order.py +0 -0
  509. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  510. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_milestone_ship.py +0 -0
  511. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_network.py +0 -0
  512. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_new_issue_chat.py +0 -0
  513. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_plans.py +0 -0
  514. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_portal.py +0 -0
  515. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_scorecard.py +0 -0
  524. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_set_review_findings.py +0 -0
  525. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_advisory_terminal.py +0 -0
  526. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_comments.py +0 -0
  538. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_completion_summary.py +0 -0
  539. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config.py +0 -0
  540. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config_acceptance.py +0 -0
  541. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config_audit.py +0 -0
  542. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config_pricing.py +0 -0
  543. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  544. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_config_usage_gate.py +0 -0
  545. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_confirm_test.py +0 -0
  546. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_conflict_fix.py +0 -0
  547. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_conflict_fix_semantic.py +0 -0
  548. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_test.py +0 -0
  549. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_test_runner_baseline.py +0 -0
  550. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_manifest.py +0 -0
  567. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_units_lane.py +0 -0
  568. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deploy_web_unit.py +0 -0
  569. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_deps.py +0 -0
  570. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_diagnose.py +0 -0
  571. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dispatch.py +0 -0
  572. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dispatch_target_validation.py +0 -0
  573. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_dist_name.py +0 -0
  574. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_done_housekeeping.py +0 -0
  575. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_drive_state.py +0 -0
  576. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_drive_tmux.py +0 -0
  577. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_epic_up_capability_detection.py +0 -0
  578. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  579. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_epic_up_image_provenance.py +0 -0
  580. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_errors.py +0 -0
  581. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_events.py +0 -0
  582. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_failure_class.py +0 -0
  583. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_filelock.py +0 -0
  584. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  585. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_fix_of_force_override.py +0 -0
  586. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_fleet_config_health.py +0 -0
  587. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_fleet_health_probes.py +0 -0
  588. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_fleet_health_snapshot.py +0 -0
  589. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_forge_availability.py +0 -0
  590. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_freshness.py +0 -0
  591. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gate_a.py +0 -0
  592. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gate_b.py +0 -0
  593. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gate_snapshot_staleness.py +0 -0
  594. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gates.py +0 -0
  595. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  596. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_gen_mock_index.py +0 -0
  597. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_generated_types_fixture.py +0 -0
  598. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_github_ops.py +0 -0
  599. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_goal.py +0 -0
  600. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_graph_health.py +0 -0
  601. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_graph_selfheal_absent_2237.py +0 -0
  602. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_handoff.py +0 -0
  603. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_checks.py +0 -0
  604. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_cli.py +0 -0
  605. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_cli_graph.py +0 -0
  606. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_config.py +0 -0
  607. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_context.py +0 -0
  608. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_coord_web_ci_pin.py +0 -0
  609. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_deploy_lane_facts.py +0 -0
  610. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_incident_regression.py +0 -0
  611. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_pypi.py +0 -0
  612. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_registry.py +0 -0
  613. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_timer_active.py +0 -0
  614. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_toolchain.py +0 -0
  615. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_unit_drift.py +0 -0
  616. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_health_unit_enablement.py +0 -0
  617. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_hooks.py +0 -0
  618. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_human_attended_437.py +0 -0
  619. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_init.py +0 -0
  620. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_integration.py +0 -0
  621. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_briefing_echo.py +0 -0
  622. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_prefill_state.py +0 -0
  623. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_session_relaunch.py +0 -0
  624. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_test_verdict_backstop.py +0 -0
  625. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_token_attribution.py +0 -0
  626. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_interactive_worktree.py +0 -0
  627. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_issue_store_seam.py +0 -0
  628. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_liveness_auditor.py +0 -0
  629. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_liveness_notify.py +0 -0
  630. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_machine_pause.py +0 -0
  631. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_merge_queue.py +0 -0
  632. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_merge_verify.py +0 -0
  633. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_milestone_chat.py +0 -0
  634. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_milestone_dispatch.py +0 -0
  635. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_milestone_gate.py +0 -0
  636. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_milestone_order.py +0 -0
  637. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_milestone_seam.py +0 -0
  638. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_mock_author.py +0 -0
  639. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_model_tiering.py +0 -0
  640. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_models.py +0 -0
  641. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_models_config_labels.py +0 -0
  642. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_needs_attention.py +0 -0
  643. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_network.py +0 -0
  644. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_new_issue_chat.py +0 -0
  645. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_next_release_tag.py +0 -0
  646. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_node_shim.py +0 -0
  647. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_baseline.py +0 -0
  648. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_cli.py +0 -0
  649. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_collect.py +0 -0
  650. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_config.py +0 -0
  651. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_drive_seam.py +0 -0
  652. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_isolation.py +0 -0
  653. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_predicate.py +0 -0
  654. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_quiet_hours.py +0 -0
  655. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notifier_service.py +0 -0
  656. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notify.py +0 -0
  657. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_notify_drain.py +0 -0
  658. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_openapi.py +0 -0
  659. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_operational_defaults.py +0 -0
  660. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_overlap_fence.py +0 -0
  661. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_overlap_predict.py +0 -0
  662. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_packaged_deploy_units.py +0 -0
  663. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_parentage.py +0 -0
  664. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_paste_landed.py +0 -0
  665. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_pipeline.py +0 -0
  666. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_plan_followup_approve_plan_command.py +0 -0
  667. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_plan_followup_pr_command.py +0 -0
  668. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_plan_followup_review_command.py +0 -0
  669. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_plan_only.py +0 -0
  670. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_plan_parser.py +0 -0
  671. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_platform_paths.py +0 -0
  672. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_portal_bridge.py +0 -0
  673. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_portal_config.py +0 -0
  674. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_portal_store.py +0 -0
  675. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_portal_sync.py +0 -0
  676. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_pr_body_lint.py +0 -0
  677. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_prereqs.py +0 -0
  678. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_production_db_guard.py +0 -0
  679. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_progress.py +0 -0
  680. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_provider_seam.py +0 -0
  681. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_providers.py +0 -0
  682. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_providers_config_labels.py +0 -0
  683. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_providers_pty.py +0 -0
  684. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_quiet_hours.py +0 -0
  685. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_quiet_hours_store_2146.py +0 -0
  686. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reap_merged_sessions.py +0 -0
  687. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reap_stale_interactive_tick.py +0 -0
  688. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile.py +0 -0
  689. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_branch.py +0 -0
  690. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_completions.py +0 -0
  691. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_merges.py +0 -0
  692. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_no_agent_record.py +0 -0
  693. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_tick.py +0 -0
  694. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reconcile_usage_limit_done.py +0 -0
  695. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_refine_chat.py +0 -0
  696. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_cordon_2101.py +0 -0
  697. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  698. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_cordon_deadlock_2240.py +0 -0
  699. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_cordon_stuck_2490.py +0 -0
  700. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_propagate.py +0 -0
  701. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_unified_1242.py +0 -0
  702. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_verify.py +0 -0
  703. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_release_window.py +0 -0
  704. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_remote_auto_prune.py +0 -0
  705. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_remote_interactive_reaper.py +0 -0
  706. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_repo_edit_2220.py +0 -0
  707. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_repo_graph_fleet_2237.py +0 -0
  708. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_repo_onboard_2220.py +0 -0
  709. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_report_result_push.py +0 -0
  710. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_reports.py +0 -0
  711. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_retry.py +0 -0
  712. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_retry_advisory_1606.py +0 -0
  713. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_retry_type_1636.py +0 -0
  714. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_revalidate.py +0 -0
  715. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review.py +0 -0
  716. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_end_review_without_verdict.py +0 -0
  717. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_parse_failure_diagnostic.py +0 -0
  718. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_reaffirm.py +0 -0
  719. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_state.py +0 -0
  720. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_verdict_backstop.py +0 -0
  721. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_verdict_override_audit.py +0 -0
  722. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_verdict_relay.py +0 -0
  723. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_review_zero_commits.py +0 -0
  724. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_scoped_review_wiring.py +0 -0
  725. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_scorecard.py +0 -0
  726. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_self_health.py +0 -0
  727. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_serve.py +0 -0
  728. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_serve_app_board_trim.py +0 -0
  729. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_session.py +0 -0
  730. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_slice_issue_attribution.py +0 -0
  731. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_smoke.py +0 -0
  732. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_smoke_live_checkout_restore.py +0 -0
  733. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_smoke_workflow.py +0 -0
  734. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_spend_ceiling.py +0 -0
  735. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_spend_ceiling_coordinator.py +0 -0
  736. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_split.py +0 -0
  737. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_split_work.py +0 -0
  738. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_stage_projection.py +0 -0
  739. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_stalled_pipeline.py +0 -0
  740. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_state.py +0 -0
  741. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_state_review_findings_daemon.py +0 -0
  742. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_status_fleet_footer.py +0 -0
  743. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_stop_1567.py +0 -0
  744. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_stuck.py +0 -0
  745. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_terminal_command.py +0 -0
  746. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_chat.py +0 -0
  747. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_orchestrator.py +0 -0
  748. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_report.py +0 -0
  749. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_verdict_parsing.py +0 -0
  750. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_test_verdict_transcript_floor.py +0 -0
  751. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_thin_client_board_audit.py +0 -0
  752. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_thin_client_config_load_1080.py +0 -0
  753. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_thin_client_daemon_routing_906.py +0 -0
  754. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_tmux_host.py +0 -0
  755. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_tmux_session.py +0 -0
  756. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_transcript_floor.py +0 -0
  757. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_usage.py +0 -0
  758. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_usage_limits.py +0 -0
  759. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_usage_rollup.py +0 -0
  760. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_venv_live_install_2121.py +0 -0
  761. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_version_single_source.py +0 -0
  762. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_watch.py +0 -0
  763. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  764. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worker_events.py +0 -0
  765. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worker_image_pin_sync.py +0 -0
  766. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worker_safety.py +0 -0
  767. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worker_test_scoping.py +0 -0
  768. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worktree.py +0 -0
  769. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  770. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/Cargo.lock +0 -0
  771. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/Cargo.toml +0 -0
  772. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/cargo-config-local-quadraui.toml.example +0 -0
  773. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/approved.rs +0 -0
  774. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/audit.rs +0 -0
  775. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/chat.rs +0 -0
  776. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/data.rs +0 -0
  777. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/dialogs.rs +0 -0
  778. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/doc_tabs.rs +0 -0
  779. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/drive.rs +0 -0
  780. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/drive_queue.rs +0 -0
  781. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/escalation.rs +0 -0
  782. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/events.rs +0 -0
  783. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/fixtures.rs +0 -0
  784. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/fleet_health.rs +0 -0
  785. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/fleet_sessions.rs +0 -0
  786. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/fleet_terminals.rs +0 -0
  787. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/format.rs +0 -0
  788. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/milestone_dag.rs +0 -0
  789. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/mod.rs +0 -0
  790. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/msv.rs +0 -0
  791. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/pipeline.rs +0 -0
  792. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/plans.rs +0 -0
  793. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/render.rs +0 -0
  794. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/reports.rs +0 -0
  795. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/sessions.rs +0 -0
  796. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/settings_ui.rs +0 -0
  797. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/sidebar.rs +0 -0
  798. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/terminal.rs +0 -0
  799. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/tests.rs +0 -0
  800. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/types.rs +0 -0
  801. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/app/workspace.rs +0 -0
  802. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/bin/gtk.rs +0 -0
  803. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/commands.rs +0 -0
  804. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/lib.rs +0 -0
  805. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/main.rs +0 -0
  806. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/src/settings.rs +0 -0
  807. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/tests/acceptance.rs +0 -0
  808. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/tui/tests/cli.rs +0 -0
  809. {code_coordinator-0.5.220 → code_coordinator-0.5.222}/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.220
3
+ Version: 0.5.222
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.220
3
+ Version: 0.5.222
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.220",
2
+ "tag": "0.5.222",
3
3
  "distance": 0,
4
- "node": "g3b354927ade8c4466bfcb6981c100e1c23f7c41c",
4
+ "node": "g0a0c97af031f26980c629e83e6ab895bfca5a393",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -1076,6 +1076,37 @@ def _commits_ahead(wt_path: Path, base: str) -> int | None:
1076
1076
  return None
1077
1077
 
1078
1078
 
1079
+ def _pushed_commits_ahead(repo_path: Path, base: str, branch: str) -> int | None:
1080
+ """Commits ``origin/<branch>`` is ahead of *base*, checked from *repo_path*.
1081
+
1082
+ #2552: used by ``_reap``'s post-cleanup recheck, run AFTER
1083
+ ``_cleanup_worktree`` has possibly already torn the worktree down — so,
1084
+ unlike :func:`_commits_ahead`, this never touches the (possibly gone)
1085
+ worktree directory. It reads from *repo_path* instead, which stays valid
1086
+ for the whole reap: branch refs (including ``refs/remotes/origin/*``)
1087
+ live in the shared ``.git`` directory, not per-worktree.
1088
+
1089
+ Deliberately compares against the REMOTE-tracking ref ``origin/<branch>``
1090
+ rather than the local branch ref. A commit that only exists locally on
1091
+ this one agent (the push in ``_rescue_uncommitted_work`` can fail, same
1092
+ as any push) isn't yet something Test/Review/Merge — which all operate
1093
+ against GitHub — can act on, so it must not flip a status that implies
1094
+ "ready for the pipeline". Returns ``None`` when the remote ref can't be
1095
+ resolved at all (no ``origin`` configured, or the push never landed) —
1096
+ callers should treat that exactly like :func:`_commits_ahead`'s ``None``:
1097
+ unknown, don't act on it.
1098
+ """
1099
+ for base_ref in (f"origin/{base}", base):
1100
+ try:
1101
+ raw = _git(
1102
+ repo_path, "rev-list", "--count", f"{base_ref}..origin/{branch}"
1103
+ )
1104
+ return int(raw.strip())
1105
+ except (_GitError, ValueError):
1106
+ continue
1107
+ return None
1108
+
1109
+
1079
1110
  _ISSUE_REF_RE = re.compile(r"#(\d+)")
1080
1111
 
1081
1112
 
@@ -8903,6 +8934,52 @@ class AgentServer:
8903
8934
  if assignment is not None:
8904
8935
  self._cleanup_worktree(assignment)
8905
8936
 
8937
+ # #2552: `_cleanup_worktree` above may have just rescued a dirty
8938
+ # worktree into a WIP commit and pushed it (`_rescue_uncommitted_
8939
+ # work`) — AFTER the "0 commits ahead" status decision earlier in
8940
+ # this method already ran. That decision (ADVISORY's `zero_commit_
8941
+ # reason`, or REFUSED_POLICY's `policy_refusal_reason`) was computed
8942
+ # from a branch that was genuinely empty at the moment of judgement;
8943
+ # a rescue that landed a real, pushed commit on it makes the verdict
8944
+ # stale by construction — reporting "nothing was authored" about a
8945
+ # branch that, four log lines later, carries the worker's actual
8946
+ # output. Recompute from `repo_path` (not the worktree, which may
8947
+ # already be gone) whether the rescue's push actually reached
8948
+ # origin, and correct the status when it did. Only ADVISORY/
8949
+ # REFUSED_POLICY are ever reachable here (both are set exclusively
8950
+ # in the `_ahead == 0` branch above, itself gated on `spec.type in
8951
+ # _ZERO_COMMIT_TYPES`) — DONE, FAILED-for-other-reasons, CANCELLED
8952
+ # etc. are untouched.
8953
+ if (
8954
+ assignment is not None
8955
+ and assignment.status in (ADVISORY, REFUSED_POLICY)
8956
+ and assignment.dirty_worktree_reason is not None
8957
+ ):
8958
+ _rescue_branch = assignment.branch or assignment.spec.target_branch
8959
+ if _rescue_branch:
8960
+ _rescue_repo_path = Path(assignment.spec.repo_path).expanduser()
8961
+ _rescue_base = assignment.spec.branch or "main"
8962
+ _post_ahead = _pushed_commits_ahead(
8963
+ _rescue_repo_path, _rescue_base, _rescue_branch
8964
+ )
8965
+ if _post_ahead is not None and _post_ahead > 0:
8966
+ _prior_status = assignment.status
8967
+ with self._lock:
8968
+ _live = self._assignments.get(assignment_id)
8969
+ if _live is not None and _live.status == _prior_status:
8970
+ _live.status = DONE
8971
+ if assignment is not _live:
8972
+ assignment.status = DONE
8973
+ self._persist()
8974
+ self._log_line(
8975
+ assignment,
8976
+ "# reap: post-cleanup recheck — "
8977
+ f"{_post_ahead} commit(s) pushed to origin/"
8978
+ f"{_rescue_branch} ahead of {_rescue_base} after "
8979
+ f"rescue (was {_prior_status!r}); status corrected "
8980
+ "to done (#2552)",
8981
+ )
8982
+
8906
8983
  def _prune_completed_history(self) -> None:
8907
8984
  """Drop oldest terminal assignments over _COMPLETED_HISTORY_CAP (#452).
8908
8985
 
@@ -1916,14 +1916,21 @@ def _fetch_live_ci_gate(
1916
1916
  gate ``coord merge --plan`` computes, taken live, right now, this tick
1917
1917
  (#2182).
1918
1918
 
1919
- The second dict (#2347) carries the reason text
1919
+ The second dict (#2347, extended by #2556) carries the reason text
1920
1920
  :func:`coord.merge_queue.entry_gate_status` returned alongside each
1921
- still-blocked verdict used ONLY to let :func:`coord.drive_queue.
1922
- plan_tick` rewrite a still-``parked`` entry's ``last_reason`` when the
1923
- fresh reading is specifically "GitHub unreachable"
1924
- (``is_ci_unreadable_reason``) and differs from what is currently stored;
1925
- see that function's ``live_ci_gate_reason`` parameter. Never consulted
1926
- to decide whether to resume that remains the first dict's job alone.
1921
+ still-blocked verdict, and is handed to :func:`coord.drive_queue.
1922
+ plan_tick` as its ``live_ci_gate_reason`` parameter, which now gives it
1923
+ a first, decisive job (#2556): when this text carries none of the
1924
+ self-refreshing prefixes (``is_ci_pending_reason``/``is_ci_infra_reason``/
1925
+ ``is_ci_flaky_reason``/``is_ci_unreadable_reason``), ``plan_tick``
1926
+ overrides the first dict's still-blocked verdict into a resume a
1927
+ completed, *failing* CI run must never be indistinguishable from a slow
1928
+ one. When it DOES carry one of those prefixes, this reason is used the
1929
+ pre-#2556 way: only to rewrite a still-``parked`` entry's
1930
+ ``last_reason`` when the fresh reading is specifically "GitHub
1931
+ unreachable" (``is_ci_unreadable_reason``) and differs from what is
1932
+ currently stored. See ``plan_tick``'s own ``live_ci_gate_reason``
1933
+ docstring for the full account.
1927
1934
 
1928
1935
  THE GAP THIS CLOSES. On the daemon host — the only machine that ever
1929
1936
  runs this tick (``docs/AGENT_OPERATIONS.md``) — ``_fetch_board_view``
@@ -95,7 +95,7 @@ from coord.merge_queue import (
95
95
  PLAN_READY,
96
96
  is_ci_flaky_reason,
97
97
  is_ci_infra_reason,
98
- is_ci_pending_reason,
98
+ is_ci_terminal_reason,
99
99
  is_ci_unreadable_reason,
100
100
  is_stale_smoke_reason,
101
101
  )
@@ -1121,12 +1121,7 @@ def build_board_view(
1121
1121
  # board-build time. `plan_reason` already carries it whenever it
1122
1122
  # applies; the live plan reading and a live `coord merge` attempt's
1123
1123
  # raw reading can never disagree about this one.
1124
- if not (
1125
- is_ci_pending_reason(reason)
1126
- or is_ci_infra_reason(reason)
1127
- or is_ci_flaky_reason(reason)
1128
- or is_ci_unreadable_reason(reason)
1129
- ):
1124
+ if is_ci_terminal_reason(reason):
1130
1125
  continue
1131
1126
  # #2158: the same plan row that came back with NO reason of its own
1132
1127
  # also carries `ci_summary` — `summarize_counts` over the very checks
@@ -3180,18 +3175,33 @@ def plan_tick(
3180
3175
  the #2158 ceiling included — see
3181
3176
  :func:`coord.commands.drive_queue._fetch_live_ci_gate` for the shell
3182
3177
  side, which computes this ONLY for the bounded set of entries currently
3183
- `parked` on a CI reason, never the whole queue.
3184
-
3185
- *live_ci_gate_reason* (#2347) is *live_ci_gate*'s companion: the reason
3186
- text the SAME fresh `entry_gate_status` call returned, for entries whose
3187
- reading is STILL blocked. Never used to decide whether to resume (that
3188
- remains `live_ci_gate`'s job) only to rewrite a still-parked entry's
3189
- `last_reason` when the fresh reading is `CI_UNREADABLE_PREFIX`-shaped and
3190
- differs from what is currently stored, so `coord drive-queue list`/
3191
- `status` shows "GitHub could not be reached" the moment that becomes the
3192
- real cause, instead of silently keeping whatever reason the entry
3193
- happened to park on originally (which #1891/#1892/#2252's "still shut ⇒
3194
- no reconcile, no write" rule would otherwise leave frozen indefinitely —
3178
+ `parked` on a CI reason, never the whole queue. `True` is NOT simply
3179
+ "stay parked" any more (#2556): it means the fresh read isn't
3180
+ ``PLAN_READY``, which is true both while checks are still genuinely in
3181
+ flight (or mid one of their own bounded self-refreshing windows —
3182
+ :func:`~coord.merge_queue.is_ci_pending_reason`/`is_ci_infra_reason`/
3183
+ `is_ci_flaky_reason`/`is_ci_unreadable_reason`, stay parked) AND once
3184
+ they have reported a TERMINAL verdict against the code (a plain "CI
3185
+ failed: ..." reading with none of those prefixes — resume instead, so a
3186
+ completed, failing run can never be indistinguishable from a slow one).
3187
+ See *live_ci_gate_reason* just below, which is what makes that
3188
+ distinction possible.
3189
+
3190
+ *live_ci_gate_reason* (#2347, extended by #2556) is *live_ci_gate*'s
3191
+ companion: the reason text the SAME fresh `entry_gate_status` call
3192
+ returned, for entries whose reading is STILL not `PLAN_READY`. #2556
3193
+ gives it a first, decisive job: when this text carries none of the
3194
+ self-refreshing prefixes (`is_ci_pending_reason`/`is_ci_infra_reason`/
3195
+ `is_ci_flaky_reason`/`is_ci_unreadable_reason`), `live_ci_gate`'s `True`
3196
+ is overridden into a resume — see `plan_tick`'s body. When it DOES carry
3197
+ one of those prefixes, this reason is used the pre-#2556 way: only to
3198
+ rewrite a still-parked entry's `last_reason` when the fresh reading is
3199
+ `CI_UNREADABLE_PREFIX`-shaped and differs from what is currently stored,
3200
+ so `coord drive-queue list`/`status` shows "GitHub could not be reached"
3201
+ the moment that becomes the real cause, instead of silently keeping
3202
+ whatever reason the entry happened to park on originally (which
3203
+ #1891/#1892/#2252's "still shut ⇒ no reconcile, no write" rule would
3204
+ otherwise leave frozen indefinitely —
3195
3205
  see the issue for the observed incident: a stale "CI running: ..."
3196
3206
  reason surviving a run of transient GitHub API 503s for most of
3197
3207
  `PARK_STALE_SECONDS` with no operator-visible signal of the real cause).
@@ -3524,6 +3534,60 @@ def plan_tick(
3524
3534
  live_override = (live_ci_gate or {}).get(entry.key)
3525
3535
  if live_override is not None:
3526
3536
  if live_override:
3537
+ live_reason = (live_ci_gate_reason or {}).get(entry.key)
3538
+ # #2556: `live_override=True` only means the FRESH read
3539
+ # taken THIS tick isn't PLAN_READY — but "not ready" folds
3540
+ # together two very different facts. One is "checks are
3541
+ # genuinely still in flight" (`is_ci_pending_reason`), or one
3542
+ # of the other self-refreshing, no-verdict-yet classes
3543
+ # (`is_ci_infra_reason`'s verdictless failure mid its own
3544
+ # bounded auto-rerun, `is_ci_flaky_reason`'s one-shot re-run
3545
+ # to rule out a flake, `is_ci_unreadable_reason`'s bare
3546
+ # GitHub-unreachable read, handled specially just below) —
3547
+ # for all of these, "still shut ⇒ stay parked" (#1891/#2182)
3548
+ # is exactly right, because there is no fresh verdict to act
3549
+ # on yet. The other is "checks already reported a TERMINAL
3550
+ # verdict against the code" — a plain "CI failed: ..."
3551
+ # reading carrying none of those prefixes. This entry's own
3552
+ # park message promises "the queue resumes it automatically
3553
+ # once they do [report]" — a completed, failing run
3554
+ # satisfies that in every ordinary reading, so staying
3555
+ # parked on it forever (as every prior tick did — the #2158
3556
+ # staleness ceiling never even runs, because it only applies
3557
+ # when `live_override` is absent) is the bug: a red CI on a
3558
+ # parked row was indistinguishable from a slow CI on one,
3559
+ # unboundedly. Resume here exactly like the "reads READY"
3560
+ # branch below (no attempt spent — a fresh GitHub read is
3561
+ # not a failed launch attempt) so this falls straight into
3562
+ # the SAME `waiting` walk, on the SAME tick; whatever
3563
+ # relaunches `coord drive` finds the terminal CI reading and
3564
+ # routes it through `_decide_merge`'s existing checks_failed
3565
+ # handling (dispatch a fix, or block with a real reason) —
3566
+ # exactly the path any other red-CI entry already takes.
3567
+ if live_reason and is_ci_terminal_reason(live_reason):
3568
+ reason = (
3569
+ f"live re-check of {entry.key}'s gate this tick "
3570
+ f"reads a terminal, non-pending result ({live_reason}) "
3571
+ "— resuming from parked without spending an attempt "
3572
+ "so the normal checks_failed handling can take over "
3573
+ "(#2556)"
3574
+ )
3575
+ reconciles.append(
3576
+ Reconcile(
3577
+ entry.key,
3578
+ "resumed",
3579
+ reason,
3580
+ occupies=False,
3581
+ updates={
3582
+ "state": STATE_WAITING,
3583
+ "attempts": 0,
3584
+ "last_reason": reason,
3585
+ },
3586
+ )
3587
+ )
3588
+ states[entry.key] = STATE_WAITING
3589
+ effective_attempts[entry.key] = 0
3590
+ continue
3527
3591
  # #2347: CONFIRMED still blocked — but if the FRESH reading
3528
3592
  # taken THIS tick says the real cause is "GitHub could not
3529
3593
  # be reached" (not a real CI verdict) and that differs from
@@ -3535,7 +3599,6 @@ def plan_tick(
3535
3599
  # rule does for every other still-blocked reading. State
3536
3600
  # stays `parked`, no attempt spent — this changes only what
3537
3601
  # the operator is told, never the decision.
3538
- live_reason = (live_ci_gate_reason or {}).get(entry.key)
3539
3602
  if (
3540
3603
  live_reason
3541
3604
  and is_ci_unreadable_reason(live_reason)
@@ -1525,6 +1525,41 @@ def is_ci_flaky_reason(reason: str | None) -> bool:
1525
1525
  return (reason or "").startswith(CI_FLAKY_PREFIX)
1526
1526
 
1527
1527
 
1528
+ def is_ci_terminal_reason(reason: str | None) -> bool:
1529
+ """True when *reason* is a CONCLUDED CI verdict — a plain "checks
1530
+ failed: ..." (or similarly final) reading carrying none of the four
1531
+ self-refreshing, no-verdict-yet prefixes above (#2556).
1532
+
1533
+ ``not is_ci_terminal_reason(r)`` is exactly "this reading is still
1534
+ genuinely in flight, or mid one of its own bounded self-refreshing
1535
+ windows, and answers nothing yet about whether the code is any good" —
1536
+ :func:`is_ci_pending_reason` (checks exist and are still running),
1537
+ :func:`is_ci_infra_reason` (a check completed but said nothing about the
1538
+ code, mid its own auto-rerun), :func:`is_ci_flaky_reason` (a real
1539
+ verdict, but only observed once, mid its one-shot re-run to rule out a
1540
+ flake), or :func:`is_ci_unreadable_reason` (GitHub could not even be
1541
+ asked the question). Anything else — most commonly a plain "checks
1542
+ failed: ..." with none of those prefixes — is terminal: a concluded
1543
+ result the queue can act on now, never indistinguishable from a slow or
1544
+ still-resolving one.
1545
+
1546
+ The single implementation of this classification. Two call sites used to
1547
+ each spell out the identical four-way disjunction inline — a `parked`
1548
+ entry's "is this still self-refreshing?" gate in this module's own
1549
+ `process()`, and `coord.drive_queue.plan_tick`'s #2556 resume-on-
1550
+ terminal-failure branch — which is exactly the "two independent
1551
+ implementations that agree today are a split-brain waiting to happen"
1552
+ shape this repo's own review checklist warns against. Call this instead
1553
+ of re-deriving the disjunction at a new call site.
1554
+ """
1555
+ return not (
1556
+ is_ci_pending_reason(reason)
1557
+ or is_ci_infra_reason(reason)
1558
+ or is_ci_flaky_reason(reason)
1559
+ or is_ci_unreadable_reason(reason)
1560
+ )
1561
+
1562
+
1528
1563
  # #1892: auto-reruns `process()` will trigger for a single entry's verdictless
1529
1564
  # CI failure (via `CiStore.rerun_for_pr`) before giving up and parking it for
1530
1565
  # a human instead of the queue's own #1891 machinery. A workflow genuinely
@@ -579,6 +579,36 @@ def dispatch_test_author(
579
579
  "work, open a fresh branch by hand — do not retry as-is."
580
580
  )
581
581
 
582
+ # #2552: a retried JIT dispatch re-derives this SAME branch for the same
583
+ # (tracking_issue, issue_number) pair, and `_setup_worktree` already
584
+ # resumes from `origin/<branch>` at the git level whenever it exists —
585
+ # the #389/#460 continuation-branch logic checks out the remote tip
586
+ # instead of branching fresh. So a retried worker's worktree is NOT
587
+ # empty when the branch already carries real commits (e.g. a #1394
588
+ # WIP-rescue commit left behind by a killed prior attempt) — but the
589
+ # briefing built above reads identically whether the branch is fresh or
590
+ # already has content, so nothing told the worker to check what's
591
+ # already there before writing more, and a worker that doesn't think to
592
+ # `git log` first can end up re-authoring over its own prior output.
593
+ # `branch_commits_ahead` asks GitHub directly (no local checkout
594
+ # required — the coordinator dispatching this may not have one); `None`
595
+ # (lookup failed) is left silent rather than asserted either way, same
596
+ # fail-quiet posture as every other best-effort GitHub read in this
597
+ # function.
598
+ _resume_ahead = github_ops.branch_commits_ahead(
599
+ repo_cfg.github, repo_cfg.default_branch or "main", branch
600
+ )
601
+ if _resume_ahead:
602
+ briefing += (
603
+ "\n\n---\nRESUMING: this branch already has "
604
+ f"{_resume_ahead} commit(s) on it ahead of "
605
+ f"{repo_cfg.default_branch or 'main'} — likely unfinished or "
606
+ "unverified work from an interrupted prior session (possibly a "
607
+ "coordinator WIP-rescue commit — see #1394). Run `git log` and "
608
+ "read what's already there FIRST. Continue/complete/verify it "
609
+ "rather than re-authoring from scratch (#2552)."
610
+ )
611
+
582
612
  deny_commands = test_author_deny_commands(config, repo_name)
583
613
 
584
614
  # #2549: this was the only dispatcher on the fleet that never sent
@@ -3938,6 +3938,99 @@ def test_reap_review_type_gets_no_stash_diagnostic(tmp_path: Path) -> None:
3938
3938
  server.shutdown()
3939
3939
 
3940
3940
 
3941
+ def _init_repo_with_remote(path: Path) -> Path:
3942
+ """Like `_init_repo`, but with a real (local, bare) `origin` configured
3943
+ and `main` already pushed.
3944
+
3945
+ #2552's post-cleanup recheck (`AgentServer._pushed_commits_ahead`)
3946
+ deliberately reads the REMOTE-tracking ref (`origin/<branch>`), not the
3947
+ local branch — a rescue commit that never reached origin must not flip
3948
+ status. `_init_repo` (no remote) can't exercise that path at all, since
3949
+ `origin/<branch>` never exists there.
3950
+ """
3951
+ remote = path.parent / f"{path.name}-remote.git"
3952
+ subprocess.run(
3953
+ ["git", "init", "--bare", "-b", "main", str(remote)],
3954
+ check=True, capture_output=True,
3955
+ )
3956
+ _init_repo(path)
3957
+ subprocess.run(
3958
+ ["git", "remote", "add", "origin", str(remote)],
3959
+ cwd=str(path), check=True, capture_output=True,
3960
+ )
3961
+ subprocess.run(
3962
+ ["git", "push", "-u", "origin", "main"],
3963
+ cwd=str(path), check=True, capture_output=True,
3964
+ )
3965
+ return path
3966
+
3967
+
3968
+ def test_reap_status_reflects_post_rescue_branch_state(tmp_path: Path) -> None:
3969
+ """#2552: a rescued WIP commit that reaches origin must correct the
3970
+ pre-cleanup zero-commit verdict instead of leaving it standing.
3971
+
3972
+ Reported bug: `_reap` measures "0 commits ahead of main" (true at that
3973
+ instant, since the worker left a tracked-file edit uncommitted) and sets
3974
+ ADVISORY with `zero_commit_reason` — BEFORE `_cleanup_worktree` runs.
3975
+ Cleanup then rescues the dirty worktree into a `WIP [coord-rescue]`
3976
+ commit and pushes it (`_rescue_uncommitted_work`), landing a real commit
3977
+ on the very branch the ADVISORY verdict was judged empty one step
3978
+ earlier. Nothing ever revisited the verdict, so a successful #1394
3979
+ rescue was always scored as "nothing was authored".
3980
+
3981
+ Drives the real `_reap` path end to end (`assign()`/`wait_for()`,
3982
+ exactly like the neighboring stash-diagnostic tests above) rather than
3983
+ re-implementing the ordering inline, so a regression in the actual
3984
+ `_reap`/`_cleanup_worktree` sequence is what this test would catch.
3985
+ """
3986
+ repo = _init_repo_with_remote(tmp_path / "repo")
3987
+ server = _server(
3988
+ tmp_path,
3989
+ argv=["/bin/sh", "-c", "echo dirty >> README; exit 0"],
3990
+ repo_path=repo,
3991
+ )
3992
+
3993
+ a = server.assign(_spec(repo))
3994
+ final = server.wait_for(a.id, timeout=15)
3995
+
3996
+ assert final.status == DONE
3997
+ assert final.dirty_worktree_reason is not None
3998
+ assert "coord-rescue" in final.dirty_worktree_reason
3999
+ assert "UNVERIFIED" in final.dirty_worktree_reason
4000
+ server.shutdown()
4001
+
4002
+
4003
+ def test_reap_stays_advisory_when_rescue_commit_never_reaches_origin(
4004
+ tmp_path: Path,
4005
+ ) -> None:
4006
+ """#2552 control: a rescue commit that stays LOCAL ONLY must NOT flip
4007
+ status to done.
4008
+
4009
+ Same dirty-worktree shape as the test above, but the repo has no
4010
+ `origin` at all — the WIP-rescue push has nothing to push to, so the
4011
+ commit only ever exists on this one agent. Test/Review/Merge all operate
4012
+ against GitHub; a branch nobody but this agent can see is not "ready for
4013
+ the pipeline", so the post-cleanup recheck must leave the pre-existing
4014
+ ADVISORY verdict alone (the `dirty_worktree_reason` still records that
4015
+ real work exists — see `_record_dirty_worktree` — just not that it is
4016
+ live anywhere the pipeline can consume it).
4017
+ """
4018
+ repo = _init_repo(tmp_path / "repo") # no `origin` remote configured
4019
+ server = _server(
4020
+ tmp_path,
4021
+ argv=["/bin/sh", "-c", "echo dirty >> README; exit 0"],
4022
+ repo_path=repo,
4023
+ )
4024
+
4025
+ a = server.assign(_spec(repo))
4026
+ final = server.wait_for(a.id, timeout=15)
4027
+
4028
+ assert final.status == ADVISORY
4029
+ assert final.dirty_worktree_reason is not None
4030
+ assert "coord-rescue" in final.dirty_worktree_reason
4031
+ server.shutdown()
4032
+
4033
+
3941
4034
  def test_sanitize_branch_replaces_slashes(tmp_path: Path) -> None:
3942
4035
  """_sanitize_branch should replace slashes with dashes."""
3943
4036
  from coord.agent import _sanitize_branch
@@ -1835,6 +1835,15 @@ def _green_check(name: str = "test (3.12)"):
1835
1835
  )
1836
1836
 
1837
1837
 
1838
+ def _failed_check(name: str = "test (3.12)"):
1839
+ from coord.ci_store import CheckRun
1840
+
1841
+ return CheckRun(
1842
+ name=name, status="completed", conclusion="failure",
1843
+ url="", run_id="1", started_at=100.0, completed_at=160.0,
1844
+ )
1845
+
1846
+
1838
1847
  def _running_check(name: str = "test (3.12)"):
1839
1848
  from coord.ci_store import CheckRun
1840
1849
 
@@ -1914,6 +1923,45 @@ def test_a_parked_entry_with_ci_still_genuinely_running_stays_parked(
1914
1923
  assert "1 parked" in cli_no_gates("status").output
1915
1924
 
1916
1925
 
1926
+ def test_a_parked_entry_resumes_once_ci_reports_a_confirmed_failure(
1927
+ cli_no_gates, seed, launches, coord_db, live_ci_backend,
1928
+ ):
1929
+ """#2556, reproduced rather than injected.
1930
+
1931
+ coord-portal#131 (live, 2026-08-22): a row parked on "CI running: e2e
1932
+ smoke (playwright)" never noticed the check it was watching completed as
1933
+ FAILURE — it stayed `parked`, with `last_reason` still reading "CI
1934
+ running: ..." over an hour after the run finished. The #2182 live
1935
+ re-check correctly asks GitHub again every tick, but collapsed "still
1936
+ running" and "confirmed failed" into the same "stay parked" branch,
1937
+ because both merely fail to read `PLAN_READY`. A completed run — even a
1938
+ red one — satisfies this entry's own park promise ("the queue resumes it
1939
+ automatically once they do [report]"); it must resume and let the normal
1940
+ `waiting`/launch path route the failure through `coord drive`'s existing
1941
+ checks_failed handling, exactly like any other red-CI entry.
1942
+ """
1943
+ _park_with_pr(cli_no_gates, seed, coord_db)
1944
+ assert "CI running" in (queued(2159)["last_reason"] or "")
1945
+
1946
+ live_ci_backend([_failed_check()])
1947
+
1948
+ result = cli_no_gates("tick")
1949
+ assert result.exit_code == 0, result.output
1950
+ # The resume itself is visible in this tick's own reconcile line — the
1951
+ # entry then launches in the SAME tick (like the #2182 green-check case
1952
+ # above), which clears `last_reason` to "" on success, so the CI-failed
1953
+ # reading is only observable in the tick's rendered output, not the
1954
+ # post-launch row.
1955
+ assert "resumed" in result.output
1956
+ assert "CI failed" in result.output
1957
+ entry = queued(2159)
1958
+ assert entry["state"] != "parked", entry # no longer wedged
1959
+ assert entry["attempts"] == 0 # #1891/#2273: still free — no attempt spent
1960
+ assert len(launches) == 2, launches # resumed straight into a fresh launch
1961
+
1962
+ assert "parked" not in cli_no_gates("status").output
1963
+
1964
+
1917
1965
  def test_a_parked_entrys_reason_is_corrected_when_github_is_unreachable(
1918
1966
  cli_no_gates, seed, launches, coord_db, live_ci_backend,
1919
1967
  ):
@@ -4662,24 +4662,33 @@ def driver_factory(tmp_path, monkeypatch, capsys):
4662
4662
  monkeypatch.setenv("TMPDIR", str(tmp_path))
4663
4663
  monkeypatch.setattr("coord.drive_state.scratch_dir", lambda: tmp_path)
4664
4664
  monkeypatch.setattr("coord.drive.scratch_dir", lambda: tmp_path)
4665
- # A per-test notify.lock, so a Driver test's `--notify` nudge never
4666
- # contends with the OPERATOR'S real ~/.coord/notify.lock — the same
4667
- # convention `tests/test_notify_drain.py`'s `lock_path` fixture already
4668
- # documents ("so tests never touch the real ~/.coord one").
4665
+ # #2170-class isolation, fixture-wide: `run_notify()` takes a REAL flock
4666
+ # on `notify_lock_path()` (`Path.home()/".coord"/"notify.lock"`, resolved
4667
+ # at call time) whenever `DriveOptions(notify=True)` is in play. Any
4668
+ # driver test in this module can turn that on, and without isolating it
4669
+ # the lock contends with whatever else on the host legitimately holds it
4670
+ # — on a machine that actually runs the fleet, `coord-notify.timer`
4671
+ # (5-minute cadence) and the board daemon's own drain both hold it for
4672
+ # the length of a full notify pass. The test then burns up to the full
4673
+ # 5-minute `timeout=300` per acquire, logs "could not take
4674
+ # ~/.coord/notify.lock within 5m — skipping nudge", and fails with an
4675
+ # empty call list. That is a race with whatever else is running on the
4676
+ # machine, not a signal about the code under test — exactly the class
4677
+ # `tests/test_ambient_home_isolation.py` and the `populated-home` CI job
4678
+ # exist to keep out.
4669
4679
  #
4670
- # Without this, `Driver.run_notify()` takes the live lock for real: on
4671
- # any host that actually runs the fleet, `coord-notify.timer` (5-minute
4672
- # cadence) and the board daemon's own drain both hold it for the length
4673
- # of a full notify pass, so every nudge assertion here
4674
- # (`test_notify_nudges_coord_notify_under_the_shared_lock` and the two
4675
- # #1593 stall-nudge tests) was one unlucky overlap away from seeing
4676
- # LockBusy, logging "could not take ~/.coord/notify.lock within 5m
4677
- # skipping nudge", and failing with an empty call list after a 5-minute
4678
- # stall. That is a race with whatever else is running on the machine,
4679
- # not a signal about the code under test.
4680
- monkeypatch.setattr(
4681
- "coord.drive.notify_lock_path", lambda: tmp_path / "notify.lock"
4682
- )
4680
+ # Redirecting $HOME is the whole mechanism, and it subsumes the earlier
4681
+ # #2536 fix (which pinned `coord.drive.notify_lock_path` at
4682
+ # `tmp_path/"notify.lock"` instead): `notify_lock_path()` resolves
4683
+ # `Path.home()` at call time, so the lock lands at
4684
+ # `tmp_path/".coord"/"notify.lock"` either way — but $HOME also covers
4685
+ # everything *else* in the driver that reaches for `~/.coord`, and it
4686
+ # needs no upkeep as call sites move. Deliberately NOT belt-and-braces:
4687
+ # re-pinning `notify_lock_path` on top of this would move the lock back
4688
+ # out of the redirected $HOME and silently defeat
4689
+ # `test_notify_nudges_coord_notify_under_the_shared_lock`, whose whole
4690
+ # job is to assert the redirection took.
4691
+ monkeypatch.setenv("HOME", str(tmp_path))
4683
4692
 
4684
4693
  def make(
4685
4694
  payloads, *, opts=None, verifier=None, config=None, oracle_gate=None,
@@ -5725,6 +5734,15 @@ def test_notify_is_off_by_default(driver_factory, monkeypatch):
5725
5734
 
5726
5735
 
5727
5736
  def test_notify_nudges_coord_notify_under_the_shared_lock(driver_factory, tmp_path):
5737
+ # #2170-class isolation: `run_notify()` takes a REAL flock on
5738
+ # `notify_lock_path()` — i.e. `Path.home()/".coord"/"notify.lock"`,
5739
+ # resolved at call time. `driver_factory` redirects $HOME to `tmp_path`
5740
+ # fixture-wide (see its definition) precisely so this doesn't contend
5741
+ # with whatever else on the host legitimately holds that lock (a live
5742
+ # `coord notify` / `run_drain` on a daemon host, or simply another
5743
+ # pytest worker running the sibling drain tests) and burn the full
5744
+ # 5-minute `timeout=300` before failing with an empty `seen`. This
5745
+ # assertion just confirms the redirection actually took.
5728
5746
  driver = driver_factory(
5729
5747
  [board(status="merged")], opts=DriveOptions(machine="precision", notify=True)
5730
5748
  )
@@ -5732,6 +5750,8 @@ def test_notify_nudges_coord_notify_under_the_shared_lock(driver_factory, tmp_pa
5732
5750
  driver.run_coord = lambda args, **kw: seen.append(args) or 0 # type: ignore[assignment]
5733
5751
  driver.run_notify()
5734
5752
  assert seen == [("notify",)]
5753
+ # The lock really was taken under the redirected $HOME, not the host's.
5754
+ assert (tmp_path / ".coord" / "notify.lock").exists()
5735
5755
 
5736
5756
 
5737
5757
  def test_stalled_stage_gets_re_nudged_on_every_stall_window(driver_factory, capsys):