code-coordinator 0.5.222__tar.gz → 0.5.223__tar.gz

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