code-coordinator 0.5.222__tar.gz → 0.5.224__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.222 → code_coordinator-0.5.224}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.222 → code_coordinator-0.5.224/coord}/deploy/coord-notify.service +16 -0
  7. {code_coordinator-0.5.222/coord → code_coordinator-0.5.224}/deploy/coord-notify.service +16 -0
  8. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/coord-test-runner.sh +26 -0
  9. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_baseline.py +77 -0
  10. code_coordinator-0.5.224/tests/test_deploy_notify_unit.py +119 -0
  11. code_coordinator-0.5.224/tests/test_packaged_deploy_units.py +179 -0
  12. code_coordinator-0.5.222/tests/test_packaged_deploy_units.py +0 -89
  13. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/cargo-test.yml +0 -0
  24. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/release-tui.yml +0 -0
  26. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.gitignore +0 -0
  28. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/GOAL.md +0 -0
  30. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/LICENSE +0 -0
  31. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/README.md +0 -0
  33. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_bool_guard.py +0 -0
  52. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/client.py +0 -0
  65. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/lifecycle.py +0 -0
  79. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/config.py +0 -0
  97. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/db.py +0 -0
  107. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/README.md +0 -0
  109. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-agent.service +0 -0
  110. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.service +0 -0
  111. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.sh +0 -0
  112. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.timer +0 -0
  113. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-drive-queue.service +0 -0
  114. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-drive-queue.timer +0 -0
  115. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-notify.timer +0 -0
  116. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-propagate.service +0 -0
  117. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-propagate.timer +0 -0
  118. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-window.service +0 -0
  119. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-window.timer +0 -0
  120. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-serve.service +0 -0
  121. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web-dist-build.service +0 -0
  122. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web-dist-build.timer +0 -0
  123. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web.service +0 -0
  124. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy_manifest.py +0 -0
  125. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy_units.py +0 -0
  126. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deps.py +0 -0
  127. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/diagnose.py +0 -0
  128. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dispatch.py +0 -0
  129. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dist_name.py +0 -0
  130. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive.py +0 -0
  131. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive_queue.py +0 -0
  132. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive_state.py +0 -0
  133. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/events.py +0 -0
  134. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/failure_class.py +0 -0
  135. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/filelock.py +0 -0
  136. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/fleet_config_health.py +0 -0
  137. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/forge_availability.py +0 -0
  138. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/freshness.py +0 -0
  139. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_a.py +0 -0
  140. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_b.py +0 -0
  141. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_snapshot.py +0 -0
  142. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gates.py +0 -0
  143. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/github_ops.py +0 -0
  144. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/goal.py +0 -0
  145. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/graph_health.py +0 -0
  146. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/__init__.py +0 -0
  147. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/aggregate.py +0 -0
  148. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/__init__.py +0 -0
  149. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/agent_install.py +0 -0
  150. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/cargo_targets.py +0 -0
  151. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/claude_binary.py +0 -0
  152. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/coord_web_ci_pin.py +0 -0
  153. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/deploy_lane_facts.py +0 -0
  154. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/disk.py +0 -0
  155. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_board.py +0 -0
  156. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  157. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_phantom.py +0 -0
  158. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_unit_drift.py +0 -0
  159. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/graph.py +0 -0
  160. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/graphify_cli.py +0 -0
  161. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/index_lock.py +0 -0
  162. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/plan_usage.py +0 -0
  163. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/repo_state.py +0 -0
  164. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/spawned_coord.py +0 -0
  165. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/timer_active.py +0 -0
  166. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/toolchain.py +0 -0
  167. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/unit_drift.py +0 -0
  168. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/unit_enablement.py +0 -0
  169. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/worktrees.py +0 -0
  170. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/cli.py +0 -0
  171. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/context.py +0 -0
  172. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/fleet_snapshot.py +0 -0
  173. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/models.py +0 -0
  174. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/pypi.py +0 -0
  175. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/registry.py +0 -0
  176. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/render.py +0 -0
  177. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/units.py +0 -0
  178. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/hooks.py +0 -0
  179. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/housekeeping.py +0 -0
  180. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/interactive.py +0 -0
  181. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/issue_store.py +0 -0
  182. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/liveness_auditor.py +0 -0
  183. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/machine_pause.py +0 -0
  184. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/merge_queue.py +0 -0
  185. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_chat.py +0 -0
  186. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_dispatch.py +0 -0
  187. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_gate.py +0 -0
  188. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_order.py +0 -0
  189. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/mock_author.py +0 -0
  190. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/models.py +0 -0
  191. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/network.py +0 -0
  192. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notify.py +0 -0
  204. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/openapi.py +0 -0
  205. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/overlap_fence.py +0 -0
  206. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/overlap_predict.py +0 -0
  207. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/parentage.py +0 -0
  208. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/parentage_github.py +0 -0
  209. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/pipeline.py +0 -0
  210. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/plan_parser.py +0 -0
  211. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/plans.py +0 -0
  212. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/platform_paths.py +0 -0
  213. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_bridge.py +0 -0
  214. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_store.py +0 -0
  215. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_sync.py +0 -0
  216. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/pr_body_lint.py +0 -0
  217. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/prereqs.py +0 -0
  218. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/progress.py +0 -0
  219. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/__init__.py +0 -0
  220. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/base.py +0 -0
  221. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/claude.py +0 -0
  222. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/claude_pty.py +0 -0
  223. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/opencode.py +0 -0
  224. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/queue_diagnose.py +0 -0
  225. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reconcile.py +0 -0
  226. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reconcile_tick.py +0 -0
  227. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/refine_chat.py +0 -0
  228. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_cordon.py +0 -0
  229. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_propagate.py +0 -0
  230. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_verify.py +0 -0
  231. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_window.py +0 -0
  232. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/repo_edit.py +0 -0
  233. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/repo_onboard.py +0 -0
  234. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reports.py +0 -0
  235. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/revalidate.py +0 -0
  236. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/review.py +0 -0
  237. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/scorecard.py +0 -0
  238. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/self_health.py +0 -0
  239. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/serve_app.py +0 -0
  240. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  241. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  242. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  243. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  245. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/portal-followup/SKILL.md +0 -0
  246. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  247. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  248. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/update-issue/SKILL.md +0 -0
  249. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/smoke.py +0 -0
  250. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/spend_ceiling.py +0 -0
  251. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/split_work.py +0 -0
  252. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/stage_projection.py +0 -0
  253. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/state.py +0 -0
  254. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_author.py +0 -0
  255. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_chat.py +0 -0
  256. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_orchestrator.py +0 -0
  257. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_report.py +0 -0
  258. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/tui_release.py +0 -0
  259. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage.py +0 -0
  260. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage_limits.py +0 -0
  261. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage_rollup.py +0 -0
  262. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/worker_events.py +0 -0
  263. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coordinator.example.yml +0 -0
  264. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-agent.service +0 -0
  265. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.service +0 -0
  266. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.sh +0 -0
  267. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.timer +0 -0
  268. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-drive-queue.service +0 -0
  269. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-drive-queue.timer +0 -0
  270. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-notify.timer +0 -0
  271. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-propagate.service +0 -0
  272. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-propagate.timer +0 -0
  273. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-window.service +0 -0
  274. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-window.timer +0 -0
  275. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-serve.service +0 -0
  276. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.service +0 -0
  277. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.sh +0 -0
  278. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.timer +0 -0
  279. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-rollback.sh +0 -0
  280. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web.service +0 -0
  281. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/node-shim.sh +0 -0
  282. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  283. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_CI.md +0 -0
  284. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_DIST.md +0 -0
  285. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/AGENT_OPERATIONS.md +0 -0
  286. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ARCHITECTURE.md +0 -0
  287. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ARCH_SECURITY_GATES.md +0 -0
  288. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/COCKPIT.md +0 -0
  289. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CONTROL_CENTER.md +0 -0
  290. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/COST_DISCIPLINE.md +0 -0
  291. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CROSS_PLATFORM.md +0 -0
  292. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CUSTOMER_PORTAL.md +0 -0
  293. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/DRIVE_QUEUE.md +0 -0
  294. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/EPHEMERAL_WORKERS.md +0 -0
  295. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/FORGE_MIGRATION.md +0 -0
  296. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/GRAPHIFY_SETUP.md +0 -0
  297. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ISSUE_GUIDANCE.md +0 -0
  298. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/MAC_MINI.md +0 -0
  299. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  300. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/NOTIFIER.md +0 -0
  301. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/OPENCODE_VERIFICATION.md +0 -0
  302. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/OPERATING_GOTCHAS.md +0 -0
  303. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ORACLE_LOOP.md +0 -0
  304. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PHONE_WEBAPP.md +0 -0
  305. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PIPELINE_V2.md +0 -0
  306. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PLATFORM_EVOLUTION.md +0 -0
  307. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/SECOND_BACKEND.md +0 -0
  308. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/STORE_SERVICE.md +0 -0
  309. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  310. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/WEB_CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/WSL_WINDOWS_WORKER.md +0 -0
  312. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/README.md +0 -0
  313. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/_tokens.css +0 -0
  314. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/issue-detail.html +0 -0
  315. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/pipeline-narrow.html +0 -0
  316. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/pipeline-wide.html +0 -0
  317. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/graphify-out/.gitignore +0 -0
  318. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/install-agent.sh +0 -0
  319. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/pyproject.toml +0 -0
  320. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/audit_review_verdict_overrides.py +0 -0
  321. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  322. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/build-worker-image.sh +0 -0
  323. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/coordinator-machine.py +0 -0
  324. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/epic-down.sh +0 -0
  325. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/epic-up.sh +0 -0
  326. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/preflight.sh +0 -0
  327. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/provision-worker.sh +0 -0
  328. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  329. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  330. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/verify-github-token.sh +0 -0
  331. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/check_gh_argv_containment.py +0 -0
  332. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/codegen.py +0 -0
  333. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/drive-batch.sh +0 -0
  334. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/gen_board_fixture.py +0 -0
  335. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/gen_mock_index.py +0 -0
  336. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/next_release_tag.py +0 -0
  337. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/run_tests_in_populated_home.sh +0 -0
  338. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/run_tests_without_gh.sh +0 -0
  339. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/smoke_437_interactive.py +0 -0
  340. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_878_review_capture.py +0 -0
  341. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_release_published.py +0 -0
  342. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_release_wheel.py +0 -0
  343. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/setup.cfg +0 -0
  344. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/SMOKE_SET.md +0 -0
  345. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/__init__.py +0 -0
  346. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  347. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/contract.md +0 -0
  348. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/manifest.yml +0 -0
  349. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  350. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  351. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  352. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  353. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/conftest.py +0 -0
  354. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/contract.md +0 -0
  355. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/manifest.yml +0 -0
  356. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  357. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  358. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/contract.md +0 -0
  359. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/manifest.yml +0 -0
  360. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  361. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  362. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  363. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  364. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  365. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  366. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  367. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  368. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  369. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  370. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/contract.md +0 -0
  371. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  372. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  373. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/manifest.yml +0 -0
  374. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  375. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/tsconfig.json +0 -0
  376. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  377. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  378. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  379. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/contract.md +0 -0
  380. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  381. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/manifest.yml +0 -0
  382. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  383. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  384. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  385. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  386. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  387. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  389. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  390. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  391. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  392. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  393. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  394. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/contract.md +0 -0
  395. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/manifest.yml +0 -0
  396. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  402. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/conftest.py +0 -0
  403. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/board-pipeline-basic.json +0 -0
  404. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  405. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  406. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  407. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  408. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/all_pass.json +0 -0
  409. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  410. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/mixed_fail.json +0 -0
  411. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  412. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  413. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/skip.json +0 -0
  414. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/truncated.json +0 -0
  415. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  416. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  417. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  418. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  419. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  420. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  421. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  422. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  423. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_acceptance.py +0 -0
  424. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_acceptance_drivers.py +0 -0
  425. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent.py +0 -0
  426. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_api_error.py +0 -0
  427. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_app.py +0 -0
  428. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_branch_base.py +0 -0
  429. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_branch_capture.py +0 -0
  430. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_config_free_1712.py +0 -0
  431. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_deploy_units_endpoint.py +0 -0
  432. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_dirty_worktree.py +0 -0
  433. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  434. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_graph_self_heal.py +0 -0
  435. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_health_h3.py +0 -0
  436. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_idle_restart.py +0 -0
  437. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_push_failure.py +0 -0
  438. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_reap.py +0 -0
  439. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_repos_and_pull.py +0 -0
  440. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_restart_services_endpoint.py +0 -0
  441. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_skills_self_heal.py +0 -0
  442. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_startup_diagnostics.py +0 -0
  443. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_update.py +0 -0
  444. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_update_bluegreen.py +0 -0
  445. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_usage_limit.py +0 -0
  446. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_zero_commit.py +0 -0
  447. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ambient_home_isolation.py +0 -0
  448. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approve_reject_plan.py +0 -0
  449. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approve_usage_gate.py +0 -0
  450. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approved_work_2532.py +0 -0
  451. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_assignment_already_recorded_daemon.py +0 -0
  452. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_log.py +0 -0
  453. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_outcome.py +0 -0
  454. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_query.py +0 -0
  455. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_auto_loop.py +0 -0
  456. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_auto_release_publish_2035.py +0 -0
  457. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_base_checkout_restore.py +0 -0
  458. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_block_log.py +0 -0
  459. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_cap_762.py +0 -0
  460. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_fixture.py +0 -0
  461. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_read_path.py +0 -0
  462. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_service.py +0 -0
  463. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_state.py +0 -0
  464. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_wire.py +0 -0
  465. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_brain.py +0 -0
  466. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_branch_model.py +0 -0
  467. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_bug_intake.py +0 -0
  468. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_build_worker_image_env_update.py +0 -0
  469. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cargo_cache.py +0 -0
  470. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_check_gh_argv_containment.py +0 -0
  471. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_acceptance_gate_1950.py +0 -0
  472. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_fix.py +0 -0
  473. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_gitlab.py +0 -0
  474. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_parity_2091.py +0 -0
  475. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_store.py +0 -0
  476. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_claim.py +0 -0
  477. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_acceptance.py +0 -0
  478. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign.py +0 -0
  479. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  480. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_interactive_remote.py +0 -0
  481. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_provider.py +0 -0
  482. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  483. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_audit.py +0 -0
  484. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_chat_continue.py +0 -0
  485. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_decide.py +0 -0
  486. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_config_provenance.py +0 -0
  487. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_forge_availability.py +0 -0
  488. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_graph.py +0 -0
  489. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_self.py +0 -0
  490. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor.py +0 -0
  491. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor_config_free_1801.py +0 -0
  492. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  493. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_drive.py +0 -0
  494. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_drive_queue.py +0 -0
  495. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_escalate.py +0 -0
  496. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_fix_headless_review.py +0 -0
  497. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_gate_a.py +0 -0
  498. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_install_drift.py +0 -0
  499. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_install_skills.py +0 -0
  500. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_issue_create_label.py +0 -0
  501. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_issue_reopen.py +0 -0
  502. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_merge.py +0 -0
  503. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_assign.py +0 -0
  504. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_capture.py +0 -0
  505. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_chat_add_child.py +0 -0
  506. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_dispatch.py +0 -0
  507. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_order.py +0 -0
  510. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  511. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_ship.py +0 -0
  512. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_network.py +0 -0
  513. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_new_issue_chat.py +0 -0
  514. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_plans.py +0 -0
  515. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_portal.py +0 -0
  516. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_pull_artifact.py +0 -0
  517. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_queue.py +0 -0
  518. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_reattach_sessions.py +0 -0
  519. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_refine_board.py +0 -0
  520. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_preflight.py +0 -0
  521. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_propagate.py +0 -0
  522. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_window.py +0 -0
  523. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_repo_2220.py +0 -0
  524. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_merge_queue.py +0 -0
  528. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_provider.py +0 -0
  529. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_review_finalizing.py +0 -0
  530. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_test_failed_tag.py +0 -0
  531. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_usage_limit.py +0 -0
  532. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_sync_comments_873.py +0 -0
  533. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_test_plan.py +0 -0
  534. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_track.py +0 -0
  535. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_tui_update.py +0 -0
  536. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_wait.py +0 -0
  537. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_client_base_install.py +0 -0
  538. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_comments.py +0 -0
  539. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_completion_summary.py +0 -0
  540. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config.py +0 -0
  541. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_acceptance.py +0 -0
  542. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_audit.py +0 -0
  543. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_pricing.py +0 -0
  544. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  545. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_usage_gate.py +0 -0
  546. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_confirm_test.py +0 -0
  547. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_conflict_fix.py +0 -0
  548. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_conflict_fix_semantic.py +0 -0
  549. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test.py +0 -0
  550. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_manifest.py +0 -0
  567. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_units_lane.py +0 -0
  568. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_web_unit.py +0 -0
  569. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deps.py +0 -0
  570. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_diagnose.py +0 -0
  571. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dispatch.py +0 -0
  572. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dispatch_target_validation.py +0 -0
  573. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dist_name.py +0 -0
  574. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_done_housekeeping.py +0 -0
  575. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive.py +0 -0
  576. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_queue.py +0 -0
  577. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_state.py +0 -0
  578. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_tmux.py +0 -0
  579. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_capability_detection.py +0 -0
  580. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  581. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_image_provenance.py +0 -0
  582. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_errors.py +0 -0
  583. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_events.py +0 -0
  584. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_failure_class.py +0 -0
  585. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_filelock.py +0 -0
  586. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  587. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fix_of_force_override.py +0 -0
  588. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_config_health.py +0 -0
  589. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_health_probes.py +0 -0
  590. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_health_snapshot.py +0 -0
  591. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_generated_types_fixture.py +0 -0
  600. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_github_ops.py +0 -0
  601. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_goal.py +0 -0
  602. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_graph_health.py +0 -0
  603. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_graph_selfheal_absent_2237.py +0 -0
  604. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_handoff.py +0 -0
  605. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_checks.py +0 -0
  606. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_cli.py +0 -0
  607. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_cli_graph.py +0 -0
  608. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_config.py +0 -0
  609. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_context.py +0 -0
  610. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_coord_web_ci_pin.py +0 -0
  611. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_deploy_lane_facts.py +0 -0
  612. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_incident_regression.py +0 -0
  613. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_pypi.py +0 -0
  614. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_registry.py +0 -0
  615. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_timer_active.py +0 -0
  616. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_toolchain.py +0 -0
  617. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_unit_drift.py +0 -0
  618. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_unit_enablement.py +0 -0
  619. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_hooks.py +0 -0
  620. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_human_attended_437.py +0 -0
  621. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_init.py +0 -0
  622. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_integration.py +0 -0
  623. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_briefing_echo.py +0 -0
  624. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_prefill_state.py +0 -0
  625. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_session_relaunch.py +0 -0
  626. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_test_verdict_backstop.py +0 -0
  627. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_token_attribution.py +0 -0
  628. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_worktree.py +0 -0
  629. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_issue_store_seam.py +0 -0
  630. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_liveness_auditor.py +0 -0
  631. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_liveness_notify.py +0 -0
  632. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_machine_pause.py +0 -0
  633. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_merge_queue.py +0 -0
  634. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_merge_verify.py +0 -0
  635. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_chat.py +0 -0
  636. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_dispatch.py +0 -0
  637. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_gate.py +0 -0
  638. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_order.py +0 -0
  639. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_seam.py +0 -0
  640. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_mock_author.py +0 -0
  641. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_model_tiering.py +0 -0
  642. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_models.py +0 -0
  643. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_models_config_labels.py +0 -0
  644. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_needs_attention.py +0 -0
  645. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_network.py +0 -0
  646. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_new_issue_chat.py +0 -0
  647. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_next_release_tag.py +0 -0
  648. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_node_shim.py +0 -0
  649. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_baseline.py +0 -0
  650. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_cli.py +0 -0
  651. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_collect.py +0 -0
  652. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_config.py +0 -0
  653. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_drive_seam.py +0 -0
  654. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_isolation.py +0 -0
  655. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_predicate.py +0 -0
  656. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_quiet_hours.py +0 -0
  657. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_service.py +0 -0
  658. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notify.py +0 -0
  659. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notify_drain.py +0 -0
  660. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_openapi.py +0 -0
  661. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_operational_defaults.py +0 -0
  662. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_overlap_fence.py +0 -0
  663. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_overlap_predict.py +0 -0
  664. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stalled_pipeline.py +0 -0
  741. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_state.py +0 -0
  742. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_state_review_findings_daemon.py +0 -0
  743. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_status_fleet_footer.py +0 -0
  744. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stop_1567.py +0 -0
  745. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stuck.py +0 -0
  746. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_terminal_command.py +0 -0
  747. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_author.py +0 -0
  748. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_chat.py +0 -0
  749. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_orchestrator.py +0 -0
  750. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_report.py +0 -0
  751. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_verdict_parsing.py +0 -0
  752. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_verdict_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_board_audit.py +0 -0
  754. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_config_load_1080.py +0 -0
  755. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_daemon_routing_906.py +0 -0
  756. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_tmux_host.py +0 -0
  757. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_tmux_session.py +0 -0
  758. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage.py +0 -0
  760. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage_limits.py +0 -0
  761. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage_rollup.py +0 -0
  762. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_venv_live_install_2121.py +0 -0
  763. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_version_single_source.py +0 -0
  764. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_watch.py +0 -0
  765. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  766. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_events.py +0 -0
  767. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_image_pin_sync.py +0 -0
  768. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_safety.py +0 -0
  769. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_test_scoping.py +0 -0
  770. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worktree.py +0 -0
  771. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  772. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/Cargo.lock +0 -0
  773. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/Cargo.toml +0 -0
  774. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/cargo-config-local-quadraui.toml.example +0 -0
  775. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/approved.rs +0 -0
  776. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/audit.rs +0 -0
  777. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/chat.rs +0 -0
  778. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/data.rs +0 -0
  779. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/dialogs.rs +0 -0
  780. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/doc_tabs.rs +0 -0
  781. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/drive.rs +0 -0
  782. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/drive_queue.rs +0 -0
  783. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/escalation.rs +0 -0
  784. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/events.rs +0 -0
  785. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fixtures.rs +0 -0
  786. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_health.rs +0 -0
  787. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_sessions.rs +0 -0
  788. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_terminals.rs +0 -0
  789. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/format.rs +0 -0
  790. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/milestone_dag.rs +0 -0
  791. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/mod.rs +0 -0
  792. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/msv.rs +0 -0
  793. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/pipeline.rs +0 -0
  794. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/plans.rs +0 -0
  795. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/render.rs +0 -0
  796. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/reports.rs +0 -0
  797. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/sessions.rs +0 -0
  798. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/settings_ui.rs +0 -0
  799. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/sidebar.rs +0 -0
  800. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/tests.rs +0 -0
  802. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/types.rs +0 -0
  803. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/workspace.rs +0 -0
  804. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/bin/gtk.rs +0 -0
  805. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/commands.rs +0 -0
  806. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/lib.rs +0 -0
  807. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/main.rs +0 -0
  808. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/settings.rs +0 -0
  809. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/tests/acceptance.rs +0 -0
  810. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/tests/cli.rs +0 -0
  811. {code_coordinator-0.5.222 → code_coordinator-0.5.224}/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.222
3
+ Version: 0.5.224
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.222
3
+ Version: 0.5.224
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.222",
2
+ "tag": "0.5.224",
3
3
  "distance": 0,
4
- "node": "g0a0c97af031f26980c629e83e6ab895bfca5a393",
4
+ "node": "gcb4f4b8b669bb9319880ac1b1b10496b1131b557",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -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
@@ -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
@@ -829,6 +829,32 @@ run_python() {
829
829
  return $?
830
830
  fi
831
831
 
832
+ # #2562: the isolation re-run above is not all-or-nothing evidence — its
833
+ # own `FAILED ` lines say EXACTLY which node ids survived. Rebuild
834
+ # $failed from those before doing anything else: a test that dropped out
835
+ # PASSED in isolation and is by definition the flake case this whole
836
+ # block exists to catch. Handing the ORIGINAL (unpruned) set to the
837
+ # baseline comparison below is the bug this closes — one genuine failure
838
+ # was keeping a flake in the set, and the baseline comparison is itself
839
+ # all-or-nothing (#2170's unanimity), so the flake alone could suppress a
840
+ # correct BASELINE-RED downgrade.
841
+ local still_failed
842
+ still_failed="$(grep '^FAILED ' "$rerun" | awk '{print $2}' | sort -u || true)"
843
+ if [[ -z "$still_failed" ]]; then
844
+ # Non-zero exit but no parseable FAILED lines — e.g. a collection/
845
+ # import error on the isolated re-run. Nothing to prune against;
846
+ # fall back to the original set rather than claim a pruning that
847
+ # did not happen.
848
+ still_failed="$failed"
849
+ fi
850
+ local pruned_count; pruned_count="$(printf '%s\n' "$still_failed" | grep -c . || true)"
851
+ if [[ "$pruned_count" -lt "$count" ]]; then
852
+ log "$((count - pruned_count)) of $count failing test(s) passed in isolation — treating as flakes, comparing the remaining $pruned_count against the baseline"
853
+ FLAKES+=("python:$((count - pruned_count))")
854
+ fi
855
+ failed="$still_failed"
856
+ count="$pruned_count"
857
+
832
858
  # Not a flake. Before calling it the branch's fault, ask the question the
833
859
  # Test gate is actually asked: is this worse than $BASE_REF on THIS machine?
834
860
  # (#2170 — see the baseline section above for why this only ever downgrades
@@ -97,6 +97,15 @@ if [[ "$1" == "-m" && "$2" == "pytest" ]]; then
97
97
  printf '%s passed\n' "2"
98
98
  exit 0
99
99
  fi
100
+ # #2562: a PARTIAL isolation re-run — one node id genuinely still
101
+ # fails, the rest passed. Distinct from FAKE_RERUN_PASSES (all pass,
102
+ # exit 0) and from the "no override" default (everything in
103
+ # FAKE_BRANCH_FAILED fails again, as if isolation changed nothing).
104
+ if [[ "$_targeted" -eq 1 && -n "${FAKE_RERUN_STILL_FAILING:-}" ]]; then
105
+ _emit_failed "$FAKE_RERUN_STILL_FAILING"
106
+ printf '1 failed, 1 passed\n'
107
+ exit 1
108
+ fi
100
109
  _emit_failed "${FAKE_BRANCH_FAILED:-}"
101
110
  printf '2 failed\n'
102
111
  exit 1
@@ -393,6 +402,74 @@ def test_a_flake_is_still_a_flake_and_never_consults_the_baseline(repo: Path) ->
393
402
  assert "baseline:" not in result.stdout + result.stderr
394
403
 
395
404
 
405
+ # ── #2562: partial-flake pruning feeds baseline comparison ──────────────────
406
+ #
407
+ # The all-or-nothing bug: `pytest $failed` re-ran the whole failing set
408
+ # together, so ONE genuine failure alongside a flake kept the flake in
409
+ # `$failed` — and that poisoned set then went to `python_baseline_is_red`,
410
+ # itself unanimity-gated, where the flake (which passes on the baseline same
411
+ # as everywhere else) short-circuited a correct BASELINE-RED downgrade. The
412
+ # fix rebuilds `$failed` from the isolation re-run's own `FAILED ` lines
413
+ # before doing anything else with it.
414
+
415
+
416
+ def test_mixed_flake_and_genuine_prunes_to_baseline_red(repo: Path) -> None:
417
+ """{genuine, flake} prunes to {genuine}, and BASELINE-RED fires on just
418
+ that remainder — the exact CC#2556 shape from the issue: a real flake
419
+ sitting next to a test that fails identically on the merge-base must not
420
+ suppress the downgrade.
421
+ """
422
+ result = _run(
423
+ repo,
424
+ # Isolation re-run: test_one still fails, test_two (the flake) passed
425
+ # and dropped out.
426
+ FAKE_RERUN_STILL_FAILING="tests/test_ambient.py::test_one",
427
+ # Baseline reproduces the one that's left.
428
+ FAKE_BASELINE_FAILED="tests/test_ambient.py::test_one",
429
+ )
430
+
431
+ assert result.returncode == 4, (result.returncode, result.stdout, result.stderr)
432
+ assert "RESULT: BASELINE-RED (python)" in result.stdout
433
+ assert "1 of 2 failing test(s) passed in isolation" in result.stdout
434
+ assert "comparing the remaining 1 against the baseline" in result.stdout
435
+ assert "BASELINE-RED(python): all 1 failing test(s) fail identically" in result.stdout
436
+ # The pruned flake must not appear as part of the (now genuine-only) set.
437
+ assert "tests/test_ambient.py::test_one" in result.stdout
438
+ assert "RESULT: FAIL" not in result.stdout
439
+
440
+
441
+ def test_mixed_flake_and_genuine_prunes_to_a_smaller_genuine_fail(repo: Path) -> None:
442
+ """Same pruning, but the remainder is NOT baseline-red: still a FAIL, but
443
+ for the pruned count and node id only — the reported list must match
444
+ what actually failed on the isolation re-run, not the original set.
445
+ """
446
+ result = _run(
447
+ repo,
448
+ FAKE_RERUN_STILL_FAILING="tests/test_ambient.py::test_one",
449
+ # FAKE_BASELINE_FAILED unset ⇒ baseline is green for test_one too.
450
+ )
451
+
452
+ assert result.returncode == 1
453
+ assert "RESULT: FAIL (python)" in result.stdout
454
+ assert "BASELINE-RED" not in result.stdout
455
+ assert "1 of 2 failing test(s) passed in isolation" in result.stdout
456
+ assert "FAIL(python): 1 test(s) fail on re-run — genuine" in result.stdout
457
+ assert "tests/test_ambient.py::test_one" in result.stdout
458
+ assert "tests/test_ambient.py::test_two" not in (
459
+ result.stdout.split("FAIL(python): 1 test(s) fail on re-run — genuine")[1]
460
+ )
461
+
462
+
463
+ def test_all_genuine_failing_set_is_unaffected_by_pruning(repo: Path) -> None:
464
+ """Both failures still fail in isolation ⇒ nothing pruned, and behaviour
465
+ matches the pre-#2562 baseline-red path exactly (no pruning log line)."""
466
+ result = _run(repo, FAKE_BASELINE_FAILED=BRANCH_FAILED)
467
+
468
+ assert result.returncode == 4
469
+ assert "RESULT: BASELINE-RED (python)" in result.stdout
470
+ assert "passed in isolation" not in result.stdout
471
+
472
+
396
473
  # ── #2180 review fix: the Test stage must agree with CI on tests/acceptance ─
397
474
  #
398
475
  # Before this fix, `--ignore=tests/acceptance` dropped the sealed cli-pytest
@@ -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
@@ -0,0 +1,179 @@
1
+ """`coord/deploy/` must stay byte-identical to the repo-root `deploy/` (#1927).
2
+
3
+ The unit-drift check (`coord/health/checks/unit_drift.py`) diffs each host's
4
+ installed systemd unit against the units *packaged with the installed
5
+ release*. Those live under `coord/deploy/` so they ship in the wheel — a
6
+ reference that cannot drift with the host's git checkout.
7
+
8
+ The reviewed source of truth is still the repo-root `deploy/`: it is what
9
+ every unit header, doc and provisioning script names, and what the other
10
+ `tests/test_deploy_*.py` modules read. The packaged copy is exactly that,
11
+ copied. This module is what stops the copy from going stale — the failure
12
+ mode is silent and nasty, because a stale packaged unit would make the
13
+ release *look* verified while comparing against the wrong file.
14
+
15
+ Nothing here needs a fleet, a config or a clock: it is a repo-layout
16
+ assertion.
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import re
22
+ from pathlib import Path
23
+
24
+ import pytest
25
+
26
+ REPO_ROOT = Path(__file__).resolve().parent.parent
27
+ SOURCE_DIR = REPO_ROOT / "deploy"
28
+ PACKAGED_DIR = REPO_ROOT / "coord" / "deploy"
29
+
30
+ UNIT_GLOBS = ("*.service", "*.timer")
31
+
32
+ # #2561: units whose ExecStart runs a `coord` subcommand that itself launches
33
+ # FURTHER `coord` subprocesses via `coord_argv()` (coord/drive.py) —
34
+ # `shutil.which("coord")`, i.e. resolved from *this unit's own* PATH, not a
35
+ # login shell's. `coord-notify.service` runs the #2464 out-of-band
36
+ # confirmation pass and escalation dispatch; `coord-drive-queue.service`
37
+ # launches `coord drive --tmux` / `coord merge --only` from
38
+ # coord/commands/drive_queue.py. Both went a release cycle with NO
39
+ # `Environment=PATH=` at all, so that resolution silently fell through
40
+ # systemd's bare user-manager PATH (no ~/.local/bin, no ~/.cargo/bin) instead
41
+ # of the pinned release — a real dispatch got refuted over it (#2561's CC#2556
42
+ # incident). `coord-serve.service` and `coord-agent.service` are the other two
43
+ # daemons already on this list; they got their PATH fix in earlier issues
44
+ # (#1831/#1671) and are included here so this test guards them too, not just
45
+ # the two #2561 named.
46
+ #
47
+ # `coord-web.service`, `coord-db-backup.service`,
48
+ # `coord-release-propagate.service` and `coord-release-window.service` are
49
+ # DELIBERATELY not in this set — #2561 asked that the other four units get a
50
+ # considered "does this need it" rather than an accident, not that this test
51
+ # assume the answer. Auditing them is follow-up work, not something to fold in
52
+ # here silently.
53
+ _COORD_ARGV_SPAWNING_UNITS = frozenset(
54
+ {
55
+ "coord-notify.service",
56
+ "coord-drive-queue.service",
57
+ "coord-serve.service",
58
+ "coord-agent.service",
59
+ }
60
+ )
61
+
62
+ _PATH_LINE_RE = re.compile(r"^Environment\s*=\s*PATH=(.*)$", re.MULTILINE)
63
+
64
+ # A PATH entry resolving to the pinned release — `~/.local/bin/coord` is a
65
+ # symlink onto `~/.coord-venv/bin/coord` (see deploy/coord-serve.service's
66
+ # header comment). Either makes `shutil.which("coord")` find the real binary
67
+ # instead of coord_argv()'s `python -m coord.cli` fallback.
68
+ _RELEASE_MARKERS = ("/.local/bin", "/.coord-venv/bin")
69
+
70
+
71
+ def _units(directory: Path) -> dict[str, Path]:
72
+ out: dict[str, Path] = {}
73
+ for pattern in UNIT_GLOBS:
74
+ for path in directory.glob(pattern):
75
+ out[path.name] = path
76
+ return out
77
+
78
+
79
+ SOURCE_UNITS = _units(SOURCE_DIR)
80
+
81
+
82
+ def test_source_deploy_dir_has_units() -> None:
83
+ """Guards the guard: an empty source dir would make every other
84
+ assertion here vacuously true."""
85
+ assert "coord-serve.service" in SOURCE_UNITS
86
+ assert "coord-agent.service" in SOURCE_UNITS
87
+
88
+
89
+ def test_packaged_dir_covers_every_source_unit() -> None:
90
+ missing = sorted(set(SOURCE_UNITS) - set(_units(PACKAGED_DIR)))
91
+ assert not missing, (
92
+ f"deploy/ has units the wheel would not ship: {missing}. "
93
+ "Run: cp deploy/*.service deploy/*.timer coord/deploy/"
94
+ )
95
+
96
+
97
+ def test_packaged_dir_has_no_units_of_its_own() -> None:
98
+ extra = sorted(set(_units(PACKAGED_DIR)) - set(SOURCE_UNITS))
99
+ assert not extra, (
100
+ f"coord/deploy/ carries units deploy/ does not: {extra}. The "
101
+ "repo-root deploy/ is the reviewed source of truth; delete these or "
102
+ "add them there."
103
+ )
104
+
105
+
106
+ @pytest.mark.parametrize("name", sorted(SOURCE_UNITS))
107
+ def test_packaged_unit_is_byte_identical(name: str) -> None:
108
+ """A drifted copy is worse than no copy: the check would report a
109
+ confident green against the wrong reference."""
110
+ packaged = PACKAGED_DIR / name
111
+ assert packaged.exists(), f"missing coord/deploy/{name}"
112
+ assert packaged.read_bytes() == (SOURCE_DIR / name).read_bytes(), (
113
+ f"coord/deploy/{name} has drifted from deploy/{name}. deploy/ is the "
114
+ f"source of truth — run: cp deploy/{name} coord/deploy/{name}"
115
+ )
116
+
117
+
118
+ def test_pyproject_ships_the_packaged_units() -> None:
119
+ """The copy is only worth having if setuptools puts it in the wheel."""
120
+ import tomllib
121
+
122
+ data = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text())
123
+ patterns = data["tool"]["setuptools"]["package-data"]["coord"]
124
+ assert any(p.startswith("deploy/") for p in patterns), (
125
+ "coord/deploy/ is not in [tool.setuptools.package-data]; the wheel "
126
+ "would ship no reference units and every host would fall back to its "
127
+ "own unverified checkout (#1927)"
128
+ )
129
+
130
+
131
+ def test_coord_argv_spawning_units_are_known_source_units() -> None:
132
+ """Guards the guard: a typo'd/renamed entry in the set below would make
133
+ every assertion in :func:`test_coord_argv_spawning_unit_declares_path`
134
+ vacuously true for that unit."""
135
+ missing = sorted(_COORD_ARGV_SPAWNING_UNITS - set(SOURCE_UNITS))
136
+ assert not missing, (
137
+ f"_COORD_ARGV_SPAWNING_UNITS names units deploy/ does not have: {missing}"
138
+ )
139
+
140
+
141
+ @pytest.mark.parametrize("name", sorted(_COORD_ARGV_SPAWNING_UNITS))
142
+ def test_coord_argv_spawning_unit_declares_path(name: str) -> None:
143
+ """#2561: `coord-notify.service` and `coord-drive-queue.service` carried
144
+ NO `Environment=PATH=` at all, so `coord_argv()`'s `shutil.which("coord")`
145
+ (coord/drive.py) resolved every subprocess they spawn — the #2464
146
+ confirmation pass, escalation dispatch, `coord drive --tmux` — under
147
+ systemd's bare user-manager PATH instead of the pinned release. That
148
+ silent divergence refuted a genuinely clean branch (CC#2556) over a
149
+ PATH-dependent test assertion unrelated to the diff under review.
150
+
151
+ This is a byte-existence/marker check, not a byte-identity one: unlike
152
+ `test_packaged_unit_is_byte_identical`, the units in
153
+ `_COORD_ARGV_SPAWNING_UNITS` do NOT all carry the same PATH= value as each
154
+ other (coord-drive-queue.service's #2314 pin ordering is deliberately
155
+ different from coord-serve.service's #1117 repo-venv entry) — only that
156
+ each one HAS a PATH= line, and that line lets `shutil.which("coord")`
157
+ reach the pinned release rather than falling through to it.
158
+ """
159
+ text = (SOURCE_DIR / name).read_text()
160
+ matches = _PATH_LINE_RE.findall(text)
161
+ assert matches, (
162
+ f"deploy/{name} declares no Environment=PATH= — every subprocess it "
163
+ "spawns via coord_argv() falls back to systemd's bare user-manager "
164
+ "PATH, which does not contain ~/.local/bin or ~/.cargo/bin (#2561). "
165
+ "Add one — see deploy/coord-serve.service's line for the reasoning."
166
+ )
167
+ # Only the LAST directive takes effect if the unit repeats the key,
168
+ # mirroring coord.health.checks.unit_drift.find_path_shadow.
169
+ entries = [e for e in matches[-1].split(":") if e]
170
+ has_release_marker = any(
171
+ entry.rstrip("/").endswith(marker)
172
+ for entry in entries
173
+ for marker in _RELEASE_MARKERS
174
+ )
175
+ assert has_release_marker, (
176
+ f"deploy/{name}'s Environment=PATH= ({matches[-1]!r}) contains none of "
177
+ f"{_RELEASE_MARKERS} — shutil.which(\"coord\") in subprocesses this "
178
+ "unit spawns cannot resolve the pinned release (#2561)."
179
+ )
@@ -1,89 +0,0 @@
1
- """`coord/deploy/` must stay byte-identical to the repo-root `deploy/` (#1927).
2
-
3
- The unit-drift check (`coord/health/checks/unit_drift.py`) diffs each host's
4
- installed systemd unit against the units *packaged with the installed
5
- release*. Those live under `coord/deploy/` so they ship in the wheel — a
6
- reference that cannot drift with the host's git checkout.
7
-
8
- The reviewed source of truth is still the repo-root `deploy/`: it is what
9
- every unit header, doc and provisioning script names, and what the other
10
- `tests/test_deploy_*.py` modules read. The packaged copy is exactly that,
11
- copied. This module is what stops the copy from going stale — the failure
12
- mode is silent and nasty, because a stale packaged unit would make the
13
- release *look* verified while comparing against the wrong file.
14
-
15
- Nothing here needs a fleet, a config or a clock: it is a repo-layout
16
- assertion.
17
- """
18
-
19
- from __future__ import annotations
20
-
21
- from pathlib import Path
22
-
23
- import pytest
24
-
25
- REPO_ROOT = Path(__file__).resolve().parent.parent
26
- SOURCE_DIR = REPO_ROOT / "deploy"
27
- PACKAGED_DIR = REPO_ROOT / "coord" / "deploy"
28
-
29
- UNIT_GLOBS = ("*.service", "*.timer")
30
-
31
-
32
- def _units(directory: Path) -> dict[str, Path]:
33
- out: dict[str, Path] = {}
34
- for pattern in UNIT_GLOBS:
35
- for path in directory.glob(pattern):
36
- out[path.name] = path
37
- return out
38
-
39
-
40
- SOURCE_UNITS = _units(SOURCE_DIR)
41
-
42
-
43
- def test_source_deploy_dir_has_units() -> None:
44
- """Guards the guard: an empty source dir would make every other
45
- assertion here vacuously true."""
46
- assert "coord-serve.service" in SOURCE_UNITS
47
- assert "coord-agent.service" in SOURCE_UNITS
48
-
49
-
50
- def test_packaged_dir_covers_every_source_unit() -> None:
51
- missing = sorted(set(SOURCE_UNITS) - set(_units(PACKAGED_DIR)))
52
- assert not missing, (
53
- f"deploy/ has units the wheel would not ship: {missing}. "
54
- "Run: cp deploy/*.service deploy/*.timer coord/deploy/"
55
- )
56
-
57
-
58
- def test_packaged_dir_has_no_units_of_its_own() -> None:
59
- extra = sorted(set(_units(PACKAGED_DIR)) - set(SOURCE_UNITS))
60
- assert not extra, (
61
- f"coord/deploy/ carries units deploy/ does not: {extra}. The "
62
- "repo-root deploy/ is the reviewed source of truth; delete these or "
63
- "add them there."
64
- )
65
-
66
-
67
- @pytest.mark.parametrize("name", sorted(SOURCE_UNITS))
68
- def test_packaged_unit_is_byte_identical(name: str) -> None:
69
- """A drifted copy is worse than no copy: the check would report a
70
- confident green against the wrong reference."""
71
- packaged = PACKAGED_DIR / name
72
- assert packaged.exists(), f"missing coord/deploy/{name}"
73
- assert packaged.read_bytes() == (SOURCE_DIR / name).read_bytes(), (
74
- f"coord/deploy/{name} has drifted from deploy/{name}. deploy/ is the "
75
- f"source of truth — run: cp deploy/{name} coord/deploy/{name}"
76
- )
77
-
78
-
79
- def test_pyproject_ships_the_packaged_units() -> None:
80
- """The copy is only worth having if setuptools puts it in the wheel."""
81
- import tomllib
82
-
83
- data = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text())
84
- patterns = data["tool"]["setuptools"]["package-data"]["coord"]
85
- assert any(p.startswith("deploy/") for p in patterns), (
86
- "coord/deploy/ is not in [tool.setuptools.package-data]; the wheel "
87
- "would ship no reference units and every host would fall back to its "
88
- "own unverified checkout (#1927)"
89
- )