code-coordinator 0.5.221__tar.gz → 0.5.223__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 (811) hide show
  1. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/drive_queue.py +14 -7
  7. {code_coordinator-0.5.221 → code_coordinator-0.5.223/coord}/deploy/coord-notify.service +16 -0
  8. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/drive_queue.py +83 -20
  9. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/merge_queue.py +35 -0
  10. {code_coordinator-0.5.221/coord → code_coordinator-0.5.223}/deploy/coord-notify.service +16 -0
  11. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_drive_queue.py +48 -0
  12. code_coordinator-0.5.223/tests/test_deploy_notify_unit.py +119 -0
  13. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_drive.py +37 -17
  14. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_drive_queue.py +90 -0
  15. code_coordinator-0.5.223/tests/test_packaged_deploy_units.py +179 -0
  16. code_coordinator-0.5.221/tests/test_packaged_deploy_units.py +0 -89
  17. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.claude/commands/board.md +0 -0
  18. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.claude/commands/complete-session.md +0 -0
  19. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.claude/commands/coordinator.md +0 -0
  20. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.githooks/_lib.sh +0 -0
  21. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.githooks/post-checkout +0 -0
  22. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.githooks/post-commit +0 -0
  23. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.githooks/post-merge +0 -0
  24. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/coord-ci-acceptance.yml +0 -0
  26. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/workflows/auto-release.yml +0 -0
  27. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/workflows/cargo-test.yml +0 -0
  28. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/workflows/release-tui.yml +0 -0
  30. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.github/workflows/test.yml +0 -0
  31. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/.gitignore +0 -0
  32. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/CLAUDE.md +0 -0
  33. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/GOAL.md +0 -0
  34. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/LICENSE +0 -0
  35. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/MANIFEST.in +0 -0
  36. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/README.md +0 -0
  37. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agent.py +0 -0
  46. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/approved_work.py +0 -0
  52. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/audit.py +0 -0
  53. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/auto_loop.py +0 -0
  54. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/board_bool_guard.py +0 -0
  56. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/board_wire.py +0 -0
  58. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/brain.py +0 -0
  59. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/branch_model.py +0 -0
  60. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/bug_intake.py +0 -0
  61. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/cargo_cache.py +0 -0
  62. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/ci_fix.py +0 -0
  63. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/ci_github.py +0 -0
  64. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/ci_gitlab.py +0 -0
  65. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/ci_store.py +0 -0
  66. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/claim.py +0 -0
  67. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/cli.py +0 -0
  68. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/client.py +0 -0
  69. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/__init__.py +0 -0
  70. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/_common.py +0 -0
  71. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/acceptance.py +0 -0
  72. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/agent_ops.py +0 -0
  73. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/audit.py +0 -0
  74. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/dispatch.py +0 -0
  76. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/dispatch_workers.py +0 -0
  77. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/config.py +0 -0
  100. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/config_reload.py +0 -0
  101. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/confirm_test.py +0 -0
  102. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/conflict_fix.py +0 -0
  103. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dao.py +0 -0
  104. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dashboard/__init__.py +0 -0
  105. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dashboard/fixture.py +0 -0
  106. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dashboard/index.html +0 -0
  107. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dashboard/server.py +0 -0
  108. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dashboard/terminal.py +0 -0
  109. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/db.py +0 -0
  110. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dead_end.py +0 -0
  111. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/README.md +0 -0
  112. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-agent.service +0 -0
  113. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-db-backup.service +0 -0
  114. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-db-backup.sh +0 -0
  115. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-db-backup.timer +0 -0
  116. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-drive-queue.service +0 -0
  117. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-drive-queue.timer +0 -0
  118. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-notify.timer +0 -0
  119. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-release-propagate.service +0 -0
  120. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-release-propagate.timer +0 -0
  121. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-release-window.service +0 -0
  122. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-release-window.timer +0 -0
  123. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-serve.service +0 -0
  124. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-web-dist-build.service +0 -0
  125. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-web-dist-build.timer +0 -0
  126. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy/coord-web.service +0 -0
  127. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy_manifest.py +0 -0
  128. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deploy_units.py +0 -0
  129. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/deps.py +0 -0
  130. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/diagnose.py +0 -0
  131. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dispatch.py +0 -0
  132. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/dist_name.py +0 -0
  133. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/drive.py +0 -0
  134. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/drive_state.py +0 -0
  135. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/events.py +0 -0
  136. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/failure_class.py +0 -0
  137. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/filelock.py +0 -0
  138. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/fleet_config_health.py +0 -0
  139. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/forge_availability.py +0 -0
  140. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/freshness.py +0 -0
  141. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/gate_a.py +0 -0
  142. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/gate_b.py +0 -0
  143. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/gate_snapshot.py +0 -0
  144. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/gates.py +0 -0
  145. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/github_ops.py +0 -0
  146. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/goal.py +0 -0
  147. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/graph_health.py +0 -0
  148. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/__init__.py +0 -0
  149. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/aggregate.py +0 -0
  150. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/__init__.py +0 -0
  151. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/agent_install.py +0 -0
  152. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/cargo_targets.py +0 -0
  153. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/claude_binary.py +0 -0
  154. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/coord_web_ci_pin.py +0 -0
  155. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/deploy_lane_facts.py +0 -0
  156. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/disk.py +0 -0
  157. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/fleet_board.py +0 -0
  158. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  159. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/fleet_phantom.py +0 -0
  160. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/fleet_unit_drift.py +0 -0
  161. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/graph.py +0 -0
  162. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/graphify_cli.py +0 -0
  163. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/index_lock.py +0 -0
  164. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/plan_usage.py +0 -0
  165. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/repo_state.py +0 -0
  166. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/spawned_coord.py +0 -0
  167. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/timer_active.py +0 -0
  168. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/toolchain.py +0 -0
  169. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/unit_drift.py +0 -0
  170. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/unit_enablement.py +0 -0
  171. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/checks/worktrees.py +0 -0
  172. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/cli.py +0 -0
  173. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/context.py +0 -0
  174. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/fleet_snapshot.py +0 -0
  175. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/models.py +0 -0
  176. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/pypi.py +0 -0
  177. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/registry.py +0 -0
  178. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/render.py +0 -0
  179. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/health/units.py +0 -0
  180. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/hooks.py +0 -0
  181. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/housekeeping.py +0 -0
  182. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/interactive.py +0 -0
  183. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/issue_store.py +0 -0
  184. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/liveness_auditor.py +0 -0
  185. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/machine_pause.py +0 -0
  186. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/milestone_chat.py +0 -0
  187. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/milestone_dispatch.py +0 -0
  188. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/milestone_gate.py +0 -0
  189. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/milestone_order.py +0 -0
  190. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/mock_author.py +0 -0
  191. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/models.py +0 -0
  192. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/network.py +0 -0
  193. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/new_issue_chat.py +0 -0
  194. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/__init__.py +0 -0
  195. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/baseline.py +0 -0
  196. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/cli.py +0 -0
  197. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/collect.py +0 -0
  198. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/digest.py +0 -0
  199. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/models.py +0 -0
  200. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/predicate.py +0 -0
  201. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/service.py +0 -0
  202. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/store.py +0 -0
  203. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notifier/transport.py +0 -0
  204. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/notify.py +0 -0
  205. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/openapi.py +0 -0
  206. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/overlap_fence.py +0 -0
  207. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/overlap_predict.py +0 -0
  208. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/parentage.py +0 -0
  209. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/parentage_github.py +0 -0
  210. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/pipeline.py +0 -0
  211. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/plan_parser.py +0 -0
  212. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/plans.py +0 -0
  213. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/platform_paths.py +0 -0
  214. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/portal_bridge.py +0 -0
  215. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/portal_store.py +0 -0
  216. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/portal_sync.py +0 -0
  217. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/pr_body_lint.py +0 -0
  218. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/prereqs.py +0 -0
  219. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/progress.py +0 -0
  220. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/providers/__init__.py +0 -0
  221. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/providers/base.py +0 -0
  222. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/providers/claude.py +0 -0
  223. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/providers/claude_pty.py +0 -0
  224. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/providers/opencode.py +0 -0
  225. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/queue_diagnose.py +0 -0
  226. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/reconcile.py +0 -0
  227. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/reconcile_tick.py +0 -0
  228. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/refine_chat.py +0 -0
  229. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/release_cordon.py +0 -0
  230. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/release_propagate.py +0 -0
  231. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/release_verify.py +0 -0
  232. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/release_window.py +0 -0
  233. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/repo_edit.py +0 -0
  234. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/repo_onboard.py +0 -0
  235. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/reports.py +0 -0
  236. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/revalidate.py +0 -0
  237. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/review.py +0 -0
  238. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/scorecard.py +0 -0
  239. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/self_health.py +0 -0
  240. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/serve_app.py +0 -0
  241. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  242. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  243. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  244. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  245. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  246. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/portal-followup/SKILL.md +0 -0
  247. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  248. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  249. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/skills/update-issue/SKILL.md +0 -0
  250. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/smoke.py +0 -0
  251. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/spend_ceiling.py +0 -0
  252. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/split_work.py +0 -0
  253. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/stage_projection.py +0 -0
  254. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/state.py +0 -0
  255. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/test_author.py +0 -0
  256. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/test_chat.py +0 -0
  257. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/test_orchestrator.py +0 -0
  258. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/test_report.py +0 -0
  259. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/tui_release.py +0 -0
  260. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/usage.py +0 -0
  261. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/usage_limits.py +0 -0
  262. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/usage_rollup.py +0 -0
  263. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coord/worker_events.py +0 -0
  264. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/coordinator.example.yml +0 -0
  265. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-agent.service +0 -0
  266. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-db-backup.service +0 -0
  267. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-db-backup.sh +0 -0
  268. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-db-backup.timer +0 -0
  269. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-drive-queue.service +0 -0
  270. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-drive-queue.timer +0 -0
  271. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-notify.timer +0 -0
  272. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-release-propagate.service +0 -0
  273. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-release-propagate.timer +0 -0
  274. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-release-window.service +0 -0
  275. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-release-window.timer +0 -0
  276. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-serve.service +0 -0
  277. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-web-dist-build.service +0 -0
  278. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-web-dist-build.sh +0 -0
  279. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-web-dist-build.timer +0 -0
  280. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-web-rollback.sh +0 -0
  281. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/coord-web.service +0 -0
  282. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/deploy/node-shim.sh +0 -0
  283. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  284. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ADR_COORD_WEB_CI.md +0 -0
  285. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ADR_COORD_WEB_DIST.md +0 -0
  286. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/AGENT_OPERATIONS.md +0 -0
  287. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ARCHITECTURE.md +0 -0
  288. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ARCH_SECURITY_GATES.md +0 -0
  289. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/COCKPIT.md +0 -0
  290. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/CONTROL_CENTER.md +0 -0
  291. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/COST_DISCIPLINE.md +0 -0
  292. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/CROSS_PLATFORM.md +0 -0
  293. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/CUSTOMER_PORTAL.md +0 -0
  294. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/DRIVE_QUEUE.md +0 -0
  295. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/EPHEMERAL_WORKERS.md +0 -0
  296. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/FORGE_MIGRATION.md +0 -0
  297. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/GRAPHIFY_SETUP.md +0 -0
  298. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ISSUE_GUIDANCE.md +0 -0
  299. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/MAC_MINI.md +0 -0
  300. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  301. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/NOTIFIER.md +0 -0
  302. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/OPENCODE_VERIFICATION.md +0 -0
  303. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/OPERATING_GOTCHAS.md +0 -0
  304. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/ORACLE_LOOP.md +0 -0
  305. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/PHONE_WEBAPP.md +0 -0
  306. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/PIPELINE_V2.md +0 -0
  307. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/PLATFORM_EVOLUTION.md +0 -0
  308. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/SECOND_BACKEND.md +0 -0
  309. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/STORE_SERVICE.md +0 -0
  310. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  311. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/WEB_CONTROL_CENTER.md +0 -0
  312. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/WSL_WINDOWS_WORKER.md +0 -0
  313. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/mocks/web/README.md +0 -0
  314. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/mocks/web/_tokens.css +0 -0
  315. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/mocks/web/issue-detail.html +0 -0
  316. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/mocks/web/pipeline-narrow.html +0 -0
  317. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/docs/mocks/web/pipeline-wide.html +0 -0
  318. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/graphify-out/.gitignore +0 -0
  319. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/install-agent.sh +0 -0
  320. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/pyproject.toml +0 -0
  321. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/audit_review_verdict_overrides.py +0 -0
  322. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  323. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/build-worker-image.sh +0 -0
  324. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/coordinator-machine.py +0 -0
  325. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/epic-down.sh +0 -0
  326. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/epic-up.sh +0 -0
  327. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/preflight.sh +0 -0
  328. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/provision-worker.sh +0 -0
  329. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  330. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  331. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/azure-workers/verify-github-token.sh +0 -0
  332. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/check_gh_argv_containment.py +0 -0
  333. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/codegen.py +0 -0
  334. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/coord-test-runner.sh +0 -0
  335. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/drive-batch.sh +0 -0
  336. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/gen_board_fixture.py +0 -0
  337. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/gen_mock_index.py +0 -0
  338. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/next_release_tag.py +0 -0
  339. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/run_tests_in_populated_home.sh +0 -0
  340. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/run_tests_without_gh.sh +0 -0
  341. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/smoke_437_interactive.py +0 -0
  342. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/verify_878_review_capture.py +0 -0
  343. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/verify_release_published.py +0 -0
  344. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/scripts/verify_release_wheel.py +0 -0
  345. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/setup.cfg +0 -0
  346. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/SMOKE_SET.md +0 -0
  347. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/__init__.py +0 -0
  348. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  349. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/contract.md +0 -0
  350. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/manifest.yml +0 -0
  351. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  352. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  353. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  354. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  355. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-37/conftest.py +0 -0
  356. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-37/contract.md +0 -0
  357. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-37/manifest.yml +0 -0
  358. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  359. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  360. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/contract.md +0 -0
  361. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/manifest.yml +0 -0
  362. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  363. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  364. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  365. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  366. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  367. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  368. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  369. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  370. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  371. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  372. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/contract.md +0 -0
  373. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  374. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  375. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/manifest.yml +0 -0
  376. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  377. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-51/tsconfig.json +0 -0
  378. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  379. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  380. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  381. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/contract.md +0 -0
  382. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  383. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/manifest.yml +0 -0
  384. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  385. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  386. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  387. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  388. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  389. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  390. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  391. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  392. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  393. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  394. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  395. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  396. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/contract.md +0 -0
  397. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/manifest.yml +0 -0
  398. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  399. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  400. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  401. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  402. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  403. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  404. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/conftest.py +0 -0
  405. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/board-pipeline-basic.json +0 -0
  406. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  407. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  408. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  409. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  410. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/all_pass.json +0 -0
  411. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  412. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/mixed_fail.json +0 -0
  413. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  414. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  415. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/skip.json +0 -0
  416. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/playwright/truncated.json +0 -0
  417. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  418. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  419. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  420. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  421. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  422. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  423. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  424. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  425. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_acceptance.py +0 -0
  426. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_acceptance_drivers.py +0 -0
  427. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent.py +0 -0
  428. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_api_error.py +0 -0
  429. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_app.py +0 -0
  430. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_branch_base.py +0 -0
  431. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_branch_capture.py +0 -0
  432. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_config_free_1712.py +0 -0
  433. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_deploy_units_endpoint.py +0 -0
  434. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_dirty_worktree.py +0 -0
  435. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  436. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_graph_self_heal.py +0 -0
  437. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_health_h3.py +0 -0
  438. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_idle_restart.py +0 -0
  439. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_push_failure.py +0 -0
  440. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_reap.py +0 -0
  441. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_repos_and_pull.py +0 -0
  442. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_restart_services_endpoint.py +0 -0
  443. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_skills_self_heal.py +0 -0
  444. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_startup_diagnostics.py +0 -0
  445. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_update.py +0 -0
  446. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_update_bluegreen.py +0 -0
  447. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_usage_limit.py +0 -0
  448. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_agent_zero_commit.py +0 -0
  449. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ambient_home_isolation.py +0 -0
  450. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_approve_reject_plan.py +0 -0
  451. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_approve_usage_gate.py +0 -0
  452. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_approved_work_2532.py +0 -0
  453. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_assignment_already_recorded_daemon.py +0 -0
  454. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_audit_log.py +0 -0
  455. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_audit_outcome.py +0 -0
  456. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_audit_query.py +0 -0
  457. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_auto_loop.py +0 -0
  458. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_auto_release_publish_2035.py +0 -0
  459. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_base_checkout_restore.py +0 -0
  460. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_block_log.py +0 -0
  461. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_cap_762.py +0 -0
  462. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_fixture.py +0 -0
  463. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_read_path.py +0 -0
  464. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_service.py +0 -0
  465. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_state.py +0 -0
  466. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_board_wire.py +0 -0
  467. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_brain.py +0 -0
  468. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_branch_model.py +0 -0
  469. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_bug_intake.py +0 -0
  470. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_build_worker_image_env_update.py +0 -0
  471. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cargo_cache.py +0 -0
  472. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_check_gh_argv_containment.py +0 -0
  473. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ci_acceptance_gate_1950.py +0 -0
  474. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ci_fix.py +0 -0
  475. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ci_gitlab.py +0 -0
  476. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ci_parity_2091.py +0 -0
  477. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_ci_store.py +0 -0
  478. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_claim.py +0 -0
  479. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_acceptance.py +0 -0
  480. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_assign.py +0 -0
  481. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  482. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_assign_interactive_remote.py +0 -0
  483. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_assign_provider.py +0 -0
  484. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  485. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_audit.py +0 -0
  486. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_chat_continue.py +0 -0
  487. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_decide.py +0 -0
  488. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_diagnose_config_provenance.py +0 -0
  489. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_diagnose_forge_availability.py +0 -0
  490. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_diagnose_graph.py +0 -0
  491. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_diagnose_self.py +0 -0
  492. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_doctor.py +0 -0
  493. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_doctor_config_free_1801.py +0 -0
  494. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  495. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_drive.py +0 -0
  496. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_escalate.py +0 -0
  497. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_fix_headless_review.py +0 -0
  498. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_gate_a.py +0 -0
  499. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_install_drift.py +0 -0
  500. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_install_skills.py +0 -0
  501. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_issue_create_label.py +0 -0
  502. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_issue_reopen.py +0 -0
  503. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_merge.py +0 -0
  504. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_assign.py +0 -0
  505. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_capture.py +0 -0
  506. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_chat_add_child.py +0 -0
  507. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_dispatch.py +0 -0
  508. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_gate_b.py +0 -0
  509. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_gate_c.py +0 -0
  510. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_order.py +0 -0
  511. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  512. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_milestone_ship.py +0 -0
  513. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_network.py +0 -0
  514. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_new_issue_chat.py +0 -0
  515. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_plans.py +0 -0
  516. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_portal.py +0 -0
  517. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_pull_artifact.py +0 -0
  518. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_queue.py +0 -0
  519. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_reattach_sessions.py +0 -0
  520. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_refine_board.py +0 -0
  521. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_release_preflight.py +0 -0
  522. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_release_propagate.py +0 -0
  523. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_release_window.py +0 -0
  524. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_repo_2220.py +0 -0
  525. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_scorecard.py +0 -0
  526. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_set_review_findings.py +0 -0
  527. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_advisory_terminal.py +0 -0
  528. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_merge_queue.py +0 -0
  529. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_provider.py +0 -0
  530. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_review_finalizing.py +0 -0
  531. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_test_failed_tag.py +0 -0
  532. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_status_usage_limit.py +0 -0
  533. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_sync_comments_873.py +0 -0
  534. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_test_plan.py +0 -0
  535. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_track.py +0 -0
  536. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_tui_update.py +0 -0
  537. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cli_wait.py +0 -0
  538. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_client_base_install.py +0 -0
  539. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_comments.py +0 -0
  540. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_completion_summary.py +0 -0
  541. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config.py +0 -0
  542. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config_acceptance.py +0 -0
  543. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config_audit.py +0 -0
  544. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config_pricing.py +0 -0
  545. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  546. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_config_usage_gate.py +0 -0
  547. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_confirm_test.py +0 -0
  548. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_conflict_fix.py +0 -0
  549. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_conflict_fix_semantic.py +0 -0
  550. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_test.py +0 -0
  551. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_test_runner_baseline.py +0 -0
  552. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_test_runner_populated_home.py +0 -0
  553. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_test_runner_routing.py +0 -0
  554. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_test_runner_toolchain.py +0 -0
  555. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coord_web_sse_restart_live.py +0 -0
  556. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_coordinator_machine.py +0 -0
  557. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_cross_platform_imports.py +0 -0
  558. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dashboard.py +0 -0
  559. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dashboard_fixture.py +0 -0
  560. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dashboard_terminal.py +0 -0
  561. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dashboard_terminal_live.py +0 -0
  562. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_db.py +0 -0
  563. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dead_end.py +0 -0
  564. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_coord_db_backup.py +0 -0
  565. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_coord_web_dist.py +0 -0
  566. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_coord_web_rollback.py +0 -0
  567. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_drive_queue_unit.py +0 -0
  568. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_manifest.py +0 -0
  569. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_units_lane.py +0 -0
  570. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deploy_web_unit.py +0 -0
  571. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_deps.py +0 -0
  572. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_diagnose.py +0 -0
  573. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dispatch.py +0 -0
  574. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dispatch_target_validation.py +0 -0
  575. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_dist_name.py +0 -0
  576. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_done_housekeeping.py +0 -0
  577. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_drive_state.py +0 -0
  578. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_drive_tmux.py +0 -0
  579. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_epic_up_capability_detection.py +0 -0
  580. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  581. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_epic_up_image_provenance.py +0 -0
  582. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_errors.py +0 -0
  583. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_events.py +0 -0
  584. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_failure_class.py +0 -0
  585. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_filelock.py +0 -0
  586. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  587. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_fix_of_force_override.py +0 -0
  588. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_fleet_config_health.py +0 -0
  589. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_fleet_health_probes.py +0 -0
  590. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_fleet_health_snapshot.py +0 -0
  591. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_generated_types_fixture.py +0 -0
  600. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_github_ops.py +0 -0
  601. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_goal.py +0 -0
  602. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_graph_health.py +0 -0
  603. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_graph_selfheal_absent_2237.py +0 -0
  604. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_handoff.py +0 -0
  605. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_checks.py +0 -0
  606. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_cli.py +0 -0
  607. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_cli_graph.py +0 -0
  608. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_config.py +0 -0
  609. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_context.py +0 -0
  610. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_coord_web_ci_pin.py +0 -0
  611. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_deploy_lane_facts.py +0 -0
  612. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_incident_regression.py +0 -0
  613. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_pypi.py +0 -0
  614. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_registry.py +0 -0
  615. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_timer_active.py +0 -0
  616. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_toolchain.py +0 -0
  617. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_unit_drift.py +0 -0
  618. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_health_unit_enablement.py +0 -0
  619. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_hooks.py +0 -0
  620. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_human_attended_437.py +0 -0
  621. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_init.py +0 -0
  622. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_integration.py +0 -0
  623. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_briefing_echo.py +0 -0
  624. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_prefill_state.py +0 -0
  625. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_session_relaunch.py +0 -0
  626. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_test_verdict_backstop.py +0 -0
  627. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_token_attribution.py +0 -0
  628. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_interactive_worktree.py +0 -0
  629. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_issue_store_seam.py +0 -0
  630. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_liveness_auditor.py +0 -0
  631. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_liveness_notify.py +0 -0
  632. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_machine_pause.py +0 -0
  633. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_merge_queue.py +0 -0
  634. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_merge_verify.py +0 -0
  635. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_milestone_chat.py +0 -0
  636. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_milestone_dispatch.py +0 -0
  637. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_milestone_gate.py +0 -0
  638. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_milestone_order.py +0 -0
  639. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_milestone_seam.py +0 -0
  640. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_mock_author.py +0 -0
  641. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_model_tiering.py +0 -0
  642. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_models.py +0 -0
  643. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_models_config_labels.py +0 -0
  644. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_needs_attention.py +0 -0
  645. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_network.py +0 -0
  646. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_new_issue_chat.py +0 -0
  647. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_next_release_tag.py +0 -0
  648. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_node_shim.py +0 -0
  649. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_baseline.py +0 -0
  650. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_cli.py +0 -0
  651. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_collect.py +0 -0
  652. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_config.py +0 -0
  653. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_drive_seam.py +0 -0
  654. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_isolation.py +0 -0
  655. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_predicate.py +0 -0
  656. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_quiet_hours.py +0 -0
  657. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notifier_service.py +0 -0
  658. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notify.py +0 -0
  659. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_notify_drain.py +0 -0
  660. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_openapi.py +0 -0
  661. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_operational_defaults.py +0 -0
  662. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_overlap_fence.py +0 -0
  663. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_overlap_predict.py +0 -0
  664. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_stalled_pipeline.py +0 -0
  741. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_state.py +0 -0
  742. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_state_review_findings_daemon.py +0 -0
  743. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_status_fleet_footer.py +0 -0
  744. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_stop_1567.py +0 -0
  745. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_stuck.py +0 -0
  746. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_terminal_command.py +0 -0
  747. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_author.py +0 -0
  748. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_chat.py +0 -0
  749. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_orchestrator.py +0 -0
  750. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_report.py +0 -0
  751. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_verdict_parsing.py +0 -0
  752. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_test_verdict_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_thin_client_board_audit.py +0 -0
  754. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_thin_client_config_load_1080.py +0 -0
  755. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_thin_client_daemon_routing_906.py +0 -0
  756. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_tmux_host.py +0 -0
  757. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_tmux_session.py +0 -0
  758. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_usage.py +0 -0
  760. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_usage_limits.py +0 -0
  761. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_usage_rollup.py +0 -0
  762. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_venv_live_install_2121.py +0 -0
  763. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_version_single_source.py +0 -0
  764. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_watch.py +0 -0
  765. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  766. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worker_events.py +0 -0
  767. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worker_image_pin_sync.py +0 -0
  768. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worker_safety.py +0 -0
  769. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worker_test_scoping.py +0 -0
  770. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worktree.py +0 -0
  771. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  772. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/Cargo.lock +0 -0
  773. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/Cargo.toml +0 -0
  774. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/cargo-config-local-quadraui.toml.example +0 -0
  775. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/approved.rs +0 -0
  776. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/audit.rs +0 -0
  777. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/chat.rs +0 -0
  778. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/data.rs +0 -0
  779. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/dialogs.rs +0 -0
  780. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/doc_tabs.rs +0 -0
  781. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/drive.rs +0 -0
  782. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/drive_queue.rs +0 -0
  783. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/escalation.rs +0 -0
  784. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/events.rs +0 -0
  785. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/fixtures.rs +0 -0
  786. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/fleet_health.rs +0 -0
  787. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/fleet_sessions.rs +0 -0
  788. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/fleet_terminals.rs +0 -0
  789. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/format.rs +0 -0
  790. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/milestone_dag.rs +0 -0
  791. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/mod.rs +0 -0
  792. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/msv.rs +0 -0
  793. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/pipeline.rs +0 -0
  794. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/plans.rs +0 -0
  795. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/render.rs +0 -0
  796. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/reports.rs +0 -0
  797. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/sessions.rs +0 -0
  798. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/settings_ui.rs +0 -0
  799. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/sidebar.rs +0 -0
  800. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/tests.rs +0 -0
  802. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/types.rs +0 -0
  803. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/app/workspace.rs +0 -0
  804. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/bin/gtk.rs +0 -0
  805. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/commands.rs +0 -0
  806. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/lib.rs +0 -0
  807. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/main.rs +0 -0
  808. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/src/settings.rs +0 -0
  809. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/tests/acceptance.rs +0 -0
  810. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/tui/tests/cli.rs +0 -0
  811. {code_coordinator-0.5.221 → code_coordinator-0.5.223}/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.223
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.223
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
@@ -483,6 +483,7 @@ tests/test_deploy_coord_web_dist.py
483
483
  tests/test_deploy_coord_web_rollback.py
484
484
  tests/test_deploy_drive_queue_unit.py
485
485
  tests/test_deploy_manifest.py
486
+ tests/test_deploy_notify_unit.py
486
487
  tests/test_deploy_units_lane.py
487
488
  tests/test_deploy_web_unit.py
488
489
  tests/test_deps.py
@@ -553,6 +553,7 @@
553
553
  "tests/test_deploy_coord_web_rollback.py",
554
554
  "tests/test_deploy_drive_queue_unit.py",
555
555
  "tests/test_deploy_manifest.py",
556
+ "tests/test_deploy_notify_unit.py",
556
557
  "tests/test_deploy_units_lane.py",
557
558
  "tests/test_deploy_web_unit.py",
558
559
  "tests/test_deps.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.221",
2
+ "tag": "0.5.223",
3
3
  "distance": 0,
4
- "node": "g27baf026f5785418120546b37450a2213ff910ab",
4
+ "node": "g744223e42f4d266aef3954a9aaed09de74827289",
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``
@@ -48,6 +48,22 @@ Wants=network-online.target
48
48
 
49
49
  [Service]
50
50
  Type=oneshot
51
+ # #2561: this unit carried NO Environment=PATH= at all, so every subprocess
52
+ # `coord notify` spawns — the #2464 out-of-band confirmation pass
53
+ # (coord/confirm_test.py) re-running the repo's real build+test, and any
54
+ # `coord_argv()` (coord/drive.py) escalation resolving `shutil.which("coord")`
55
+ # — ran under systemd's bare user-manager PATH
56
+ # (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
57
+ # /usr/local/games:/snap/bin), which does NOT contain ~/.local/bin (where the
58
+ # pinned `coord` shim lives) or ~/.cargo/bin (where rustup puts `cargo`). That
59
+ # let this daemon's confirmation runs resolve a *different* toolchain than a
60
+ # dev shell or coord-serve.service would for the identical command — and cost
61
+ # a real dispatch when it refuted a genuinely clean CC#2556 branch over a
62
+ # PATH-dependent test assertion having nothing to do with the diff under
63
+ # review. Byte-identical to coord-serve.service's line (same host, same role
64
+ # family, same #1831/#1117 reasoning — see that unit's comment for why each
65
+ # entry is there and why the ordering matters).
66
+ Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
51
67
  ExecStart=%h/.coord-venv/bin/coord notify --config %h/.coord/coordinator.yml
52
68
  # #2464: sized off `coord.confirm_test.notify_client_timeout_seconds()` — the
53
69
  # HTTP timeout the CLI gives its `/notify` POST — plus slack, because this is
@@ -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
@@ -48,6 +48,22 @@ Wants=network-online.target
48
48
 
49
49
  [Service]
50
50
  Type=oneshot
51
+ # #2561: this unit carried NO Environment=PATH= at all, so every subprocess
52
+ # `coord notify` spawns — the #2464 out-of-band confirmation pass
53
+ # (coord/confirm_test.py) re-running the repo's real build+test, and any
54
+ # `coord_argv()` (coord/drive.py) escalation resolving `shutil.which("coord")`
55
+ # — ran under systemd's bare user-manager PATH
56
+ # (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
57
+ # /usr/local/games:/snap/bin), which does NOT contain ~/.local/bin (where the
58
+ # pinned `coord` shim lives) or ~/.cargo/bin (where rustup puts `cargo`). That
59
+ # let this daemon's confirmation runs resolve a *different* toolchain than a
60
+ # dev shell or coord-serve.service would for the identical command — and cost
61
+ # a real dispatch when it refuted a genuinely clean CC#2556 branch over a
62
+ # PATH-dependent test assertion having nothing to do with the diff under
63
+ # review. Byte-identical to coord-serve.service's line (same host, same role
64
+ # family, same #1831/#1117 reasoning — see that unit's comment for why each
65
+ # entry is there and why the ordering matters).
66
+ Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
51
67
  ExecStart=%h/.coord-venv/bin/coord notify --config %h/.coord/coordinator.yml
52
68
  # #2464: sized off `coord.confirm_test.notify_client_timeout_seconds()` — the
53
69
  # HTTP timeout the CLI gives its `/notify` POST — plus slack, because this is
@@ -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
  ):
@@ -0,0 +1,119 @@
1
+ """Regression guard for `deploy/coord-notify.service` (#2561 `Environment=PATH`).
2
+
3
+ Mirrors `tests/test_deploy_drive_queue_unit.py`'s `Environment=PATH=` section
4
+ for `coord-notify.service`'s own #2561 fix: this unit carried NO
5
+ `Environment=PATH=` at all, so every subprocess it spawns —
6
+ `coord_argv()`-resolved escalation dispatch, and the #2464 out-of-band
7
+ confirmation pass (`coord.confirm_test`) re-running the repo's own build/test
8
+ commands — ran under systemd's bare user-manager PATH instead of the pinned
9
+ release. That silent divergence refuted a genuinely clean branch (CC#2556)
10
+ over a PATH-dependent test assertion having nothing to do with the diff under
11
+ review. See `deploy/coord-notify.service`'s own header comment for the full
12
+ story, and `deploy/coord-serve.service`'s for why each PATH entry is there —
13
+ this unit's line is byte-identical to that one's (same host, same daemon
14
+ family), unlike `coord-drive-queue.service`'s bespoke #2314 ordering.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import configparser
20
+ from pathlib import Path
21
+
22
+ REPO_ROOT = Path(__file__).resolve().parent.parent
23
+ UNIT_PATH = REPO_ROOT / "deploy" / "coord-notify.service"
24
+ SERVE_UNIT_PATH = REPO_ROOT / "deploy" / "coord-serve.service"
25
+
26
+
27
+ def _parse_unit(path: Path) -> configparser.RawConfigParser:
28
+ # RawConfigParser (not ConfigParser): systemd's `%h`/`%%` specifiers
29
+ # collide with configparser's default `%`-interpolation syntax and raise
30
+ # otherwise (e.g. the `ExecStart=` line below).
31
+ cp = configparser.RawConfigParser(strict=False)
32
+ cp.read(path)
33
+ return cp
34
+
35
+
36
+ def _unit_path_entries(path: Path) -> list[str]:
37
+ """*path*'s `Environment=PATH=` value, split into entries.
38
+
39
+ Asserts its presence first: an absent directive is the exact #2561
40
+ regression (the unit then silently inherits the user manager's default),
41
+ and a bare KeyError from configparser would not say so.
42
+ """
43
+ unit = _parse_unit(path)
44
+ assert unit.has_option("Service", "Environment"), (
45
+ f"{path.name} declares no Environment=PATH= — it will inherit the "
46
+ "systemd user manager's default PATH, which has neither "
47
+ "~/.local/bin (the pinned `coord` shim) nor ~/.cargo/bin, so every "
48
+ "coord_argv()-resolved subprocess it spawns silently resolves a "
49
+ "different toolchain than a dev shell would (#2561)."
50
+ )
51
+ value = unit.get("Service", "Environment")
52
+ assert value.startswith("PATH="), value
53
+ return value[len("PATH=") :].split(":")
54
+
55
+
56
+ def test_still_a_oneshot_unit() -> None:
57
+ """The fix's reasoning (systemd's default PATH, not a login shell's)
58
+ assumes `Type=oneshot`. If this ever changes, re-derive rather than
59
+ silently carry the assumption forward."""
60
+ unit = _parse_unit(UNIT_PATH)
61
+ assert unit.get("Service", "Type") == "oneshot"
62
+
63
+
64
+ def test_local_bin_is_on_the_path() -> None:
65
+ """The actual #2561 fix. `~/.local/bin/coord` is the pinned-release
66
+ shim (a symlink onto `~/.coord-venv/bin/coord`); without it on PATH,
67
+ `coord_argv()`'s `shutil.which("coord")` falls back to
68
+ `[sys.executable, "-m", "coord.cli"]`, a different argv shape that
69
+ downstream code (and tests asserting on it) do not expect."""
70
+ assert "%h/.local/bin" in _unit_path_entries(UNIT_PATH)
71
+
72
+
73
+ def test_cargo_bin_is_on_the_path() -> None:
74
+ """rustup installs `cargo` at ~/.cargo/bin and nowhere else — the #2464
75
+ confirmation pass this unit runs re-executes the repo's own
76
+ `build_command`/`test_command`, which is `cargo build`/`cargo test` for a
77
+ `tui/**`-touching branch."""
78
+ assert "%h/.cargo/bin" in _unit_path_entries(UNIT_PATH)
79
+
80
+
81
+ def test_path_is_a_superset_of_the_systemd_user_default() -> None:
82
+ """Declaring an explicit PATH *replaces* the inherited one, so anything
83
+ this unit reaches today via the user manager's default must be carried
84
+ over explicitly or the fix trades one silent breakage for another."""
85
+ entries = set(_unit_path_entries(UNIT_PATH))
86
+ # `systemctl --user show-environment` default, minus the games dirs.
87
+ inherited = [
88
+ "/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin",
89
+ "/sbin", "/bin", "/snap/bin",
90
+ ]
91
+ missing = [e for e in inherited if e not in entries]
92
+ assert not missing, f"PATH drops inherited entries: {missing}"
93
+
94
+
95
+ def test_path_has_no_editable_checkout_shadow() -> None:
96
+ """Enforce #1831's rule with #1831's own detector rather than by eye: no
97
+ `.venv/bin` entry may precede ~/.local/bin or ~/.coord-venv/bin, or the
98
+ `unit_drift` health check goes CRIT on this unit the moment it installs."""
99
+ from coord.health.checks.unit_drift import find_path_shadow
100
+
101
+ assert find_path_shadow(UNIT_PATH.read_text()) is None
102
+
103
+
104
+ def test_path_matches_coord_serve_byte_for_byte() -> None:
105
+ """#2561 asked for byte-identity with `coord-serve.service`'s line —
106
+ same host, same daemon family, same #1831/#1117 reasoning for each entry.
107
+ Unlike `coord-drive-queue.service` (a deliberately different, #2314-driven
108
+ ordering), there is no reason for this unit's PATH to diverge from
109
+ `coord-serve.service`'s."""
110
+ assert _unit_path_entries(UNIT_PATH) == _unit_path_entries(SERVE_UNIT_PATH)
111
+
112
+
113
+ def test_path_comment_names_the_issue() -> None:
114
+ """Same rationale as `test_deploy_drive_queue_unit.py`'s comment guard —
115
+ the reasoning for why this line must never be dropped stays attached to
116
+ it."""
117
+ text = UNIT_PATH.read_text()
118
+ assert "#2561" in text
119
+ assert "Environment=PATH=" in text
@@ -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):