code-coordinator 0.5.251__tar.gz → 0.5.254__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 (866) hide show
  1. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/_common.py +101 -0
  5. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/drive_queue.py +56 -8
  6. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/issues.py +4 -2
  7. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/release.py +7 -6
  8. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/release_propagate.py +11 -0
  9. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/release_verify.py +30 -0
  10. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_drive_queue.py +200 -0
  11. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_release_window.py +65 -3
  12. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue_blocked_rendering.py +17 -0
  13. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue_launch_argv.py +17 -0
  14. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_propagate.py +10 -0
  15. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_roll_window_handoff.py +17 -0
  16. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_verify.py +20 -8
  17. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/reports.rs +375 -117
  18. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/tests.rs +288 -0
  19. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.claude/commands/board.md +0 -0
  20. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.claude/commands/complete-session.md +0 -0
  21. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.claude/commands/coordinator.md +0 -0
  22. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.githooks/_lib.sh +0 -0
  23. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.githooks/post-checkout +0 -0
  24. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.githooks/post-commit +0 -0
  25. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.githooks/post-merge +0 -0
  26. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/coord-ci-acceptance.yml +0 -0
  28. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/workflows/auto-release.yml +0 -0
  29. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/workflows/cargo-test.yml +0 -0
  30. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/workflows/publish.yml +0 -0
  31. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/workflows/release-tui.yml +0 -0
  32. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.github/workflows/test.yml +0 -0
  33. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/.gitignore +0 -0
  34. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/CLAUDE.md +0 -0
  35. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/GOAL.md +0 -0
  36. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/LICENSE +0 -0
  37. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/MANIFEST.in +0 -0
  38. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/README.md +0 -0
  39. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/SOURCES.txt +0 -0
  40. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/dependency_links.txt +0 -0
  41. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/entry_points.txt +0 -0
  42. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/requires.txt +0 -0
  43. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/scm_file_list.json +0 -0
  44. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/code_coordinator.egg-info/top_level.txt +0 -0
  45. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/__init__.py +0 -0
  46. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/_board_mapping.py +0 -0
  47. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/acceptance.py +0 -0
  48. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/acceptance_drivers.py +0 -0
  49. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agent.py +0 -0
  50. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agent_app.py +0 -0
  51. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agent_update.py +0 -0
  52. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agents/opencode/.gitignore +0 -0
  53. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agents/opencode/agents/work.md +0 -0
  54. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/agents/opencode/routing.jsonc +0 -0
  55. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/approved_work.py +0 -0
  56. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/board_schema.py +0 -0
  61. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/ci_fix.py +0 -0
  68. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/ci_gitlab.py +0 -0
  70. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/cli.py +0 -0
  73. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/client.py +0 -0
  74. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/__init__.py +0 -0
  75. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/acceptance.py +0 -0
  76. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/agent_ops.py +0 -0
  77. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/audit.py +0 -0
  78. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/chat.py +0 -0
  79. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/dispatch.py +0 -0
  80. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/dispatch_workers.py +0 -0
  81. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/drive.py +0 -0
  82. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/merge.py +0 -0
  86. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/milestone.py +0 -0
  87. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/plan_followup.py +0 -0
  88. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/plans.py +0 -0
  89. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/portal.py +0 -0
  90. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/pr.py +0 -0
  91. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/config.py +0 -0
  103. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/confirm_test.py +0 -0
  105. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/conflict_fix.py +0 -0
  106. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dao.py +0 -0
  107. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dashboard/__init__.py +0 -0
  108. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dashboard/fixture.py +0 -0
  109. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dashboard/index.html +0 -0
  110. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dashboard/server.py +0 -0
  111. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dashboard/terminal.py +0 -0
  112. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/db.py +0 -0
  113. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dead_end.py +0 -0
  114. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/decomposition_chat.py +0 -0
  115. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/README.md +0 -0
  116. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-agent.service +0 -0
  117. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-drive-queue.service +0 -0
  121. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-drive-queue.timer +0 -0
  122. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-failure-notify.service +0 -0
  123. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-fleet-watchdog.service +0 -0
  124. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  125. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-notify.service +0 -0
  126. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-notify.timer +0 -0
  127. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-release-propagate.service +0 -0
  128. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-release-propagate.timer +0 -0
  129. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-release-window.service +0 -0
  130. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-release-window.timer +0 -0
  131. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-serve.service +0 -0
  132. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-web-dist-build.service +0 -0
  133. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-web-dist-build.timer +0 -0
  134. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy/coord-web.service +0 -0
  135. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy_manifest.py +0 -0
  136. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deploy_units.py +0 -0
  137. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/deps.py +0 -0
  138. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/diagnose.py +0 -0
  139. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dispatch.py +0 -0
  140. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/dist_name.py +0 -0
  141. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/drive.py +0 -0
  142. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/drive_queue.py +0 -0
  143. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/drive_state.py +0 -0
  144. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/events.py +0 -0
  145. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/failure_class.py +0 -0
  146. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/filelock.py +0 -0
  147. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/fleet_config_health.py +0 -0
  148. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/forge_availability.py +0 -0
  149. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/freshness.py +0 -0
  150. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/gate_a.py +0 -0
  151. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/gate_b.py +0 -0
  152. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/gate_snapshot.py +0 -0
  153. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/gates.py +0 -0
  154. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/github_ops.py +0 -0
  155. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/github_throttle.py +0 -0
  156. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/goal.py +0 -0
  157. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/graph_health.py +0 -0
  158. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/__init__.py +0 -0
  159. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/aggregate.py +0 -0
  160. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/__init__.py +0 -0
  161. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/agent_install.py +0 -0
  162. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/cargo_targets.py +0 -0
  163. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/claude_binary.py +0 -0
  164. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/coord_web_ci_pin.py +0 -0
  165. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/deploy_lane_facts.py +0 -0
  166. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/disk.py +0 -0
  167. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/fleet_board.py +0 -0
  168. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  169. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/fleet_phantom.py +0 -0
  170. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/fleet_unit_drift.py +0 -0
  171. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/graph.py +0 -0
  172. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/graphify_cli.py +0 -0
  173. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/index_lock.py +0 -0
  174. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/plan_usage.py +0 -0
  175. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/release_cordon.py +0 -0
  176. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/repo_state.py +0 -0
  177. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/spawned_coord.py +0 -0
  178. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/stalled_pipeline.py +0 -0
  179. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/timer_active.py +0 -0
  180. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/toolchain.py +0 -0
  181. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/unit_drift.py +0 -0
  182. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/unit_enablement.py +0 -0
  183. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/checks/worktrees.py +0 -0
  184. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/cli.py +0 -0
  185. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/context.py +0 -0
  186. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/fleet_snapshot.py +0 -0
  187. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/models.py +0 -0
  188. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/pypi.py +0 -0
  189. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/registry.py +0 -0
  190. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/render.py +0 -0
  191. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/health/units.py +0 -0
  192. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/hooks.py +0 -0
  193. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/housekeeping.py +0 -0
  194. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/interactive.py +0 -0
  195. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/issue_store.py +0 -0
  196. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/liveness_auditor.py +0 -0
  197. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/machine_pause.py +0 -0
  198. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/merge_queue.py +0 -0
  199. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/milestone_chat.py +0 -0
  200. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/milestone_dispatch.py +0 -0
  201. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/milestone_gate.py +0 -0
  202. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/milestone_order.py +0 -0
  203. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/mock_author.py +0 -0
  204. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/models.py +0 -0
  205. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/network.py +0 -0
  206. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/new_issue_chat.py +0 -0
  207. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/__init__.py +0 -0
  208. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/baseline.py +0 -0
  209. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/cli.py +0 -0
  210. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/collect.py +0 -0
  211. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/digest.py +0 -0
  212. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/models.py +0 -0
  213. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/predicate.py +0 -0
  214. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/service.py +0 -0
  215. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/store.py +0 -0
  216. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notifier/transport.py +0 -0
  217. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/notify.py +0 -0
  218. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/openapi.py +0 -0
  219. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/overlap_fence.py +0 -0
  220. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/overlap_predict.py +0 -0
  221. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/parentage.py +0 -0
  222. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/parentage_github.py +0 -0
  223. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/pipeline.py +0 -0
  224. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/plan_parser.py +0 -0
  225. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/plans.py +0 -0
  226. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/platform_paths.py +0 -0
  227. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/portal_bridge.py +0 -0
  228. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/portal_store.py +0 -0
  229. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/portal_sync.py +0 -0
  230. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/pr_body_lint.py +0 -0
  231. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/prereqs.py +0 -0
  232. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/progress.py +0 -0
  233. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/providers/__init__.py +0 -0
  234. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/providers/base.py +0 -0
  235. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/providers/claude.py +0 -0
  236. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/providers/claude_pty.py +0 -0
  237. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/providers/opencode.py +0 -0
  238. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/queue_diagnose.py +0 -0
  239. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/reconcile.py +0 -0
  240. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/reconcile_tick.py +0 -0
  241. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/refine_chat.py +0 -0
  242. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/release_cordon.py +0 -0
  243. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/release_window.py +0 -0
  244. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/repo_edit.py +0 -0
  245. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/repo_onboard.py +0 -0
  246. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/reports.py +0 -0
  247. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/revalidate.py +0 -0
  248. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/review.py +0 -0
  249. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/scorecard.py +0 -0
  250. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/self_health.py +0 -0
  251. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/serve_app.py +0 -0
  252. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  259. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  260. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/skills/update-issue/SKILL.md +0 -0
  261. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/smoke.py +0 -0
  262. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/spend_ceiling.py +0 -0
  263. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/split_work.py +0 -0
  264. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/sql.py +0 -0
  265. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/stage_projection.py +0 -0
  266. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/state.py +0 -0
  267. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/test_author.py +0 -0
  268. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/test_chat.py +0 -0
  269. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/test_orchestrator.py +0 -0
  270. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/test_report.py +0 -0
  271. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/tui_release.py +0 -0
  272. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/usage.py +0 -0
  273. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/usage_limits.py +0 -0
  274. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/usage_rollup.py +0 -0
  275. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coord/worker_events.py +0 -0
  276. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/coordinator.example.yml +0 -0
  277. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-agent.service +0 -0
  278. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-db-backup.service +0 -0
  279. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-db-backup.sh +0 -0
  280. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-db-backup.timer +0 -0
  281. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-drive-queue.service +0 -0
  282. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-drive-queue.timer +0 -0
  283. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-failure-notify.service +0 -0
  284. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-failure-notify.sh +0 -0
  285. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-fleet-watchdog.service +0 -0
  286. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-fleet-watchdog.timer +0 -0
  287. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-notify.service +0 -0
  288. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-notify.timer +0 -0
  289. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-release-propagate.service +0 -0
  290. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-release-propagate.timer +0 -0
  291. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-release-window.service +0 -0
  292. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-release-window.timer +0 -0
  293. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-serve.service +0 -0
  294. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-web-dist-build.service +0 -0
  295. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-web-dist-build.sh +0 -0
  296. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-web-dist-build.timer +0 -0
  297. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-web-rollback.sh +0 -0
  298. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/coord-web.service +0 -0
  299. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/deploy/node-shim.sh +0 -0
  300. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  301. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ADR_COORD_WEB_CI.md +0 -0
  302. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ADR_COORD_WEB_DIST.md +0 -0
  303. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/AGENT_OPERATIONS.md +0 -0
  304. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ARCHITECTURE.md +0 -0
  305. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ARCH_SECURITY_GATES.md +0 -0
  306. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/COCKPIT.md +0 -0
  307. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/CONTROL_CENTER.md +0 -0
  308. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/COST_DISCIPLINE.md +0 -0
  309. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/CROSS_PLATFORM.md +0 -0
  310. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/CUSTOMER_FACING_APPS.md +0 -0
  311. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/CUSTOMER_PORTAL.md +0 -0
  312. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/DRIVE_QUEUE.md +0 -0
  313. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/EPHEMERAL_WORKERS.md +0 -0
  314. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/FORGE_MIGRATION.md +0 -0
  315. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/GRAPHIFY_SETUP.md +0 -0
  316. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ISSUE_GUIDANCE.md +0 -0
  317. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/MAC_MINI.md +0 -0
  318. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  319. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/NOTIFIER.md +0 -0
  320. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/OPENCODE_VERIFICATION.md +0 -0
  321. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/OPERATING_GOTCHAS.md +0 -0
  322. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/OPERATOR_GUIDES.md +0 -0
  323. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/ORACLE_LOOP.md +0 -0
  324. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/PHONE_WEBAPP.md +0 -0
  325. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/PIPELINE_V2.md +0 -0
  326. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/PLATFORM_EVOLUTION.md +0 -0
  327. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/SECOND_BACKEND.md +0 -0
  328. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/STORE_SERVICE.md +0 -0
  329. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  330. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/WEB_CONTROL_CENTER.md +0 -0
  331. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/WSL_WINDOWS_WORKER.md +0 -0
  332. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/mocks/web/README.md +0 -0
  333. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/mocks/web/_tokens.css +0 -0
  334. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/mocks/web/issue-detail.html +0 -0
  335. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/mocks/web/pipeline-narrow.html +0 -0
  336. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/docs/mocks/web/pipeline-wide.html +0 -0
  337. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/graphify-out/.gitignore +0 -0
  338. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/install-agent.sh +0 -0
  339. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/pyproject.toml +0 -0
  340. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/audit_review_verdict_overrides.py +0 -0
  341. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  342. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/build-worker-image.sh +0 -0
  343. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/coordinator-machine.py +0 -0
  344. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/epic-down.sh +0 -0
  345. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/epic-up.sh +0 -0
  346. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/preflight.sh +0 -0
  347. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/provision-worker.sh +0 -0
  348. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  349. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  350. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/azure-workers/verify-github-token.sh +0 -0
  351. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/check_gh_argv_containment.py +0 -0
  352. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/codegen.py +0 -0
  353. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/coord-test-runner.sh +0 -0
  354. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/coord-venv-rollback.sh +0 -0
  355. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/drive-batch.sh +0 -0
  356. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/fleet_watchdog.py +0 -0
  357. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/gen_board_fixture.py +0 -0
  358. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/gen_mock_index.py +0 -0
  359. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/next_release_tag.py +0 -0
  360. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/run_tests_in_populated_home.sh +0 -0
  361. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/run_tests_without_gh.sh +0 -0
  362. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/smoke_437_interactive.py +0 -0
  363. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/verify_878_review_capture.py +0 -0
  364. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/verify_release_published.py +0 -0
  365. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/scripts/verify_release_wheel.py +0 -0
  366. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/setup.cfg +0 -0
  367. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/SMOKE_SET.md +0 -0
  368. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/__init__.py +0 -0
  369. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  370. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/contract.md +0 -0
  371. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/manifest.yml +0 -0
  372. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  373. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  374. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  375. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  376. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-37/conftest.py +0 -0
  377. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-37/contract.md +0 -0
  378. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-37/manifest.yml +0 -0
  379. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  380. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  381. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/contract.md +0 -0
  382. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/manifest.yml +0 -0
  383. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  384. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  385. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  386. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  387. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  388. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  389. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  390. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  391. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  392. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  393. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/contract.md +0 -0
  394. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  395. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  396. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/manifest.yml +0 -0
  397. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  398. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-51/tsconfig.json +0 -0
  399. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  400. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  401. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  402. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/contract.md +0 -0
  403. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  404. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/manifest.yml +0 -0
  405. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  406. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  407. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  408. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  409. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  410. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  411. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  412. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  413. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  414. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  415. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  416. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  417. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/contract.md +0 -0
  418. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  419. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/manifest.yml +0 -0
  420. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  421. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  422. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  423. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  424. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  425. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  426. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  427. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/conftest.py +0 -0
  428. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/board-pipeline-basic.json +0 -0
  429. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  430. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  431. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  432. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  433. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/all_pass.json +0 -0
  434. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  435. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/mixed_fail.json +0 -0
  436. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  437. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  438. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/skip.json +0 -0
  439. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/playwright/truncated.json +0 -0
  440. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  441. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  442. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  443. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  444. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  445. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  446. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  447. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  448. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_acceptance.py +0 -0
  449. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_acceptance_drivers.py +0 -0
  450. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent.py +0 -0
  451. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_api_error.py +0 -0
  452. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_app.py +0 -0
  453. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_branch_base.py +0 -0
  454. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_branch_capture.py +0 -0
  455. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_config_free_1712.py +0 -0
  456. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_deploy_units_endpoint.py +0 -0
  457. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_dirty_worktree.py +0 -0
  458. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  459. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_graph_self_heal.py +0 -0
  460. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_health_h3.py +0 -0
  461. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_idle_restart.py +0 -0
  462. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_push_failure.py +0 -0
  463. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_reap.py +0 -0
  464. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_repos_and_pull.py +0 -0
  465. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_restart_services_endpoint.py +0 -0
  466. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_skills_self_heal.py +0 -0
  467. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_startup_diagnostics.py +0 -0
  468. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_update.py +0 -0
  469. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_update_bluegreen.py +0 -0
  470. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_usage_limit.py +0 -0
  471. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_agent_zero_commit.py +0 -0
  472. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ambient_home_isolation.py +0 -0
  473. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_approve_dependency_busy_2804.py +0 -0
  474. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_approve_reject_plan.py +0 -0
  475. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_approve_usage_gate.py +0 -0
  476. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_approved_work_2532.py +0 -0
  477. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_assignment_already_recorded_daemon.py +0 -0
  478. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_audit_log.py +0 -0
  479. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_audit_outcome.py +0 -0
  480. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_audit_query.py +0 -0
  481. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_auto_loop.py +0 -0
  482. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_auto_release_publish_2035.py +0 -0
  483. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_base_checkout_restore.py +0 -0
  484. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_block_log.py +0 -0
  485. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_cap_762.py +0 -0
  486. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_fixture.py +0 -0
  487. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_read_path.py +0 -0
  488. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_schema.py +0 -0
  489. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_service.py +0 -0
  490. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_state.py +0 -0
  491. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_board_wire.py +0 -0
  492. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_brain.py +0 -0
  493. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_branch_model.py +0 -0
  494. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_bug_intake.py +0 -0
  495. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_build_worker_image_env_update.py +0 -0
  496. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cargo_cache.py +0 -0
  497. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_check_gh_argv_containment.py +0 -0
  498. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ci_acceptance_gate_1950.py +0 -0
  499. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ci_fix.py +0 -0
  500. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ci_gitlab.py +0 -0
  501. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ci_parity_2091.py +0 -0
  502. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_ci_store.py +0 -0
  503. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_claim.py +0 -0
  504. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_claude_md_budget.py +0 -0
  505. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_acceptance.py +0 -0
  506. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_assign.py +0 -0
  507. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  508. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_assign_interactive_remote.py +0 -0
  509. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_assign_provider.py +0 -0
  510. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  511. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_audit.py +0 -0
  512. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_chat_continue.py +0 -0
  513. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_decide.py +0 -0
  514. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_diagnose_config_provenance.py +0 -0
  515. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_diagnose_forge_availability.py +0 -0
  516. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_diagnose_graph.py +0 -0
  517. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_diagnose_self.py +0 -0
  518. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_doctor.py +0 -0
  519. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_doctor_config_free_1801.py +0 -0
  520. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  521. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_drive.py +0 -0
  522. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_escalate.py +0 -0
  523. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_fix_headless_review.py +0 -0
  524. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_gate_a.py +0 -0
  525. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_install_drift.py +0 -0
  526. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_install_skills.py +0 -0
  527. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_issue_comment.py +0 -0
  528. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_issue_create_label.py +0 -0
  529. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_issue_reopen.py +0 -0
  530. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_issue_view_list.py +0 -0
  531. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_merge.py +0 -0
  532. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_pr.py +0 -0
  546. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_pull_artifact.py +0 -0
  547. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_queue.py +0 -0
  548. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_reattach_sessions.py +0 -0
  549. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_refine_board.py +0 -0
  550. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_release_preflight.py +0 -0
  551. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_release_propagate.py +0 -0
  552. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_repo_2220.py +0 -0
  553. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  554. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_scorecard.py +0 -0
  555. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_set_review_findings.py +0 -0
  556. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_advisory_terminal.py +0 -0
  557. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_contested_tag.py +0 -0
  558. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_merge_queue.py +0 -0
  559. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_provider.py +0 -0
  560. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_review_finalizing.py +0 -0
  561. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_test_failed_tag.py +0 -0
  562. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_status_usage_limit.py +0 -0
  563. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_sync_comments_873.py +0 -0
  564. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_test_plan.py +0 -0
  565. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_track.py +0 -0
  566. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_tui_update.py +0 -0
  567. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cli_wait.py +0 -0
  568. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_client_base_install.py +0 -0
  569. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_commands_common.py +0 -0
  570. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_comments.py +0 -0
  571. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_completion_summary.py +0 -0
  572. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config.py +0 -0
  573. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config_acceptance.py +0 -0
  574. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config_audit.py +0 -0
  575. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config_pricing.py +0 -0
  576. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  577. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_config_usage_gate.py +0 -0
  578. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_confirm_test.py +0 -0
  579. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_conflict_fix.py +0 -0
  580. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_conflict_fix_semantic.py +0 -0
  581. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  582. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_test.py +0 -0
  583. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_test_runner_baseline.py +0 -0
  584. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_test_runner_populated_home.py +0 -0
  585. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_test_runner_routing.py +0 -0
  586. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_test_runner_toolchain.py +0 -0
  587. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_uat.py +0 -0
  588. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coord_web_sse_restart_live.py +0 -0
  589. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_coordinator_machine.py +0 -0
  590. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_cross_platform_imports.py +0 -0
  591. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dao.py +0 -0
  592. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dashboard.py +0 -0
  593. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dashboard_fixture.py +0 -0
  594. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dashboard_terminal.py +0 -0
  595. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dashboard_terminal_live.py +0 -0
  596. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_db.py +0 -0
  597. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dead_end.py +0 -0
  598. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_decomposition_chat.py +0 -0
  599. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_coord_db_backup.py +0 -0
  600. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_coord_web_dist.py +0 -0
  601. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_coord_web_rollback.py +0 -0
  602. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_drive_queue_unit.py +0 -0
  603. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_failure_notify_unit.py +0 -0
  604. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_manifest.py +0 -0
  605. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_notify_unit.py +0 -0
  606. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_units_lane.py +0 -0
  607. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deploy_web_unit.py +0 -0
  608. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_deps.py +0 -0
  609. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_diagnose.py +0 -0
  610. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dispatch.py +0 -0
  611. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dispatch_target_validation.py +0 -0
  612. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_dist_name.py +0 -0
  613. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_done_housekeeping.py +0 -0
  614. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive.py +0 -0
  615. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue.py +0 -0
  616. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  617. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue_roll_pending.py +0 -0
  618. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  619. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_state.py +0 -0
  620. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_drive_tmux.py +0 -0
  621. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_epic_up_capability_detection.py +0 -0
  622. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  623. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_epic_up_image_provenance.py +0 -0
  624. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_errors.py +0 -0
  625. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_events.py +0 -0
  626. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_failure_class.py +0 -0
  627. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_filelock.py +0 -0
  628. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  629. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_fix_of_force_override.py +0 -0
  630. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_fleet_config_health.py +0 -0
  631. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_fleet_health_probes.py +0 -0
  632. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_fleet_health_snapshot.py +0 -0
  633. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_fleet_watchdog.py +0 -0
  634. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_forge_availability.py +0 -0
  635. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_freshness.py +0 -0
  636. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gate_a.py +0 -0
  637. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gate_b.py +0 -0
  638. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gate_snapshot_staleness.py +0 -0
  639. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gates.py +0 -0
  640. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  641. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_gen_mock_index.py +0 -0
  642. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_generated_rust_fixture.py +0 -0
  643. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_generated_types_fixture.py +0 -0
  644. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_github_ops.py +0 -0
  645. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_github_throttle.py +0 -0
  646. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_goal.py +0 -0
  647. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_graph_health.py +0 -0
  648. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_graph_selfheal_absent_2237.py +0 -0
  649. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_handoff.py +0 -0
  650. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_checks.py +0 -0
  651. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_cli.py +0 -0
  652. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_cli_graph.py +0 -0
  653. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_config.py +0 -0
  654. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_context.py +0 -0
  655. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_coord_web_ci_pin.py +0 -0
  656. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_deploy_lane_facts.py +0 -0
  657. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_fix.py +0 -0
  658. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_incident_regression.py +0 -0
  659. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_pypi.py +0 -0
  660. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_registry.py +0 -0
  661. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_release_cordon_probe.py +0 -0
  662. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_timer_active.py +0 -0
  663. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_toolchain.py +0 -0
  664. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_unit_drift.py +0 -0
  665. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_health_unit_enablement.py +0 -0
  666. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_hooks.py +0 -0
  667. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_human_attended_437.py +0 -0
  668. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_init.py +0 -0
  669. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_integration.py +0 -0
  670. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_briefing_echo.py +0 -0
  671. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_pane_log_2541.py +0 -0
  672. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_prefill_state.py +0 -0
  673. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_session_relaunch.py +0 -0
  674. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_test_verdict_backstop.py +0 -0
  675. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_token_attribution.py +0 -0
  676. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_interactive_worktree.py +0 -0
  677. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_issue_store_seam.py +0 -0
  678. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_liveness_auditor.py +0 -0
  679. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_liveness_notify.py +0 -0
  680. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_machine_pause.py +0 -0
  681. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_merge_queue.py +0 -0
  682. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_merge_verify.py +0 -0
  683. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_milestone_chat.py +0 -0
  684. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_milestone_dispatch.py +0 -0
  685. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_milestone_gate.py +0 -0
  686. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_milestone_order.py +0 -0
  687. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_milestone_seam.py +0 -0
  688. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_mock_author.py +0 -0
  689. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_model_tiering.py +0 -0
  690. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_models.py +0 -0
  691. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_models_config_labels.py +0 -0
  692. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_needs_attention.py +0 -0
  693. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_network.py +0 -0
  694. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_new_issue_chat.py +0 -0
  695. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_next_release_tag.py +0 -0
  696. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_node_shim.py +0 -0
  697. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_baseline.py +0 -0
  698. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_cli.py +0 -0
  699. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_collect.py +0 -0
  700. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_config.py +0 -0
  701. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_drive_seam.py +0 -0
  702. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_isolation.py +0 -0
  703. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_predicate.py +0 -0
  704. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_quiet_hours.py +0 -0
  705. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notifier_service.py +0 -0
  706. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notify.py +0 -0
  707. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_notify_drain.py +0 -0
  708. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_openapi.py +0 -0
  709. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_operational_defaults.py +0 -0
  710. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_overlap_fence.py +0 -0
  711. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_overlap_predict.py +0 -0
  712. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_packaged_deploy_units.py +0 -0
  713. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_parentage.py +0 -0
  714. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_paste_landed.py +0 -0
  715. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  716. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_pipeline.py +0 -0
  717. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_plan_followup_approve_plan_command.py +0 -0
  718. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_plan_followup_pr_command.py +0 -0
  719. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_plan_followup_review_command.py +0 -0
  720. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_plan_only.py +0 -0
  721. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_plan_parser.py +0 -0
  722. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_platform_paths.py +0 -0
  723. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_portal_bridge.py +0 -0
  724. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_portal_config.py +0 -0
  725. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_portal_store.py +0 -0
  726. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_portal_sync.py +0 -0
  727. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_pr_body_lint.py +0 -0
  728. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_prereqs.py +0 -0
  729. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_production_db_guard.py +0 -0
  730. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_progress.py +0 -0
  731. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_provider_seam.py +0 -0
  732. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_providers.py +0 -0
  733. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_providers_config_labels.py +0 -0
  734. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_providers_pty.py +0 -0
  735. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_quiet_hours.py +0 -0
  736. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_quiet_hours_store_2146.py +0 -0
  737. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reap_merged_sessions.py +0 -0
  738. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reap_stale_interactive_tick.py +0 -0
  739. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile.py +0 -0
  740. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_branch.py +0 -0
  741. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_completions.py +0 -0
  742. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  743. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_merges.py +0 -0
  744. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_no_agent_record.py +0 -0
  745. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_tick.py +0 -0
  746. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reconcile_usage_limit_done.py +0 -0
  747. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_refine_chat.py +0 -0
  748. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_cordon_2101.py +0 -0
  749. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  750. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_cordon_deadlock_2240.py +0 -0
  751. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_cordon_stuck_2490.py +0 -0
  752. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_propagate_threshold.py +0 -0
  753. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_unified_1242.py +0 -0
  754. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_release_window.py +0 -0
  755. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_remote_auto_prune.py +0 -0
  756. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_remote_interactive_reaper.py +0 -0
  757. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_repo_add.py +0 -0
  758. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_repo_edit_2220.py +0 -0
  759. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_repo_graph_fleet_2237.py +0 -0
  760. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_repo_onboard_2220.py +0 -0
  761. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_report_result_push.py +0 -0
  762. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_reports.py +0 -0
  763. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_retry.py +0 -0
  764. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_retry_advisory_1606.py +0 -0
  765. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_retry_type_1636.py +0 -0
  766. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_revalidate.py +0 -0
  767. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review.py +0 -0
  768. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_end_review_without_verdict.py +0 -0
  769. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_parse_failure_diagnostic.py +0 -0
  770. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_reaffirm.py +0 -0
  771. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_state.py +0 -0
  772. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_verdict_backstop.py +0 -0
  773. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_verdict_override_audit.py +0 -0
  774. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_verdict_relay.py +0 -0
  775. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_review_zero_commits.py +0 -0
  776. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_scoped_review_wiring.py +0 -0
  777. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_scorecard.py +0 -0
  778. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_self_health.py +0 -0
  779. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_serve.py +0 -0
  780. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_serve_app_board_trim.py +0 -0
  781. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_session.py +0 -0
  782. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_slice_issue_attribution.py +0 -0
  783. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_smoke.py +0 -0
  784. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_smoke_live_checkout_restore.py +0 -0
  785. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_smoke_workflow.py +0 -0
  786. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_spend_ceiling.py +0 -0
  787. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_spend_ceiling_coordinator.py +0 -0
  788. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_split.py +0 -0
  789. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_split_work.py +0 -0
  790. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_sql_dialect.py +0 -0
  791. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_stage_projection.py +0 -0
  792. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_stalled_pipeline.py +0 -0
  793. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_state.py +0 -0
  794. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_state_review_findings_daemon.py +0 -0
  795. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_status_fleet_footer.py +0 -0
  796. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_stop_1567.py +0 -0
  797. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_store_contract.py +0 -0
  798. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_stuck.py +0 -0
  799. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  800. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_terminal_command.py +0 -0
  801. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_author.py +0 -0
  802. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_chat.py +0 -0
  803. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_orchestrator.py +0 -0
  804. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_report.py +0 -0
  805. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_verdict_parsing.py +0 -0
  806. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_test_verdict_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_text_io_encoding_audit.py +0 -0
  808. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_thin_client_board_audit.py +0 -0
  809. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_thin_client_config_load_1080.py +0 -0
  810. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_thin_client_daemon_routing_906.py +0 -0
  811. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_tmux_host.py +0 -0
  812. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_tmux_session.py +0 -0
  813. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_transcript_floor.py +0 -0
  814. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_usage.py +0 -0
  815. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_usage_limits.py +0 -0
  816. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_usage_rollup.py +0 -0
  817. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_venv_live_install_2121.py +0 -0
  818. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_version_single_source.py +0 -0
  819. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_watch.py +0 -0
  820. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  821. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worker_env_venv_isolation.py +0 -0
  822. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worker_events.py +0 -0
  823. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worker_image_pin_sync.py +0 -0
  824. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worker_safety.py +0 -0
  825. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worker_test_scoping.py +0 -0
  826. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worktree.py +0 -0
  827. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  828. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/Cargo.lock +0 -0
  829. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/Cargo.toml +0 -0
  830. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/cargo-config-local-quadraui.toml.example +0 -0
  831. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/approved.rs +0 -0
  832. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/audit.rs +0 -0
  833. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/chat.rs +0 -0
  834. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/data.rs +0 -0
  835. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/dialogs.rs +0 -0
  836. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/doc_tabs.rs +0 -0
  837. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/drive.rs +0 -0
  838. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/drive_queue.rs +0 -0
  839. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/escalation.rs +0 -0
  840. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/events.rs +0 -0
  841. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/fixtures.rs +0 -0
  842. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/fleet_health.rs +0 -0
  843. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/fleet_sessions.rs +0 -0
  844. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/fleet_terminals.rs +0 -0
  845. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/format.rs +0 -0
  846. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/milestone_dag.rs +0 -0
  847. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/mod.rs +0 -0
  848. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/msv.rs +0 -0
  849. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/pipeline.rs +0 -0
  850. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/plans.rs +0 -0
  851. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/render.rs +0 -0
  852. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/sessions.rs +0 -0
  853. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/settings_ui.rs +0 -0
  854. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/sidebar.rs +0 -0
  855. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/terminal.rs +0 -0
  856. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/types/generated.rs +0 -0
  857. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/types.rs +0 -0
  858. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/app/workspace.rs +0 -0
  859. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/bin/gtk.rs +0 -0
  860. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/commands.rs +0 -0
  861. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/lib.rs +0 -0
  862. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/main.rs +0 -0
  863. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/src/settings.rs +0 -0
  864. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/tests/acceptance.rs +0 -0
  865. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/tui/tests/cli.rs +0 -0
  866. {code_coordinator-0.5.251 → code_coordinator-0.5.254}/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.251
3
+ Version: 0.5.254
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.251
3
+ Version: 0.5.254
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.251",
2
+ "tag": "0.5.254",
3
3
  "distance": 0,
4
- "node": "ga297b60b58a3ad1b5c13f4a8173011ce3c4378dc",
4
+ "node": "g83ff84b37c57af71b3aa15734da48e4c5a1f2c5f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-27"
@@ -19,6 +19,7 @@ the server stack at import time. Keep it that way:
19
19
  from __future__ import annotations
20
20
 
21
21
  import json
22
+ import logging
22
23
  import socket
23
24
  import sys
24
25
  import time
@@ -42,6 +43,8 @@ from coord.config import (
42
43
  if TYPE_CHECKING: # pragma: no cover — typing only
43
44
  from collections.abc import Iterator
44
45
 
46
+ log = logging.getLogger(__name__)
47
+
45
48
  # Canonical constant in coord.brain.AGENT_PORT — duplicated here as a literal
46
49
  # so the CLI decorator default doesn't have to import the brain (and, through
47
50
  # it, the provider stack) on every `coord` invocation.
@@ -470,6 +473,104 @@ def _apply_label_change(
470
473
  click.echo(success_message)
471
474
 
472
475
 
476
+ # #2839: Pipeline membership label set — shared by `coord track` (the
477
+ # interactive "send to Pipeline" door, above) and `coord drive-queue add`
478
+ # (the queueing door, `coord/commands/drive_queue.py`). Enqueueing a drive is
479
+ # a strictly STRONGER statement than "send to Pipeline", so its label write
480
+ # must never be weaker than `track`'s own — kept as one literal pair so the
481
+ # two doors cannot drift apart.
482
+ PIPELINE_TRACK_LABELS_ADD = {"coord", "status:ready"}
483
+ PIPELINE_TRACK_LABELS_REMOVE_IF_PRESENT = {"status:refining", "status:backlog"}
484
+
485
+
486
+ def resolve_repo_slug_best_effort(config: Config | None, repo: str) -> str | None:
487
+ """Non-fatal sibling of :func:`_resolve_repo_slug` (#2839 review).
488
+
489
+ Returns the GitHub ``OWNER/REPO`` slug for *repo*, or ``None`` when it
490
+ cannot be determined. Unlike ``_resolve_repo_slug`` it never calls
491
+ ``sys.exit`` — it is for callers whose own job is not "talk to the
492
+ forge", where an unresolvable name must degrade rather than abort.
493
+
494
+ *config* is ``None`` when the caller could not load one at all (a thin
495
+ client whose board daemon is momentarily unreachable); that is a
496
+ legitimate, expected input, not an error.
497
+ """
498
+ if config is not None:
499
+ repo_entry = config.repo(repo)
500
+ if repo_entry is not None:
501
+ return repo_entry.github
502
+ # Not in coordinator.yml (or no config at all): a raw `OWNER/REPO` slug is
503
+ # still directly usable by the forge backend — same accepted fallback
504
+ # `_resolve_repo_slug` validates. Anything else is a bare local name we
505
+ # cannot map, so say so with `None` rather than guessing.
506
+ if "/" in repo:
507
+ return repo
508
+ return None
509
+
510
+
511
+ def apply_pipeline_track_labels_best_effort(
512
+ repo: str, issue: int, *, config: Config | None,
513
+ ) -> None:
514
+ """Best-effort ``coord`` + ``status:ready`` label application (#2839).
515
+
516
+ Non-blocking sibling of :func:`_apply_label_change` for a caller whose
517
+ own job is NOT "change labels" — today, only ``coord drive-queue add``.
518
+ Enqueuing a drive must succeed even when GitHub is unreachable: the board
519
+ row is the source of truth for queue membership, and this label is only
520
+ a best-effort projection of it onto the Pipeline. Every failure (a
521
+ missing repo, an unreachable daemon, a `gh` error) is logged and
522
+ swallowed here — never raised — so the caller's own success can never
523
+ turn on this call landing.
524
+
525
+ Idempotent by construction: ``apply_issue_labels`` (and the ``gh``
526
+ backend underneath it) tolerates already-present ``add`` labels and
527
+ already-absent ``remove`` labels, so re-running this on an
528
+ already-tracked issue is a silent no-op, not a duplicate write.
529
+
530
+ *config* is passed IN, already loaded, rather than loaded here — the two
531
+ halves of the #2839 review, together:
532
+
533
+ * It must not be loaded via ``_load_config`` inside this function.
534
+ ``_load_config`` turns a config-load failure (a thin client's
535
+ ``fetch_remote_config`` round-trip to a momentarily-unreachable board
536
+ daemon; a briefly-unreadable ``coordinator.yml``) into ``sys.exit(2)``,
537
+ and ``SystemExit`` is a ``BaseException``, not an ``Exception``, so it
538
+ would blow straight through the ``except`` below and kill the whole
539
+ ``drive-queue add`` process *after* the board row was written.
540
+ * But the slug must still be RESOLVED. ``coordinator.yml``'s ``name:``
541
+ key is routinely not the GitHub slug (this repo's own
542
+ ``coordinator.example.yml`` documents ``name: code-coordinator`` vs
543
+ ``github: JDonaghy/claude-coordinator``), and
544
+ ``_apply_issue_labels_local``'s ``repo_github or repo_name`` fallback
545
+ would hand that bare local name to ``gh issue edit --repo``, which
546
+ requires ``[HOST/]OWNER/REPO`` and errors out — so the label would
547
+ still never land for exactly the repos #2839 was filed about, only
548
+ now silently.
549
+
550
+ Taking the caller's already-loaded ``Config`` satisfies both: real slug
551
+ resolution, no second (uncachable, per-``add``) round trip to the daemon,
552
+ and no ``SystemExit`` path inside a best-effort helper. ``config=None``
553
+ is accepted and simply degrades to the ``repo_name`` fallback.
554
+ """
555
+ from coord.state import apply_issue_labels # noqa: PLC0415
556
+
557
+ try:
558
+ apply_issue_labels(
559
+ repo, issue,
560
+ add=PIPELINE_TRACK_LABELS_ADD,
561
+ remove=PIPELINE_TRACK_LABELS_REMOVE_IF_PRESENT,
562
+ repo_github=resolve_repo_slug_best_effort(config, repo),
563
+ )
564
+ except Exception as exc: # noqa: BLE001 — see docstring: must never block the enqueue
565
+ log.warning(
566
+ "drive-queue add: failed to apply Pipeline labels (coord + "
567
+ "status:ready) to %s#%s: %s — the queue row was still written; "
568
+ "the label is a projection, not the source of truth, so the "
569
+ "enqueue proceeds",
570
+ repo, issue, exc,
571
+ )
572
+
573
+
473
574
  @dataclass
474
575
  class PollOutcome:
475
576
  """Result of polling an agent's ``/status`` for one assignment until it
@@ -35,12 +35,12 @@ import socket
35
35
  import subprocess
36
36
  import time
37
37
  from pathlib import Path
38
- from typing import Any, Mapping
38
+ from typing import TYPE_CHECKING, Any, Mapping
39
39
 
40
40
  import click
41
41
 
42
42
  from coord.block_log import INTERVENTION_CATEGORIES, STALL_STATES
43
- from coord.commands._common import _CONFIG_OPTION
43
+ from coord.commands._common import _CONFIG_OPTION, apply_pipeline_track_labels_best_effort
44
44
  from coord.drive_state import WORK_LIKE
45
45
  from coord.drive_queue import (
46
46
  DEFAULT_MAX_ATTEMPTS,
@@ -105,6 +105,9 @@ from coord.overlap_predict import (
105
105
  tally,
106
106
  )
107
107
 
108
+ if TYPE_CHECKING: # pragma: no cover — typing only
109
+ from coord.config import Config
110
+
108
111
  log = logging.getLogger(__name__)
109
112
 
110
113
  # Wall-clock ceiling for the `coord drive --tmux` launch subprocess. The
@@ -335,12 +338,18 @@ def drive_queue_add(
335
338
  existing_entries = entries_from_rows(list_drive_queue())
336
339
  if max_fix_rounds is not None and max_fix_rounds < 1:
337
340
  raise click.ClickException("--max-fix-rounds must be a positive integer")
341
+ # #2839: reused below for the Pipeline label write's slug resolution, so
342
+ # that best-effort projection costs no SECOND config load (a `GET /config`
343
+ # round trip to the board daemon on a thin client). `None` on the
344
+ # documented fail-open path — an unloadable config never blocks an
345
+ # enqueue, and never blocks the label write either.
346
+ cfg: Config | None = None
338
347
  try:
339
348
  after = parse_after_spec(after_specs, repo)
340
349
  # #2603: reuses `--after`'s own `N` / `REPO#N` parsing — a rejected
341
350
  # edge is named the same way an operator would name a real one.
342
351
  reject_after = set(parse_after_spec(reject_after_specs, repo))
343
- validate_config_repo(config_path, repo)
352
+ cfg = validate_config_repo(config_path, repo)
344
353
  validate_hold_flags(hold_after, hold_reason, resume_when, hold_scope)
345
354
  validate_enqueue(existing_entries, repo, issue, after)
346
355
  except QueueError as exc:
@@ -402,6 +411,21 @@ def drive_queue_add(
402
411
  max_fix_rounds=max_fix_rounds,
403
412
  no_acceptance=no_acceptance,
404
413
  )
414
+ # #2839: queueing a drive is a strictly STRONGER statement than "send to
415
+ # Pipeline" (`coord track`), so it must never leave the issue in a
416
+ # weaker label state — apply the same `coord` + `status:ready` labels
417
+ # `track` does, resolved through the SAME `cfg` already loaded above
418
+ # (coordinator.yml's `name:` is routinely not the GitHub slug, so the
419
+ # forge needs the resolved `github:` value, not `repo`). Best-effort/
420
+ # non-blocking (a GitHub outage warns and carries on; the board row above
421
+ # is already written and is the
422
+ # source of truth for queue membership) and skipped for an entry that is
423
+ # already `running` — #2821 was mid-drive with `coord` but no
424
+ # `status:*`, and re-adding `status:ready` to a running card would
425
+ # misrepresent it as not-yet-started. This is enqueue-time ONLY: never
426
+ # mirrored onto `coord drive-queue remove`, which must not untrack.
427
+ if previous is None or previous.state != STATE_RUNNING:
428
+ apply_pipeline_track_labels_best_effort(repo, issue, config=cfg)
405
429
  if auto_after:
406
430
  _record_overlap_prediction(repo, issue, prediction, auto_after)
407
431
  suffix = f" after {', '.join(after)}" if after else ""
@@ -713,7 +737,12 @@ def _repo_coordinates(config_path: Path, repo: str) -> tuple[str, str] | None:
713
737
  from coord.commands._common import _load_config # noqa: PLC0415
714
738
 
715
739
  repo_cfg = _load_config(config_path).repo(repo)
716
- except Exception: # noqa: BLE001 — a config that won't load means no prediction
740
+ except (Exception, SystemExit): # noqa: BLE001 — a config that won't load
741
+ # means no prediction. `SystemExit` is listed for the same reason as in
742
+ # `validate_config_repo` (#2839 review): `_load_config` reports a
743
+ # `ConfigError` as `click.echo` + `sys.exit(2)`, a `BaseException`, so
744
+ # `except Exception` alone would abort `drive-queue add` here instead
745
+ # of degrading to "no overlap prediction" as documented.
717
746
  return None
718
747
  if repo_cfg is None:
719
748
  return None
@@ -878,7 +907,7 @@ def validate_hold_flags(
878
907
  )
879
908
 
880
909
 
881
- def validate_config_repo(config_path: Path, repo: str) -> None:
910
+ def validate_config_repo(config_path: Path, repo: str) -> Config | None:
882
911
  """Refuse a repo coordinator.yml has never heard of.
883
912
 
884
913
  `coord drive <repo> <issue>` would fail at preflight anyway
@@ -886,16 +915,29 @@ def validate_config_repo(config_path: Path, repo: str) -> None:
886
915
  ``add`` time turns a mysterious tick-time block into an immediate typo
887
916
  report. Fail-OPEN on a config that won't load at all: a thin client whose
888
917
  config cache is momentarily unreadable must still be able to queue work.
918
+
919
+ Returns the loaded ``Config`` (``None`` when it could not be loaded, i.e.
920
+ the fail-open path) so the caller does not have to load it a SECOND time
921
+ — on a thin client each load is a `GET /config` round trip to the board
922
+ daemon, and #2839's best-effort label write needs the same config only to
923
+ resolve `repo`'s GitHub slug.
924
+
925
+ ``SystemExit`` is caught alongside ``Exception`` deliberately (#2839
926
+ review): ``_load_config`` reports a ``ConfigError`` as ``click.echo`` +
927
+ ``sys.exit(2)``, which is a ``BaseException`` — so a bare ``except
928
+ Exception`` here would NOT fail open at all, it would abort `add` with
929
+ exit code 2, the exact opposite of this function's documented posture.
889
930
  """
890
931
  try:
891
932
  from coord.commands._common import _load_config # noqa: PLC0415
892
933
 
893
934
  config = _load_config(config_path)
894
- except Exception: # noqa: BLE001 — see the fail-open note above
895
- return
935
+ except (Exception, SystemExit): # noqa: BLE001 — see the fail-open note above
936
+ return None
896
937
  if config.repo(repo) is None:
897
938
  known = ", ".join(sorted(r.name for r in config.repos)) or "(none)"
898
939
  raise QueueError(f"repo {repo!r} is not in coordinator.yml (known: {known})")
940
+ return config
899
941
 
900
942
 
901
943
  # ── list ─────────────────────────────────────────────────────────────────────
@@ -1413,7 +1455,13 @@ def drive_queue_log_intervention(
1413
1455
  @click.argument("issue", type=int)
1414
1456
  @_CONFIG_OPTION
1415
1457
  def drive_queue_remove(repo: str, issue: int, config_path: Path) -> None:
1416
- """Drop REPO ISSUE from the queue (positions are renumbered dense)."""
1458
+ """Drop REPO ISSUE from the queue (positions are renumbered dense).
1459
+
1460
+ #2839: deliberately does NOT touch the `coord`/`status:*` labels `add`
1461
+ applies — dropping out of the drive queue is not eviction from the
1462
+ Pipeline. `coord untrack` stays the only way to evict a card; do not
1463
+ "fix" this asymmetry by mirroring `add`'s label write here.
1464
+ """
1417
1465
  from coord.state import dequeue_drive_queue, get_drive_queue_entry # noqa: PLC0415
1418
1466
 
1419
1467
  # #2235 Phase 0: read the row BEFORE deleting it, because `remove` on a
@@ -14,6 +14,8 @@ from coord.commands._common import (
14
14
  _CONFIG_OPTION,
15
15
  _load_config,
16
16
  _resolve_repo_slug,
17
+ PIPELINE_TRACK_LABELS_ADD,
18
+ PIPELINE_TRACK_LABELS_REMOVE_IF_PRESENT,
17
19
  )
18
20
 
19
21
 
@@ -783,8 +785,8 @@ def track(repo: str, issue: int, config_path: Path) -> None:
783
785
  slug = _resolve_repo_slug(cfg, repo)
784
786
  _apply_label_change(
785
787
  repo, issue, config_path,
786
- add={"coord", "status:ready"},
787
- remove_if_present={"status:refining", "status:backlog"},
788
+ add=PIPELINE_TRACK_LABELS_ADD,
789
+ remove_if_present=PIPELINE_TRACK_LABELS_REMOVE_IF_PRESENT,
788
790
  success_message=(
789
791
  f"#{issue} ({slug}) sent to Pipeline (coord + status:ready)"
790
792
  ),
@@ -1337,16 +1337,17 @@ def _python_lane_versions(
1337
1337
  """``{host: the OLDEST version its python lane reports}`` (#2101).
1338
1338
 
1339
1339
  "Python lane" is whatever :func:`coord.release_propagate.verify_lane_kind`
1340
- grades as one — the venv itself plus the live `coord-serve` process —
1341
- rather than a second list that could drift from the one the roll and the
1342
- gate already use.
1340
+ grades as one — the venv itself plus the live `coord-serve` and
1341
+ `coord-agent` processes — rather than a second list that could drift
1342
+ from the one the roll and the gate already use.
1343
1343
 
1344
1344
  Two deliberate readings:
1345
1345
 
1346
1346
  * the OLDEST readable version wins, because a host is as behind as its
1347
- most stale python lane. A venv that swapped while `coord-serve` still
1348
- runs the old generation is #2069's exact defect, and it must read as
1349
- "behind", not as "done";
1347
+ most stale python lane. A venv that swapped while `coord-serve` (or,
1348
+ on the daemon host, `coord-agent` — #2841) still runs the old
1349
+ generation is #2069's exact defect, and it must read as "behind", not
1350
+ as "done";
1350
1351
  * a host with an unreadable lane and no readable lane BEHIND the target is
1351
1352
  ``None`` — "no data", never "current" (#1834). `None` is what stops the
1352
1353
  host being cordoned on a guess *and* what stops an existing cordon being
@@ -271,10 +271,21 @@ ALL_LANES: tuple[str, ...] = (LANE_PYTHON, LANE_UNITS, LANE_TUI)
271
271
  #: spawns`` (what it would hand subprocesses), and the one #2069's restart
272
272
  #: actually targets, so it needs its own exact entry rather than falling out
273
273
  #: of the ``" spawns"`` suffix rule below.
274
+ #:
275
+ #: ``coord-agent process`` (:func:`coord.release_verify.lanes_for_host`) is
276
+ #: #2069 for ``coord-agent``: the agent's own frozen-at-start ``__version__``,
277
+ #: as distinct from ``coord-agent spawns`` (a fresh subprocess re-resolving
278
+ #: the venv on every poll, which flips the instant a swap lands whether or
279
+ #: not the agent restarted). On the daemon host the agent can *never*
280
+ #: self-restart (`agent_app.py`'s `_idle_restart_target` refuses there on
281
+ #: purpose), so this is the only lane that still reads a staged-but-
282
+ #: unrestarted swap as behind on that host — see the module docstring's
283
+ #: "REACH MUST GROW TO MEET THE GATE" section.
274
284
  _VERIFY_LANE_EXACT: dict[str, str] = {
275
285
  "~/.coord-venv": LANE_PYTHON,
276
286
  "coord-tui": LANE_TUI,
277
287
  "coord-serve process": LANE_PYTHON,
288
+ "coord-agent process": LANE_PYTHON,
278
289
  }
279
290
 
280
291
  #: Units whose *live process* a python-lane roll actually replaces. ``POST
@@ -245,6 +245,36 @@ def lanes_for_host(host: str, health: dict | None) -> list[Lane]:
245
245
  )
246
246
  )
247
247
 
248
+ # ── coord-agent process — the agent's OWN running version (#2841) ────
249
+ # `version` is `coord.__version__`, imported once at process start and
250
+ # frozen for that process's whole life (`coord/agent_app.py`'s health
251
+ # handler: `data["version"] = __version__`). That is exactly what #1834
252
+ # means by "verify the running process, not the venv" — unlike
253
+ # `coord-agent spawns` above, which resolves a *fresh* `coord --version`
254
+ # subprocess through the service PATH and therefore reports the new
255
+ # version the instant a blue/green swap flips `~/.coord-venv`, whether or
256
+ # not the agent that would spawn it has itself restarted.
257
+ #
258
+ # That distinction is cosmetic almost everywhere, because the agent
259
+ # self-restarts on an idle swap (`_idle_restart_target`) and the two
260
+ # lanes reconverge within one poll cycle. It stops being cosmetic on the
261
+ # daemon host: `_idle_restart_target` deliberately returns `None` there
262
+ # (a self-restarted agent would out-rank the `coord-serve` sitting next
263
+ # to it — see that function's docstring), so the daemon host's agent is
264
+ # the one case where nothing but this lane ever reads a staged-but-
265
+ # unrestarted swap as behind. #2069 gave `coord-serve` a `process` lane
266
+ # for the identical reason; this is that fix one unit over, for
267
+ # `coord-agent`.
268
+ if health is not None and "version" in health:
269
+ lanes.append(
270
+ Lane(
271
+ host=host,
272
+ lane="coord-agent process",
273
+ version=health.get("version") or None,
274
+ process=True,
275
+ )
276
+ )
277
+
248
278
  return lanes
249
279
 
250
280
 
@@ -38,9 +38,17 @@ from coord.drive_queue import (
38
38
  QUEUE_ALERT_ISSUE,
39
39
  QUEUE_ALERT_REPO,
40
40
  STATE_BLOCKED,
41
+ STATE_RUNNING,
41
42
  QueueEntry,
42
43
  )
43
44
 
45
+ #: The genuine `coord.state.apply_issue_labels`, captured at import time —
46
+ #: before `_default_pipeline_labels` (autouse) replaces the module attribute
47
+ #: with an inert no-op. A test that needs the REAL seam chain
48
+ #: (state -> `_apply_issue_labels_local` -> `github_ops`) monkeypatches this
49
+ #: back in; see `test_add_labels_gh_with_the_resolved_slug_...`.
50
+ _REAL_APPLY_ISSUE_LABELS = state.apply_issue_labels
51
+
44
52
  REPO = "claude-coordinator"
45
53
  # A SECOND repo, so #1972's per-repo capacity has something to be per-repo
46
54
  # about: the whole point is that a quadraui entry can ride alongside an
@@ -130,6 +138,33 @@ def no_tmux(monkeypatch):
130
138
  monkeypatch.setattr("coord.drive.list_drive_sessions", lambda *a, **k: [])
131
139
 
132
140
 
141
+ @pytest.fixture(autouse=True)
142
+ def _default_pipeline_labels(monkeypatch):
143
+ """#2839: `add` now also projects `coord`/`status:ready` onto the issue
144
+ via `coord.state.apply_issue_labels` — default that to an inert no-op for
145
+ every test in this file that doesn't care about it (the overwhelming
146
+ majority).
147
+
148
+ Without this, `add`'s real label write falls through to `github_ops._gh`
149
+ and, in any test that has ALSO mocked `subprocess.run` (the `launches`
150
+ fixture below, used to capture `coord drive --tmux` argvs across the
151
+ file), lands in that SAME capture — `subprocess.run` is one singleton
152
+ module attribute, so a mock installed for one caller is a mock for
153
+ every caller, `gh` included (see conftest's `_no_live_gh` docstring).
154
+ That polluted `launches` with spurious `gh issue view`/`gh issue edit`
155
+ entries for every test that calls `add` before asserting on `launches`.
156
+
157
+ The dedicated `labels` fixture (see the #2839 section below) requests
158
+ this same seam explicitly and, being function-scoped with no dependency
159
+ on this one, resolves after it — so its more specific mock simply
160
+ overrides this default for the handful of tests that actually assert on
161
+ the label call.
162
+ """
163
+ monkeypatch.setattr(
164
+ "coord.state.apply_issue_labels", lambda *a, **k: ([], False)
165
+ )
166
+
167
+
133
168
  @pytest.fixture(autouse=True)
134
169
  def tick_lock(monkeypatch, tmp_path) -> Path:
135
170
  """Give every test its own tick lock.
@@ -272,6 +307,171 @@ def test_add_refuses_a_malformed_after_entry(cli):
272
307
  assert state._list_drive_queue_local() == []
273
308
 
274
309
 
310
+ # ── #2839: enqueueing projects `coord` + `status:ready` onto the issue ───────
311
+ #
312
+ # Pipeline membership IS the `coord` label (`coord untrack`'s own help text)
313
+ # but `drive_queue_add` used to write only the board row — GitHub never heard
314
+ # about it, so a queued issue could sit invisible in the Pipeline until an
315
+ # operator ran `coord track` by hand. This mirrors `coord track`'s own label
316
+ # write on every `add`: idempotent (asserted via `test_add_writes_a_row...`'s
317
+ # sibling below re-running cleanly), non-blocking on a GitHub outage, and
318
+ # never re-applied to an entry that is already running (#2821 was mid-drive
319
+ # with `coord` but no `status:*` — forcing `status:ready` back onto it would
320
+ # misrepresent it as not-yet-started).
321
+
322
+
323
+ @pytest.fixture
324
+ def labels(monkeypatch):
325
+ """Capture ``coord.state.apply_issue_labels`` calls instead of touching GitHub."""
326
+ calls: list[dict[str, Any]] = []
327
+
328
+ def _fake(repo_name, issue_number, *, add, remove, repo_github=None):
329
+ calls.append(
330
+ {
331
+ "repo_name": repo_name,
332
+ "issue_number": issue_number,
333
+ "add": add,
334
+ "remove": remove,
335
+ "repo_github": repo_github,
336
+ }
337
+ )
338
+ return (sorted(add), True)
339
+
340
+ monkeypatch.setattr("coord.state.apply_issue_labels", _fake)
341
+ return calls
342
+
343
+
344
+ def test_add_applies_coord_and_status_ready_on_a_fresh_issue(cli, labels):
345
+ result = cli("add", REPO, "1650")
346
+ assert result.exit_code == 0, result.output
347
+ assert len(labels) == 1
348
+ call = labels[0]
349
+ assert call["repo_name"] == REPO
350
+ assert call["issue_number"] == 1650
351
+ assert call["add"] == {"coord", "status:ready"}
352
+ assert call["remove"] == {"status:refining", "status:backlog"}
353
+ # #2839 review: the RESOLVED GitHub slug, not the bare coordinator.yml
354
+ # `name:`. The two diverge in `_CONFIG_YAML` above exactly as they do in
355
+ # this repo's own `coordinator.example.yml` (`name: code-coordinator` vs
356
+ # `github: JDonaghy/claude-coordinator`), and `gh issue edit --repo`
357
+ # requires `[HOST/]OWNER/REPO` — handing it `claude-coordinator` errors
358
+ # out, so the label would never land for precisely the repos #2839 was
359
+ # filed about.
360
+ assert call["repo_github"] == "john/claude-coordinator"
361
+
362
+
363
+ def test_add_survives_a_failing_label_write(cli, monkeypatch):
364
+ def _boom(*_a, **_k):
365
+ raise RuntimeError("gh unreachable")
366
+
367
+ monkeypatch.setattr("coord.state.apply_issue_labels", _boom)
368
+ result = cli("add", REPO, "1650")
369
+ assert result.exit_code == 0, result.output
370
+ assert f"{REPO}#1650" in result.output
371
+ # The board row is the source of truth for queue membership — it must
372
+ # land even though the label write (a projection of it) failed.
373
+ assert queued(1650) is not None
374
+
375
+
376
+ def test_add_labels_gh_with_the_resolved_slug_not_the_local_repo_name(cli, monkeypatch):
377
+ """#2839 review (blocking): the slug that actually reaches the forge.
378
+
379
+ The `labels` fixture above stubs `coord.state.apply_issue_labels`, so it
380
+ can only see what the CLI *asked* for — it cannot catch a `repo_github`
381
+ that is wrong by the time `gh` runs. This test un-stubs that seam and
382
+ lets the real `apply_issue_labels` ->
383
+ `_apply_issue_labels_local` -> `github_ops.change_issue_labels` chain run,
384
+ stubbing only the last hop (which shells out to
385
+ `gh issue edit --repo <slug>`, and `gh` rejects anything that is not
386
+ `[HOST/]OWNER/REPO`).
387
+
388
+ `_CONFIG_YAML` deliberately diverges `name: claude-coordinator` from
389
+ `github: john/claude-coordinator`, the same way this repo's own
390
+ `coordinator.example.yml` does. If `add` ever regresses to passing
391
+ `repo_github=None`, `_apply_issue_labels_local`'s `repo_github or
392
+ repo_name` fallback hands `gh` the bare local name, `gh` errors, and the
393
+ best-effort helper silently swallows it — the #2839 label never lands,
394
+ only now without a traceback.
395
+ """
396
+ seen: list[str] = []
397
+
398
+ def _fake_change_issue_labels(slug, issue_number, *, add, remove):
399
+ seen.append(slug)
400
+ return (sorted(add), True)
401
+
402
+ monkeypatch.setattr("coord.state.apply_issue_labels", _REAL_APPLY_ISSUE_LABELS)
403
+ monkeypatch.setattr(
404
+ "coord.github_ops.change_issue_labels", _fake_change_issue_labels
405
+ )
406
+
407
+ result = cli("add", REPO, "1650")
408
+ assert result.exit_code == 0, result.output
409
+ assert seen == ["john/claude-coordinator"]
410
+
411
+
412
+ def test_add_survives_a_config_that_will_not_load(cli, monkeypatch, labels):
413
+ """#2839 review (iteration 1): a config-load failure must not kill `add`.
414
+
415
+ `_load_config` reports a `ConfigError` — a thin client's
416
+ `fetch_remote_config` timing out against a momentarily-unreachable board
417
+ daemon, a briefly-unreadable `coordinator.yml` — as `click.echo(...)` +
418
+ `sys.exit(2)`, i.e. `SystemExit`, which is a `BaseException` and so
419
+ escapes a bare `except Exception`. The enqueue must still succeed (the
420
+ board row is the source of truth), and the label write must still be
421
+ attempted, degraded to an unresolved slug rather than skipped.
422
+ """
423
+ from coord.commands import _common
424
+
425
+ def _boom_exit(*_a, **_k):
426
+ raise SystemExit(2)
427
+
428
+ monkeypatch.setattr(_common, "_load_config", _boom_exit)
429
+
430
+ result = cli("add", REPO, "1650")
431
+ assert result.exit_code == 0, result.output
432
+ assert queued(1650) is not None
433
+ assert len(labels) == 1
434
+ assert labels[0]["add"] == {"coord", "status:ready"}
435
+ # No config to resolve `name:` -> `github:` with, and `claude-coordinator`
436
+ # is not itself a slug, so this degrades to the `repo_name` fallback
437
+ # rather than inventing one.
438
+ assert labels[0]["repo_github"] is None
439
+
440
+
441
+ @pytest.mark.parametrize(
442
+ ("repo_arg", "expected"),
443
+ [
444
+ # Known local name -> its `github:` slug, even when the two diverge.
445
+ (REPO, "john/claude-coordinator"),
446
+ # Unknown to coordinator.yml but already a slug: usable as-is (the
447
+ # same fallback `_resolve_repo_slug` validates).
448
+ ("someone/untracked-repo", "someone/untracked-repo"),
449
+ # Unknown AND not a slug: unresolvable, so say so instead of guessing.
450
+ ("typo-repo", None),
451
+ ],
452
+ )
453
+ def test_resolve_repo_slug_best_effort(config_file: Path, repo_arg, expected):
454
+ """The non-fatal sibling of `_resolve_repo_slug` never calls `sys.exit`."""
455
+ from coord.commands._common import _load_config, resolve_repo_slug_best_effort
456
+
457
+ cfg = _load_config(config_file)
458
+ assert resolve_repo_slug_best_effort(cfg, repo_arg) == expected
459
+ # `config=None` (the fail-open path) degrades, it does not explode.
460
+ assert resolve_repo_slug_best_effort(None, repo_arg) == (
461
+ repo_arg if "/" in repo_arg else None
462
+ )
463
+
464
+
465
+ def test_add_does_not_relabel_an_already_running_entry(cli, labels):
466
+ assert cli("add", REPO, "1650").exit_code == 0
467
+ labels.clear()
468
+ state.update_drive_queue_entry(REPO, 1650, state=STATE_RUNNING)
469
+
470
+ result = cli("add", REPO, "1650", "--machine", "dellserver")
471
+ assert result.exit_code == 0, result.output
472
+ assert labels == []
473
+
474
+
275
475
  # ── #2247: predicted file-overlap ordering ───────────────────────────────────
276
476
  #
277
477
  # The acceptance bar from the issue, driven end to end through the real CLI: