code-coordinator 0.5.221__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.221 → code_coordinator-0.5.222}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/drive_queue.py +14 -7
  5. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive_queue.py +83 -20
  6. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/merge_queue.py +35 -0
  7. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_drive_queue.py +48 -0
  8. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive.py +37 -17
  9. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_queue.py +90 -0
  10. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/cargo-test.yml +0 -0
  21. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/release-tui.yml +0 -0
  23. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.gitignore +0 -0
  25. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/GOAL.md +0 -0
  27. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/LICENSE +0 -0
  28. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/README.md +0 -0
  30. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/client.py +0 -0
  64. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/config.py +0 -0
  95. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/confirm_test.py +0 -0
  97. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/server.py +0 -0
  103. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/db.py +0 -0
  105. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dead_end.py +0 -0
  106. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/README.md +0 -0
  107. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-agent.service +0 -0
  108. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.service +0 -0
  109. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.sh +0 -0
  110. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.timer +0 -0
  111. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.service +0 -0
  112. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.timer +0 -0
  113. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-notify.service +0 -0
  114. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-notify.timer +0 -0
  115. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.service +0 -0
  116. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.timer +0 -0
  117. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.service +0 -0
  118. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.timer +0 -0
  119. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-serve.service +0 -0
  120. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.service +0 -0
  121. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.timer +0 -0
  122. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web.service +0 -0
  123. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy_manifest.py +0 -0
  124. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy_units.py +0 -0
  125. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deps.py +0 -0
  126. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/diagnose.py +0 -0
  127. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dispatch.py +0 -0
  128. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dist_name.py +0 -0
  129. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive.py +0 -0
  130. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive_state.py +0 -0
  131. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/events.py +0 -0
  132. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/failure_class.py +0 -0
  133. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/filelock.py +0 -0
  134. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/fleet_config_health.py +0 -0
  135. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/forge_availability.py +0 -0
  136. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/freshness.py +0 -0
  137. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_a.py +0 -0
  138. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_b.py +0 -0
  139. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_snapshot.py +0 -0
  140. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gates.py +0 -0
  141. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/github_ops.py +0 -0
  142. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/goal.py +0 -0
  143. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/graph_health.py +0 -0
  144. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/__init__.py +0 -0
  145. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/aggregate.py +0 -0
  146. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/__init__.py +0 -0
  147. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/agent_install.py +0 -0
  148. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/cargo_targets.py +0 -0
  149. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/claude_binary.py +0 -0
  150. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/coord_web_ci_pin.py +0 -0
  151. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/deploy_lane_facts.py +0 -0
  152. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/disk.py +0 -0
  153. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_board.py +0 -0
  154. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  155. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_phantom.py +0 -0
  156. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_unit_drift.py +0 -0
  157. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/graph.py +0 -0
  158. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/graphify_cli.py +0 -0
  159. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/index_lock.py +0 -0
  160. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/plan_usage.py +0 -0
  161. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/repo_state.py +0 -0
  162. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/spawned_coord.py +0 -0
  163. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/timer_active.py +0 -0
  164. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/toolchain.py +0 -0
  165. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/unit_drift.py +0 -0
  166. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/unit_enablement.py +0 -0
  167. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/worktrees.py +0 -0
  168. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/cli.py +0 -0
  169. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/context.py +0 -0
  170. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/fleet_snapshot.py +0 -0
  171. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/models.py +0 -0
  172. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/pypi.py +0 -0
  173. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/registry.py +0 -0
  174. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/render.py +0 -0
  175. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/units.py +0 -0
  176. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/hooks.py +0 -0
  177. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/housekeeping.py +0 -0
  178. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/interactive.py +0 -0
  179. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/issue_store.py +0 -0
  180. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/liveness_auditor.py +0 -0
  181. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/machine_pause.py +0 -0
  182. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_chat.py +0 -0
  183. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_dispatch.py +0 -0
  184. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_gate.py +0 -0
  185. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_order.py +0 -0
  186. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/mock_author.py +0 -0
  187. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/models.py +0 -0
  188. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/network.py +0 -0
  189. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/new_issue_chat.py +0 -0
  190. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/__init__.py +0 -0
  191. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/baseline.py +0 -0
  192. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/cli.py +0 -0
  193. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/collect.py +0 -0
  194. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/digest.py +0 -0
  195. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/models.py +0 -0
  196. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/predicate.py +0 -0
  197. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/service.py +0 -0
  198. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/store.py +0 -0
  199. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/transport.py +0 -0
  200. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notify.py +0 -0
  201. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/openapi.py +0 -0
  202. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/overlap_fence.py +0 -0
  203. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/overlap_predict.py +0 -0
  204. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/parentage.py +0 -0
  205. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/parentage_github.py +0 -0
  206. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/pipeline.py +0 -0
  207. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/plan_parser.py +0 -0
  208. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/plans.py +0 -0
  209. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/platform_paths.py +0 -0
  210. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_bridge.py +0 -0
  211. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_store.py +0 -0
  212. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_sync.py +0 -0
  213. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/pr_body_lint.py +0 -0
  214. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/prereqs.py +0 -0
  215. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/progress.py +0 -0
  216. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/__init__.py +0 -0
  217. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/base.py +0 -0
  218. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/claude.py +0 -0
  219. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/claude_pty.py +0 -0
  220. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/opencode.py +0 -0
  221. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/queue_diagnose.py +0 -0
  222. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reconcile.py +0 -0
  223. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reconcile_tick.py +0 -0
  224. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/refine_chat.py +0 -0
  225. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_cordon.py +0 -0
  226. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_propagate.py +0 -0
  227. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_verify.py +0 -0
  228. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_window.py +0 -0
  229. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/repo_edit.py +0 -0
  230. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/repo_onboard.py +0 -0
  231. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reports.py +0 -0
  232. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/revalidate.py +0 -0
  233. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/review.py +0 -0
  234. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/scorecard.py +0 -0
  235. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/self_health.py +0 -0
  236. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/serve_app.py +0 -0
  237. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  238. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  239. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  240. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  241. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  242. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/portal-followup/SKILL.md +0 -0
  243. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  244. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  245. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/update-issue/SKILL.md +0 -0
  246. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/smoke.py +0 -0
  247. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/spend_ceiling.py +0 -0
  248. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/split_work.py +0 -0
  249. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/stage_projection.py +0 -0
  250. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/state.py +0 -0
  251. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_author.py +0 -0
  252. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_chat.py +0 -0
  253. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_orchestrator.py +0 -0
  254. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_report.py +0 -0
  255. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/tui_release.py +0 -0
  256. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage.py +0 -0
  257. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage_limits.py +0 -0
  258. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage_rollup.py +0 -0
  259. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/worker_events.py +0 -0
  260. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coordinator.example.yml +0 -0
  261. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-agent.service +0 -0
  262. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.service +0 -0
  263. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.sh +0 -0
  264. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.timer +0 -0
  265. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-drive-queue.service +0 -0
  266. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-drive-queue.timer +0 -0
  267. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-notify.service +0 -0
  268. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-notify.timer +0 -0
  269. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-propagate.service +0 -0
  270. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-propagate.timer +0 -0
  271. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-window.service +0 -0
  272. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-window.timer +0 -0
  273. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-serve.service +0 -0
  274. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.service +0 -0
  275. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.sh +0 -0
  276. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.timer +0 -0
  277. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-rollback.sh +0 -0
  278. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web.service +0 -0
  279. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/node-shim.sh +0 -0
  280. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  281. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_CI.md +0 -0
  282. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_DIST.md +0 -0
  283. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/AGENT_OPERATIONS.md +0 -0
  284. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ARCHITECTURE.md +0 -0
  285. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ARCH_SECURITY_GATES.md +0 -0
  286. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/COCKPIT.md +0 -0
  287. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CONTROL_CENTER.md +0 -0
  288. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/COST_DISCIPLINE.md +0 -0
  289. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CROSS_PLATFORM.md +0 -0
  290. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CUSTOMER_PORTAL.md +0 -0
  291. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/DRIVE_QUEUE.md +0 -0
  292. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/EPHEMERAL_WORKERS.md +0 -0
  293. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/FORGE_MIGRATION.md +0 -0
  294. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/GRAPHIFY_SETUP.md +0 -0
  295. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ISSUE_GUIDANCE.md +0 -0
  296. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/MAC_MINI.md +0 -0
  297. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  298. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/NOTIFIER.md +0 -0
  299. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/OPENCODE_VERIFICATION.md +0 -0
  300. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/OPERATING_GOTCHAS.md +0 -0
  301. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ORACLE_LOOP.md +0 -0
  302. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PHONE_WEBAPP.md +0 -0
  303. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PIPELINE_V2.md +0 -0
  304. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PLATFORM_EVOLUTION.md +0 -0
  305. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/SECOND_BACKEND.md +0 -0
  306. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/STORE_SERVICE.md +0 -0
  307. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  308. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/WEB_CONTROL_CENTER.md +0 -0
  309. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/WSL_WINDOWS_WORKER.md +0 -0
  310. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/README.md +0 -0
  311. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/_tokens.css +0 -0
  312. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/issue-detail.html +0 -0
  313. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-narrow.html +0 -0
  314. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-wide.html +0 -0
  315. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/graphify-out/.gitignore +0 -0
  316. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/install-agent.sh +0 -0
  317. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/pyproject.toml +0 -0
  318. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/audit_review_verdict_overrides.py +0 -0
  319. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  320. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/build-worker-image.sh +0 -0
  321. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/coordinator-machine.py +0 -0
  322. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/epic-down.sh +0 -0
  323. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/epic-up.sh +0 -0
  324. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/preflight.sh +0 -0
  325. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/provision-worker.sh +0 -0
  326. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  327. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  328. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/verify-github-token.sh +0 -0
  329. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/check_gh_argv_containment.py +0 -0
  330. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/codegen.py +0 -0
  331. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/coord-test-runner.sh +0 -0
  332. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/drive-batch.sh +0 -0
  333. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/gen_board_fixture.py +0 -0
  334. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/gen_mock_index.py +0 -0
  335. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/next_release_tag.py +0 -0
  336. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/run_tests_in_populated_home.sh +0 -0
  337. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/run_tests_without_gh.sh +0 -0
  338. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/smoke_437_interactive.py +0 -0
  339. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_878_review_capture.py +0 -0
  340. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_release_published.py +0 -0
  341. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_release_wheel.py +0 -0
  342. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/setup.cfg +0 -0
  343. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/SMOKE_SET.md +0 -0
  344. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/__init__.py +0 -0
  345. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  346. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/contract.md +0 -0
  347. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/manifest.yml +0 -0
  348. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  349. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  350. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  351. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  352. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/conftest.py +0 -0
  353. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/contract.md +0 -0
  354. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/manifest.yml +0 -0
  355. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  356. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  357. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/contract.md +0 -0
  358. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/manifest.yml +0 -0
  359. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  360. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  361. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  362. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  363. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  364. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  365. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  366. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  367. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  368. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  369. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/contract.md +0 -0
  370. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  371. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  372. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/manifest.yml +0 -0
  373. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  374. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/tsconfig.json +0 -0
  375. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  376. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  377. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  378. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/contract.md +0 -0
  379. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  380. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/manifest.yml +0 -0
  381. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  382. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  383. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  384. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  385. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  386. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  387. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  388. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  389. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  390. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  391. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  392. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  393. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/contract.md +0 -0
  394. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/manifest.yml +0 -0
  395. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  396. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  397. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  398. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  399. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  400. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  401. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/conftest.py +0 -0
  402. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-basic.json +0 -0
  403. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  404. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  405. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  406. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  407. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/all_pass.json +0 -0
  408. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  409. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/mixed_fail.json +0 -0
  410. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  411. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  412. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/skip.json +0 -0
  413. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/truncated.json +0 -0
  414. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  415. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  416. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  417. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  418. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  419. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  420. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  421. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  422. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_acceptance.py +0 -0
  423. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_acceptance_drivers.py +0 -0
  424. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent.py +0 -0
  425. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_api_error.py +0 -0
  426. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_app.py +0 -0
  427. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_branch_base.py +0 -0
  428. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_branch_capture.py +0 -0
  429. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_config_free_1712.py +0 -0
  430. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_deploy_units_endpoint.py +0 -0
  431. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_dirty_worktree.py +0 -0
  432. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  433. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_graph_self_heal.py +0 -0
  434. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_health_h3.py +0 -0
  435. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_idle_restart.py +0 -0
  436. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_push_failure.py +0 -0
  437. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_reap.py +0 -0
  438. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_repos_and_pull.py +0 -0
  439. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_restart_services_endpoint.py +0 -0
  440. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_skills_self_heal.py +0 -0
  441. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_startup_diagnostics.py +0 -0
  442. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_update.py +0 -0
  443. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_update_bluegreen.py +0 -0
  444. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_usage_limit.py +0 -0
  445. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_zero_commit.py +0 -0
  446. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ambient_home_isolation.py +0 -0
  447. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approve_reject_plan.py +0 -0
  448. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approve_usage_gate.py +0 -0
  449. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approved_work_2532.py +0 -0
  450. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_assignment_already_recorded_daemon.py +0 -0
  451. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_log.py +0 -0
  452. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_outcome.py +0 -0
  453. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_query.py +0 -0
  454. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_auto_loop.py +0 -0
  455. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_auto_release_publish_2035.py +0 -0
  456. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_base_checkout_restore.py +0 -0
  457. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_block_log.py +0 -0
  458. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_cap_762.py +0 -0
  459. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_fixture.py +0 -0
  460. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_read_path.py +0 -0
  461. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_service.py +0 -0
  462. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_state.py +0 -0
  463. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_wire.py +0 -0
  464. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_brain.py +0 -0
  465. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_branch_model.py +0 -0
  466. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_bug_intake.py +0 -0
  467. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_build_worker_image_env_update.py +0 -0
  468. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cargo_cache.py +0 -0
  469. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_check_gh_argv_containment.py +0 -0
  470. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_acceptance_gate_1950.py +0 -0
  471. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_fix.py +0 -0
  472. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_gitlab.py +0 -0
  473. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_parity_2091.py +0 -0
  474. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_store.py +0 -0
  475. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_claim.py +0 -0
  476. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_acceptance.py +0 -0
  477. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign.py +0 -0
  478. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  479. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_remote.py +0 -0
  480. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_provider.py +0 -0
  481. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  482. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_audit.py +0 -0
  483. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_chat_continue.py +0 -0
  484. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_decide.py +0 -0
  485. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_config_provenance.py +0 -0
  486. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_forge_availability.py +0 -0
  487. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_graph.py +0 -0
  488. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_self.py +0 -0
  489. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor.py +0 -0
  490. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_free_1801.py +0 -0
  491. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  492. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_drive.py +0 -0
  493. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_issue_create_label.py +0 -0
  499. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_issue_reopen.py +0 -0
  500. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_pull_artifact.py +0 -0
  515. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_queue.py +0 -0
  516. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_reattach_sessions.py +0 -0
  517. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_refine_board.py +0 -0
  518. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_preflight.py +0 -0
  519. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_propagate.py +0 -0
  520. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_window.py +0 -0
  521. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_repo_2220.py +0 -0
  522. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_merge_queue.py +0 -0
  526. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_provider.py +0 -0
  527. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_review_finalizing.py +0 -0
  528. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_test_failed_tag.py +0 -0
  529. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_usage_limit.py +0 -0
  530. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_sync_comments_873.py +0 -0
  531. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_test_plan.py +0 -0
  532. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_track.py +0 -0
  533. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_tui_update.py +0 -0
  534. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_wait.py +0 -0
  535. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_client_base_install.py +0 -0
  536. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_comments.py +0 -0
  537. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_completion_summary.py +0 -0
  538. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config.py +0 -0
  539. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_acceptance.py +0 -0
  540. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_audit.py +0 -0
  541. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_pricing.py +0 -0
  542. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  543. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_usage_gate.py +0 -0
  544. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_confirm_test.py +0 -0
  545. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_conflict_fix.py +0 -0
  546. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_conflict_fix_semantic.py +0 -0
  547. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test.py +0 -0
  548. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_baseline.py +0 -0
  549. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_populated_home.py +0 -0
  550. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_routing.py +0 -0
  551. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_toolchain.py +0 -0
  552. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard.py +0 -0
  556. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_fixture.py +0 -0
  557. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_terminal.py +0 -0
  558. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_terminal_live.py +0 -0
  559. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_db.py +0 -0
  560. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dead_end.py +0 -0
  561. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_db_backup.py +0 -0
  562. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_dist.py +0 -0
  563. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_rollback.py +0 -0
  564. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_drive_queue_unit.py +0 -0
  565. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_manifest.py +0 -0
  566. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_units_lane.py +0 -0
  567. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_web_unit.py +0 -0
  568. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deps.py +0 -0
  569. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_diagnose.py +0 -0
  570. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dispatch.py +0 -0
  571. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dispatch_target_validation.py +0 -0
  572. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dist_name.py +0 -0
  573. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_state.py +0 -0
  575. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_tmux.py +0 -0
  576. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_capability_detection.py +0 -0
  577. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  578. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_image_provenance.py +0 -0
  579. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_errors.py +0 -0
  580. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_events.py +0 -0
  581. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_failure_class.py +0 -0
  582. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_filelock.py +0 -0
  583. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  584. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fix_of_force_override.py +0 -0
  585. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_config_health.py +0 -0
  586. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_health_probes.py +0 -0
  587. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_health_snapshot.py +0 -0
  588. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_forge_availability.py +0 -0
  589. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_freshness.py +0 -0
  590. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_a.py +0 -0
  591. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_b.py +0 -0
  592. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_snapshot_staleness.py +0 -0
  593. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gates.py +0 -0
  594. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  595. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gen_mock_index.py +0 -0
  596. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_generated_types_fixture.py +0 -0
  597. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_github_ops.py +0 -0
  598. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_goal.py +0 -0
  599. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_graph_health.py +0 -0
  600. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_graph_selfheal_absent_2237.py +0 -0
  601. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_handoff.py +0 -0
  602. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_checks.py +0 -0
  603. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_cli.py +0 -0
  604. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_cli_graph.py +0 -0
  605. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_config.py +0 -0
  606. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_context.py +0 -0
  607. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_coord_web_ci_pin.py +0 -0
  608. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_deploy_lane_facts.py +0 -0
  609. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_incident_regression.py +0 -0
  610. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_pypi.py +0 -0
  611. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_registry.py +0 -0
  612. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_timer_active.py +0 -0
  613. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_toolchain.py +0 -0
  614. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_unit_drift.py +0 -0
  615. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_unit_enablement.py +0 -0
  616. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_hooks.py +0 -0
  617. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_human_attended_437.py +0 -0
  618. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_init.py +0 -0
  619. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_integration.py +0 -0
  620. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_briefing_echo.py +0 -0
  621. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_prefill_state.py +0 -0
  622. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_session_relaunch.py +0 -0
  623. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_test_verdict_backstop.py +0 -0
  624. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_token_attribution.py +0 -0
  625. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_worktree.py +0 -0
  626. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_issue_store_seam.py +0 -0
  627. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_liveness_auditor.py +0 -0
  628. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_liveness_notify.py +0 -0
  629. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_machine_pause.py +0 -0
  630. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_merge_queue.py +0 -0
  631. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_merge_verify.py +0 -0
  632. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_chat.py +0 -0
  633. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_dispatch.py +0 -0
  634. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_gate.py +0 -0
  635. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_order.py +0 -0
  636. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_seam.py +0 -0
  637. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_mock_author.py +0 -0
  638. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_model_tiering.py +0 -0
  639. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_models.py +0 -0
  640. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_models_config_labels.py +0 -0
  641. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_needs_attention.py +0 -0
  642. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_network.py +0 -0
  643. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_new_issue_chat.py +0 -0
  644. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_next_release_tag.py +0 -0
  645. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_node_shim.py +0 -0
  646. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_baseline.py +0 -0
  647. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_cli.py +0 -0
  648. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_collect.py +0 -0
  649. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_config.py +0 -0
  650. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_drive_seam.py +0 -0
  651. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_isolation.py +0 -0
  652. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_predicate.py +0 -0
  653. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_quiet_hours.py +0 -0
  654. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_service.py +0 -0
  655. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notify.py +0 -0
  656. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notify_drain.py +0 -0
  657. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_openapi.py +0 -0
  658. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_operational_defaults.py +0 -0
  659. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_overlap_fence.py +0 -0
  660. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_overlap_predict.py +0 -0
  661. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_packaged_deploy_units.py +0 -0
  662. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_parentage.py +0 -0
  663. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_paste_landed.py +0 -0
  664. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_pipeline.py +0 -0
  665. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_approve_plan_command.py +0 -0
  666. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_pr_command.py +0 -0
  667. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_review_command.py +0 -0
  668. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_only.py +0 -0
  669. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_parser.py +0 -0
  670. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_platform_paths.py +0 -0
  671. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_bridge.py +0 -0
  672. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_config.py +0 -0
  673. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_store.py +0 -0
  674. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_sync.py +0 -0
  675. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_pr_body_lint.py +0 -0
  676. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_prereqs.py +0 -0
  677. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_production_db_guard.py +0 -0
  678. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_progress.py +0 -0
  679. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_provider_seam.py +0 -0
  680. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers.py +0 -0
  681. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers_config_labels.py +0 -0
  682. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers_pty.py +0 -0
  683. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_quiet_hours.py +0 -0
  684. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_quiet_hours_store_2146.py +0 -0
  685. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reap_merged_sessions.py +0 -0
  686. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reap_stale_interactive_tick.py +0 -0
  687. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile.py +0 -0
  688. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_branch.py +0 -0
  689. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_completions.py +0 -0
  690. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_merges.py +0 -0
  691. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_no_agent_record.py +0 -0
  692. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_tick.py +0 -0
  693. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_usage_limit_done.py +0 -0
  694. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_refine_chat.py +0 -0
  695. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_2101.py +0 -0
  696. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  697. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_deadlock_2240.py +0 -0
  698. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_stuck_2490.py +0 -0
  699. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_propagate.py +0 -0
  700. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_unified_1242.py +0 -0
  701. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_verify.py +0 -0
  702. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_window.py +0 -0
  703. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_remote_auto_prune.py +0 -0
  704. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_remote_interactive_reaper.py +0 -0
  705. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_edit_2220.py +0 -0
  706. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_graph_fleet_2237.py +0 -0
  707. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_onboard_2220.py +0 -0
  708. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_report_result_push.py +0 -0
  709. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reports.py +0 -0
  710. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry.py +0 -0
  711. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry_advisory_1606.py +0 -0
  712. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry_type_1636.py +0 -0
  713. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_revalidate.py +0 -0
  714. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review.py +0 -0
  715. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_end_review_without_verdict.py +0 -0
  716. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_parse_failure_diagnostic.py +0 -0
  717. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_reaffirm.py +0 -0
  718. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_state.py +0 -0
  719. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_backstop.py +0 -0
  720. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_override_audit.py +0 -0
  721. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_relay.py +0 -0
  722. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_zero_commits.py +0 -0
  723. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_scoped_review_wiring.py +0 -0
  724. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_scorecard.py +0 -0
  725. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_self_health.py +0 -0
  726. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_serve.py +0 -0
  727. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_serve_app_board_trim.py +0 -0
  728. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_session.py +0 -0
  729. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_slice_issue_attribution.py +0 -0
  730. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke.py +0 -0
  731. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke_live_checkout_restore.py +0 -0
  732. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke_workflow.py +0 -0
  733. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_spend_ceiling.py +0 -0
  734. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_spend_ceiling_coordinator.py +0 -0
  735. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_split.py +0 -0
  736. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_split_work.py +0 -0
  737. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stage_projection.py +0 -0
  738. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stalled_pipeline.py +0 -0
  739. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_state.py +0 -0
  740. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_state_review_findings_daemon.py +0 -0
  741. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_status_fleet_footer.py +0 -0
  742. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stop_1567.py +0 -0
  743. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stuck.py +0 -0
  744. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_terminal_command.py +0 -0
  745. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_author.py +0 -0
  746. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_chat.py +0 -0
  747. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_orchestrator.py +0 -0
  748. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_report.py +0 -0
  749. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_verdict_parsing.py +0 -0
  750. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_verdict_transcript_floor.py +0 -0
  751. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_board_audit.py +0 -0
  752. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_config_load_1080.py +0 -0
  753. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_daemon_routing_906.py +0 -0
  754. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_tmux_host.py +0 -0
  755. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_tmux_session.py +0 -0
  756. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_transcript_floor.py +0 -0
  757. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage.py +0 -0
  758. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage_limits.py +0 -0
  759. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage_rollup.py +0 -0
  760. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_venv_live_install_2121.py +0 -0
  761. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_version_single_source.py +0 -0
  762. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_watch.py +0 -0
  763. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  764. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_events.py +0 -0
  765. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_image_pin_sync.py +0 -0
  766. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_safety.py +0 -0
  767. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_test_scoping.py +0 -0
  768. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worktree.py +0 -0
  769. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  770. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/Cargo.lock +0 -0
  771. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/Cargo.toml +0 -0
  772. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/cargo-config-local-quadraui.toml.example +0 -0
  773. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/approved.rs +0 -0
  774. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/audit.rs +0 -0
  775. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/chat.rs +0 -0
  776. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/data.rs +0 -0
  777. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/dialogs.rs +0 -0
  778. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/doc_tabs.rs +0 -0
  779. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/drive.rs +0 -0
  780. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/drive_queue.rs +0 -0
  781. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/escalation.rs +0 -0
  782. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/events.rs +0 -0
  783. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fixtures.rs +0 -0
  784. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_health.rs +0 -0
  785. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_sessions.rs +0 -0
  786. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_terminals.rs +0 -0
  787. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/format.rs +0 -0
  788. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/milestone_dag.rs +0 -0
  789. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/mod.rs +0 -0
  790. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/msv.rs +0 -0
  791. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/pipeline.rs +0 -0
  792. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/plans.rs +0 -0
  793. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/render.rs +0 -0
  794. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/reports.rs +0 -0
  795. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/sessions.rs +0 -0
  796. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/settings_ui.rs +0 -0
  797. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/sidebar.rs +0 -0
  798. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/terminal.rs +0 -0
  799. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/tests.rs +0 -0
  800. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/types.rs +0 -0
  801. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/workspace.rs +0 -0
  802. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/bin/gtk.rs +0 -0
  803. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/commands.rs +0 -0
  804. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/lib.rs +0 -0
  805. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/main.rs +0 -0
  806. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/settings.rs +0 -0
  807. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/tests/acceptance.rs +0 -0
  808. {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/tests/cli.rs +0 -0
  809. {code_coordinator-0.5.221 → 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.221
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.221
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.221",
2
+ "tag": "0.5.222",
3
3
  "distance": 0,
4
- "node": "g27baf026f5785418120546b37450a2213ff910ab",
4
+ "node": "g0a0c97af031f26980c629e83e6ab895bfca5a393",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -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
@@ -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):
@@ -2323,6 +2323,96 @@ def test_plan_tick_does_not_rewrite_a_still_pending_reason_as_unreadable():
2323
2323
  assert not any(r.key == entry_key(REPO, 2347) for r in plan.reconciles)
2324
2324
 
2325
2325
 
2326
+ # ── #2556: a terminal (not just pending) live CI reading must resume a
2327
+ # `parked` entry, and must do so even at capacity ──────────────────────────
2328
+ #
2329
+ # The gap #2347 left behind: `live_ci_gate[key] = True` means only "the fresh
2330
+ # read isn't PLAN_READY" — true both while checks are still genuinely running
2331
+ # AND once they've reported a confirmed FAILURE. Before this, both shapes hit
2332
+ # the same "still shut ⇒ stay parked" branch, and only the narrower
2333
+ # `CI_UNREADABLE_PREFIX` shape got its `last_reason` rewritten. A completed,
2334
+ # failing run was therefore indistinguishable from a slow one — coord-portal
2335
+ # #131 sat parked 1h40m past its watched check reporting FAILURE, with the
2336
+ # `last_reason` still reading "CI running: ..." the whole time.
2337
+
2338
+
2339
+ def test_a_parked_entry_resumes_on_a_confirmed_ci_failure():
2340
+ """The core regression: a fresh, terminal ("CI failed: ...") live reading
2341
+ must resume the entry from `parked`, not re-confirm the park — so it
2342
+ falls into the normal `waiting`/launch path and a relaunched `coord
2343
+ drive` can route it through the existing checks_failed handling."""
2344
+ entries = [
2345
+ entry(
2346
+ 2556, position=3, state="parked", attempts=0,
2347
+ last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
2348
+ )
2349
+ ]
2350
+ live_reason = "CI failed: e2e smoke (playwright) (FAILURE)"
2351
+ plan = plan_tick(
2352
+ entries, board(), capacity=1, now=NOW,
2353
+ live_ci_gate={entry_key(REPO, 2556): True},
2354
+ live_ci_gate_reason={entry_key(REPO, 2556): live_reason},
2355
+ )
2356
+ resumed = [r for r in plan.reconciles if r.key == entry_key(REPO, 2556)]
2357
+ assert [r.outcome for r in resumed] == ["resumed"]
2358
+ assert resumed[0].updates["state"] == STATE_WAITING
2359
+ # No attempt spent — a fresh GitHub read is not a failed launch attempt.
2360
+ assert resumed[0].updates["attempts"] == 0
2361
+ assert "CI failed" in resumed[0].updates["last_reason"]
2362
+ # Falls straight into this SAME tick's launch selection.
2363
+ assert plan.launch is not None and plan.launch.issue == 2556
2364
+
2365
+
2366
+ def test_a_parked_entry_resumes_on_confirmed_ci_failure_even_at_capacity():
2367
+ """Acceptance: this re-evaluation happens even when the fleet is fully
2368
+ occupied — #1891 step 1b runs before the capacity check, not after, so a
2369
+ full fleet must never freeze a parked row that has real evidence to act
2370
+ on."""
2371
+ running = running_since(1762, 5.0)
2372
+ parked = entry(
2373
+ 2556, position=3, state="parked", attempts=0,
2374
+ last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
2375
+ )
2376
+ live_reason = "CI failed: e2e smoke (playwright) (FAILURE)"
2377
+ plan = plan_tick(
2378
+ [running, parked],
2379
+ board(sessions=(1762,)),
2380
+ capacity=1, # the one slot is already occupied by `running`
2381
+ now=NOW,
2382
+ live_ci_gate={entry_key(REPO, 2556): True},
2383
+ live_ci_gate_reason={entry_key(REPO, 2556): live_reason},
2384
+ )
2385
+ assert plan.occupied == 1
2386
+ assert plan.free_slots == 0
2387
+ resumed = [r for r in plan.reconciles if r.key == entry_key(REPO, 2556)]
2388
+ assert [r.outcome for r in resumed] == ["resumed"]
2389
+ assert resumed[0].updates["state"] == STATE_WAITING
2390
+ # No free slot, so nothing launches this tick — but the row itself has
2391
+ # left `parked`, which is the whole point: it no longer wedges silently.
2392
+ assert plan.launch is None
2393
+
2394
+
2395
+ def test_a_parked_entry_still_stays_parked_while_genuinely_pending():
2396
+ """Baseline unchanged: a fresh reading that is STILL `CI_PENDING_PREFIX`
2397
+ shaped (checks exist, still running) must not be mistaken for a terminal
2398
+ read — this is the ordinary #1891/#2182 "still shut" case."""
2399
+ entries = [
2400
+ entry(
2401
+ 2556, position=3, state="parked", attempts=0,
2402
+ last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
2403
+ )
2404
+ ]
2405
+ plan = plan_tick(
2406
+ entries, board(), capacity=1, now=NOW,
2407
+ live_ci_gate={entry_key(REPO, 2556): True},
2408
+ live_ci_gate_reason={
2409
+ entry_key(REPO, 2556): "CI running: e2e smoke (playwright)"
2410
+ },
2411
+ )
2412
+ assert not any(r.key == entry_key(REPO, 2556) for r in plan.reconciles)
2413
+ assert plan.launch is None
2414
+
2415
+
2326
2416
  # ── #2158: a park that cannot refresh itself must age out ──────────────────
2327
2417
 
2328
2418