code-coordinator 0.5.295__tar.gz → 0.5.297__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 (855) hide show
  1. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent.py +59 -0
  7. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive_queue.py +69 -6
  8. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/install-agent.sh +43 -5
  9. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-test-runner.sh +20 -2
  10. code_coordinator-0.5.297/tests/test_coord_test_runner_acceptance_toolchain_2936.py +181 -0
  11. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue.py +99 -0
  12. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_env_venv_isolation.py +87 -0
  13. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.gitignore +0 -0
  26. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/GOAL.md +0 -0
  28. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/LICENSE +0 -0
  29. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/README.md +0 -0
  31. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/client.py +0 -0
  62. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/machine.py +0 -0
  77. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/pr.py +0 -0
  83. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/store_migrate.py +0 -0
  92. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/config.py +0 -0
  97. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/db.py +0 -0
  107. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/decomposition_chat.py +0 -0
  109. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-failure-notify.service +0 -0
  117. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-fleet-watchdog.service +0 -0
  118. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  119. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-notify.service +0 -0
  120. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-notify.timer +0 -0
  121. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-propagate.service +0 -0
  122. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-propagate.timer +0 -0
  123. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-window.service +0 -0
  124. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-window.timer +0 -0
  125. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-serve.service +0 -0
  126. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web-dist-build.service +0 -0
  127. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web-dist-build.timer +0 -0
  128. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web.service +0 -0
  129. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy_manifest.py +0 -0
  130. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy_units.py +0 -0
  131. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deprecation_telemetry.py +0 -0
  132. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deps.py +0 -0
  133. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/diagnose.py +0 -0
  134. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dispatch.py +0 -0
  135. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dist_name.py +0 -0
  136. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive.py +0 -0
  137. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/events.py +0 -0
  139. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/github_ops.py +0 -0
  149. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/github_throttle.py +0 -0
  150. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/goal.py +0 -0
  151. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/graph_health.py +0 -0
  152. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/__init__.py +0 -0
  153. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/aggregate.py +0 -0
  154. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/__init__.py +0 -0
  155. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/agent_install.py +0 -0
  156. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/cargo_targets.py +0 -0
  157. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/claude_binary.py +0 -0
  158. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/coord_web_ci_pin.py +0 -0
  159. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/deploy_lane_facts.py +0 -0
  160. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/disk.py +0 -0
  161. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_board.py +0 -0
  162. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  163. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_phantom.py +0 -0
  164. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_unit_drift.py +0 -0
  165. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/graph.py +0 -0
  166. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/graphify_cli.py +0 -0
  167. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/index_lock.py +0 -0
  168. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/issues_sync_staleness.py +0 -0
  169. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/plan_usage.py +0 -0
  170. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/release_cordon.py +0 -0
  171. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/stalled_pipeline.py +0 -0
  174. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/worktrees.py +0 -0
  179. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/cli.py +0 -0
  180. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/context.py +0 -0
  181. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/fleet_snapshot.py +0 -0
  182. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/models.py +0 -0
  183. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/pypi.py +0 -0
  184. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/registry.py +0 -0
  185. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/render.py +0 -0
  186. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/units.py +0 -0
  187. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/hooks.py +0 -0
  188. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/housekeeping.py +0 -0
  189. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/interactive.py +0 -0
  190. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/issue_store.py +0 -0
  191. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/issues_sync_status.py +0 -0
  192. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/liveness_auditor.py +0 -0
  193. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/machine_onboard.py +0 -0
  194. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/machine_pause.py +0 -0
  195. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/merge_queue.py +0 -0
  196. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_chat.py +0 -0
  197. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_dispatch.py +0 -0
  198. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_gate.py +0 -0
  199. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_order.py +0 -0
  200. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/mock_author.py +0 -0
  201. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/models.py +0 -0
  202. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/network.py +0 -0
  203. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/new_issue_chat.py +0 -0
  204. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/__init__.py +0 -0
  205. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/baseline.py +0 -0
  206. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/cli.py +0 -0
  207. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/collect.py +0 -0
  208. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/digest.py +0 -0
  209. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/models.py +0 -0
  210. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/predicate.py +0 -0
  211. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/service.py +0 -0
  212. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/store.py +0 -0
  213. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/transport.py +0 -0
  214. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notify.py +0 -0
  215. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/openapi.py +0 -0
  216. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/overlap_fence.py +0 -0
  217. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/overlap_predict.py +0 -0
  218. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/parentage.py +0 -0
  219. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/parentage_github.py +0 -0
  220. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/pipeline.py +0 -0
  221. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/plan_parser.py +0 -0
  222. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/plans.py +0 -0
  223. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/platform_paths.py +0 -0
  224. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_bridge.py +0 -0
  225. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_store.py +0 -0
  226. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_sync.py +0 -0
  227. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/pr_body_lint.py +0 -0
  228. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/prereqs.py +0 -0
  229. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/progress.py +0 -0
  230. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/__init__.py +0 -0
  231. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/base.py +0 -0
  232. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/claude.py +0 -0
  233. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/claude_pty.py +0 -0
  234. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/opencode.py +0 -0
  235. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/queue_diagnose.py +0 -0
  236. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reconcile.py +0 -0
  237. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reconcile_tick.py +0 -0
  238. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/refine_chat.py +0 -0
  239. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_cordon.py +0 -0
  240. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_propagate.py +0 -0
  241. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_verify.py +0 -0
  242. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_window.py +0 -0
  243. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/repo_edit.py +0 -0
  244. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/repo_onboard.py +0 -0
  245. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reports.py +0 -0
  246. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/rest_schema.py +0 -0
  247. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/revalidate.py +0 -0
  248. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/review.py +0 -0
  249. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/scorecard.py +0 -0
  250. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/self_health.py +0 -0
  251. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/serve_app.py +0 -0
  252. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/release-now/SKILL.md +0 -0
  259. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/state.py +0 -0
  268. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/store_migrate.py +0 -0
  269. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_author.py +0 -0
  270. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_chat.py +0 -0
  271. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_orchestrator.py +0 -0
  272. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_report.py +0 -0
  273. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/tui_release.py +0 -0
  274. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage.py +0 -0
  275. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage_limits.py +0 -0
  276. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage_rollup.py +0 -0
  277. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/worker_events.py +0 -0
  278. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coordinator.example.yml +0 -0
  279. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-agent.service +0 -0
  280. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.service +0 -0
  281. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.sh +0 -0
  282. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.timer +0 -0
  283. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-drive-queue.service +0 -0
  284. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-drive-queue.timer +0 -0
  285. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-failure-notify.service +0 -0
  286. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-failure-notify.sh +0 -0
  287. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-fleet-watchdog.service +0 -0
  288. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-fleet-watchdog.timer +0 -0
  289. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-notify.service +0 -0
  290. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-notify.timer +0 -0
  291. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-propagate.service +0 -0
  292. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-propagate.timer +0 -0
  293. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-window.service +0 -0
  294. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-window.timer +0 -0
  295. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-serve.service +0 -0
  296. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.service +0 -0
  297. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.sh +0 -0
  298. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.timer +0 -0
  299. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-rollback.sh +0 -0
  300. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web.service +0 -0
  301. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/node-shim.sh +0 -0
  302. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_TUI_CI.md +0 -0
  303. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  304. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_CI.md +0 -0
  305. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_DIST.md +0 -0
  306. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/AGENT_OPERATIONS.md +0 -0
  307. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ARCHITECTURE.md +0 -0
  308. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ARCH_SECURITY_GATES.md +0 -0
  309. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/COCKPIT.md +0 -0
  310. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/COST_DISCIPLINE.md +0 -0
  312. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CROSS_PLATFORM.md +0 -0
  313. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CUSTOMER_FACING_APPS.md +0 -0
  314. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CUSTOMER_PORTAL.md +0 -0
  315. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/DRIVE_QUEUE.md +0 -0
  316. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/EPHEMERAL_WORKERS.md +0 -0
  317. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/FORGE_MIGRATION.md +0 -0
  318. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/GRAPHIFY_SETUP.md +0 -0
  319. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ISSUE_GUIDANCE.md +0 -0
  320. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/MAC_MINI.md +0 -0
  321. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  322. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/NOTIFIER.md +0 -0
  323. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPENCODE_VERIFICATION.md +0 -0
  324. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPERATING_GOTCHAS.md +0 -0
  325. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPERATOR_GUIDES.md +0 -0
  326. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ORACLE_LOOP.md +0 -0
  327. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PHONE_WEBAPP.md +0 -0
  328. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PIPELINE_V2.md +0 -0
  329. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PLATFORM_EVOLUTION.md +0 -0
  330. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/SECOND_BACKEND.md +0 -0
  331. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/STORE_SERVICE.md +0 -0
  332. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  333. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/WEB_CONTROL_CENTER.md +0 -0
  334. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/WSL_WINDOWS_WORKER.md +0 -0
  335. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/README.md +0 -0
  336. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/_tokens.css +0 -0
  337. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/issue-detail.html +0 -0
  338. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/pipeline-narrow.html +0 -0
  339. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/pipeline-wide.html +0 -0
  340. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/graphify-out/.gitignore +0 -0
  341. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/pyproject.toml +0 -0
  342. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/audit_review_verdict_overrides.py +0 -0
  343. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  344. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/build-worker-image.sh +0 -0
  345. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/coordinator-machine.py +0 -0
  346. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/epic-down.sh +0 -0
  347. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/epic-up.sh +0 -0
  348. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/preflight.sh +0 -0
  349. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/provision-worker.sh +0 -0
  350. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  351. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  352. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/verify-github-token.sh +0 -0
  353. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/check_gh_argv_containment.py +0 -0
  354. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/codegen.py +0 -0
  355. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  356. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  357. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  358. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  359. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-venv-rollback.sh +0 -0
  360. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/drive-batch.sh +0 -0
  361. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/extract-coord-tui.sh +0 -0
  362. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/fleet_watchdog.py +0 -0
  363. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/gen_board_fixture.py +0 -0
  364. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/gen_mock_index.py +0 -0
  365. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/next_release_tag.py +0 -0
  366. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/run_tests_in_populated_home.sh +0 -0
  367. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/run_tests_without_gh.sh +0 -0
  368. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/smoke_437_interactive.py +0 -0
  369. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_878_review_capture.py +0 -0
  370. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_release_published.py +0 -0
  371. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_release_wheel.py +0 -0
  372. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/setup.cfg +0 -0
  373. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/SMOKE_SET.md +0 -0
  374. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/__init__.py +0 -0
  375. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/conftest.py +0 -0
  376. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/contract.md +0 -0
  377. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/manifest.yml +0 -0
  378. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  379. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  380. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/contract.md +0 -0
  381. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  382. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  383. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/manifest.yml +0 -0
  384. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  385. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/tsconfig.json +0 -0
  386. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  387. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/backends.py +0 -0
  388. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/conftest.py +0 -0
  389. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/board-pipeline-basic.json +0 -0
  390. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  391. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  392. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  393. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  394. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/all_pass.json +0 -0
  395. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  396. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/mixed_fail.json +0 -0
  397. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  398. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  399. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/skip.json +0 -0
  400. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/truncated.json +0 -0
  401. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  402. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  403. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  404. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  405. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  406. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  407. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  408. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  409. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_acceptance.py +0 -0
  410. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_acceptance_drivers.py +0 -0
  411. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent.py +0 -0
  412. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_api_error.py +0 -0
  413. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_app.py +0 -0
  414. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_branch_base.py +0 -0
  415. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_branch_capture.py +0 -0
  416. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_config_free_1712.py +0 -0
  417. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_deploy_units_endpoint.py +0 -0
  418. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_dirty_worktree.py +0 -0
  419. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  420. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_graph_self_heal.py +0 -0
  421. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_health_h3.py +0 -0
  422. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_idle_restart.py +0 -0
  423. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_push_failure.py +0 -0
  424. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_reap.py +0 -0
  425. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_repos_and_pull.py +0 -0
  426. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_restart_services_endpoint.py +0 -0
  427. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_skills_self_heal.py +0 -0
  428. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_startup_diagnostics.py +0 -0
  429. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_update.py +0 -0
  430. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_update_bluegreen.py +0 -0
  431. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_usage_limit.py +0 -0
  432. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_zero_commit.py +0 -0
  433. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ambient_home_isolation.py +0 -0
  434. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_dependency_busy_2804.py +0 -0
  435. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_reject_plan.py +0 -0
  436. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_usage_gate.py +0 -0
  437. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approved_work_2532.py +0 -0
  438. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_assignment_already_recorded_daemon.py +0 -0
  439. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_log.py +0 -0
  440. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_outcome.py +0 -0
  441. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_query.py +0 -0
  442. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_auto_loop.py +0 -0
  443. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_auto_release_publish_2035.py +0 -0
  444. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_backend_selection.py +0 -0
  445. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_base_checkout_restore.py +0 -0
  446. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_block_log.py +0 -0
  447. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_cap_762.py +0 -0
  448. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_fixture.py +0 -0
  449. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_read_path.py +0 -0
  450. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_schema.py +0 -0
  451. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_service.py +0 -0
  452. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_state.py +0 -0
  453. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_wire.py +0 -0
  454. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_brain.py +0 -0
  455. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_branch_model.py +0 -0
  456. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_bug_intake.py +0 -0
  457. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_build_worker_image_env_update.py +0 -0
  458. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cargo_cache.py +0 -0
  459. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_check_gh_argv_containment.py +0 -0
  460. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_acceptance_gate_1950.py +0 -0
  461. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_fix.py +0 -0
  462. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_gitlab.py +0 -0
  463. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_parity_2091.py +0 -0
  464. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_store.py +0 -0
  465. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_claim.py +0 -0
  466. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_claude_md_budget.py +0 -0
  467. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_acceptance.py +0 -0
  468. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign.py +0 -0
  469. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  470. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_interactive_remote.py +0 -0
  471. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_provider.py +0 -0
  472. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  473. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_audit.py +0 -0
  474. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_chat_continue.py +0 -0
  475. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_decide.py +0 -0
  476. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_config_provenance.py +0 -0
  477. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_forge_availability.py +0 -0
  478. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_graph.py +0 -0
  479. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_self.py +0 -0
  480. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor.py +0 -0
  481. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor_config_free_1801.py +0 -0
  482. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  483. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_drive.py +0 -0
  484. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_drive_queue.py +0 -0
  485. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_escalate.py +0 -0
  486. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_fix_headless_review.py +0 -0
  487. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_gate_a.py +0 -0
  488. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_install_drift.py +0 -0
  489. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_install_skills.py +0 -0
  490. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_comment.py +0 -0
  491. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_create_label.py +0 -0
  492. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_reopen.py +0 -0
  493. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_view_list.py +0 -0
  494. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_merge.py +0 -0
  495. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_assign.py +0 -0
  496. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_capture.py +0 -0
  497. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_chat_add_child.py +0 -0
  498. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_dispatch.py +0 -0
  499. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_gate_b.py +0 -0
  500. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_gate_c.py +0 -0
  501. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_order.py +0 -0
  502. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  503. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_ship.py +0 -0
  504. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_network.py +0 -0
  505. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_new_issue_chat.py +0 -0
  506. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_plans.py +0 -0
  507. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_portal.py +0 -0
  508. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_pr.py +0 -0
  509. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_pull_artifact.py +0 -0
  510. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_queue.py +0 -0
  511. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_reattach_sessions.py +0 -0
  512. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_refine_board.py +0 -0
  513. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_preflight.py +0 -0
  514. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_propagate.py +0 -0
  515. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_window.py +0 -0
  516. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_repo_2220.py +0 -0
  517. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  518. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_scorecard.py +0 -0
  519. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_set_review_findings.py +0 -0
  520. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_advisory_terminal.py +0 -0
  521. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_contested_tag.py +0 -0
  522. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_merge_queue.py +0 -0
  523. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_provider.py +0 -0
  524. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_review_finalizing.py +0 -0
  525. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_test_failed_tag.py +0 -0
  526. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_usage_limit.py +0 -0
  527. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_sync_comments_873.py +0 -0
  528. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_test_plan.py +0 -0
  529. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_track.py +0 -0
  530. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_tui_update.py +0 -0
  531. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_wait.py +0 -0
  532. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_client_base_install.py +0 -0
  533. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_client_resource_migration_1946.py +0 -0
  534. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_commands_common.py +0 -0
  535. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_comments.py +0 -0
  536. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_completion_summary.py +0 -0
  537. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config.py +0 -0
  538. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_acceptance.py +0 -0
  539. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_audit.py +0 -0
  540. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_pricing.py +0 -0
  541. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  542. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_usage_gate.py +0 -0
  543. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_confirm_test.py +0 -0
  544. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_conflict_fix.py +0 -0
  545. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_conflict_fix_semantic.py +0 -0
  546. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  547. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test.py +0 -0
  548. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_baseline.py +0 -0
  549. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_populated_home.py +0 -0
  550. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_routing.py +0 -0
  551. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_toolchain.py +0 -0
  552. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_uat.py +0 -0
  553. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dao.py +0 -0
  557. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard.py +0 -0
  558. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_fixture.py +0 -0
  559. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_terminal.py +0 -0
  560. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_terminal_live.py +0 -0
  561. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_db.py +0 -0
  562. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dead_end.py +0 -0
  563. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_decomposition_chat.py +0 -0
  564. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_db_backup.py +0 -0
  565. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_web_dist.py +0 -0
  566. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_web_rollback.py +0 -0
  567. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_drive_queue_unit.py +0 -0
  568. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_failure_notify_unit.py +0 -0
  569. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_manifest.py +0 -0
  570. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_notify_unit.py +0 -0
  571. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_units_lane.py +0 -0
  572. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_web_unit.py +0 -0
  573. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deprecation_telemetry.py +0 -0
  574. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deps.py +0 -0
  575. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_diagnose.py +0 -0
  576. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dispatch.py +0 -0
  577. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dispatch_target_validation.py +0 -0
  578. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dist_name.py +0 -0
  579. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_done_housekeeping.py +0 -0
  580. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive.py +0 -0
  581. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_blocked_rendering.py +0 -0
  582. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_launch_argv.py +0 -0
  583. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  584. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_roll_pending.py +0 -0
  585. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  586. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_state.py +0 -0
  587. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_tmux.py +0 -0
  588. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_capability_detection.py +0 -0
  589. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  590. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_image_provenance.py +0 -0
  591. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_errors.py +0 -0
  592. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_events.py +0 -0
  593. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_failure_class.py +0 -0
  594. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_filelock.py +0 -0
  595. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  596. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fix_of_force_override.py +0 -0
  597. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_config_health.py +0 -0
  598. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_health_probes.py +0 -0
  599. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_health_snapshot.py +0 -0
  600. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_watchdog.py +0 -0
  601. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_forge_availability.py +0 -0
  602. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_freshness.py +0 -0
  603. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_a.py +0 -0
  604. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_b.py +0 -0
  605. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_snapshot_staleness.py +0 -0
  606. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gates.py +0 -0
  607. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  608. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gen_mock_index.py +0 -0
  609. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_generated_rust_fixture.py +0 -0
  610. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_generated_types_fixture.py +0 -0
  611. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_github_ops.py +0 -0
  612. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_github_throttle.py +0 -0
  613. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_goal.py +0 -0
  614. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_graph_health.py +0 -0
  615. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_graph_selfheal_absent_2237.py +0 -0
  616. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_handoff.py +0 -0
  617. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_checks.py +0 -0
  618. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_cli.py +0 -0
  619. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_cli_graph.py +0 -0
  620. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_config.py +0 -0
  621. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_context.py +0 -0
  622. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_coord_web_ci_pin.py +0 -0
  623. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_deploy_lane_facts.py +0 -0
  624. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_fix.py +0 -0
  625. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_incident_regression.py +0 -0
  626. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_issues_sync_staleness.py +0 -0
  627. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_pypi.py +0 -0
  628. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_registry.py +0 -0
  629. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_release_cordon_probe.py +0 -0
  630. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_timer_active.py +0 -0
  631. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_toolchain.py +0 -0
  632. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_unit_drift.py +0 -0
  633. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_unit_enablement.py +0 -0
  634. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_hooks.py +0 -0
  635. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_human_attended_437.py +0 -0
  636. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_init.py +0 -0
  637. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_install_agent_venv_2911.py +0 -0
  638. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_integration.py +0 -0
  639. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_briefing_echo.py +0 -0
  640. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_pane_log_2541.py +0 -0
  641. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_prefill_state.py +0 -0
  642. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_session_relaunch.py +0 -0
  643. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_test_verdict_backstop.py +0 -0
  644. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_token_attribution.py +0 -0
  645. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_worktree.py +0 -0
  646. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_issue_store_seam.py +0 -0
  647. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_issues_sync_status.py +0 -0
  648. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_liveness_auditor.py +0 -0
  649. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_liveness_notify.py +0 -0
  650. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_lock_contention_ratchet.py +0 -0
  651. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_machine_onboard.py +0 -0
  652. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_machine_pause.py +0 -0
  653. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_merge_queue.py +0 -0
  654. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_merge_verify.py +0 -0
  655. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_chat.py +0 -0
  656. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_dispatch.py +0 -0
  657. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_gate.py +0 -0
  658. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_order.py +0 -0
  659. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_seam.py +0 -0
  660. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_mock_author.py +0 -0
  661. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_model_tiering.py +0 -0
  662. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_models.py +0 -0
  663. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_models_config_labels.py +0 -0
  664. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_needs_attention.py +0 -0
  665. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_network.py +0 -0
  666. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_new_issue_chat.py +0 -0
  667. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_next_release_tag.py +0 -0
  668. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_node_shim.py +0 -0
  669. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_baseline.py +0 -0
  670. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_cli.py +0 -0
  671. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_collect.py +0 -0
  672. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_config.py +0 -0
  673. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_drive_seam.py +0 -0
  674. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_isolation.py +0 -0
  675. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_predicate.py +0 -0
  676. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_quiet_hours.py +0 -0
  677. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_service.py +0 -0
  678. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notify.py +0 -0
  679. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notify_drain.py +0 -0
  680. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_openapi.py +0 -0
  681. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_operational_defaults.py +0 -0
  682. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_overlap_fence.py +0 -0
  683. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_overlap_predict.py +0 -0
  684. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_packaged_deploy_units.py +0 -0
  685. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_parentage.py +0 -0
  686. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_paste_landed.py +0 -0
  687. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  688. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_pipeline.py +0 -0
  689. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_approve_plan_command.py +0 -0
  690. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_pr_command.py +0 -0
  691. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_review_command.py +0 -0
  692. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_only.py +0 -0
  693. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_parser.py +0 -0
  694. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_platform_paths.py +0 -0
  695. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_bridge.py +0 -0
  696. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_config.py +0 -0
  697. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_store.py +0 -0
  698. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_sync.py +0 -0
  699. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_pr_body_lint.py +0 -0
  700. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_prereqs.py +0 -0
  701. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_production_db_guard.py +0 -0
  702. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_progress.py +0 -0
  703. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_provider_seam.py +0 -0
  704. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers.py +0 -0
  705. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers_config_labels.py +0 -0
  706. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers_pty.py +0 -0
  707. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_quiet_hours.py +0 -0
  708. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_quiet_hours_store_2146.py +0 -0
  709. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reap_merged_sessions.py +0 -0
  710. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reap_stale_interactive_tick.py +0 -0
  711. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile.py +0 -0
  712. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_branch.py +0 -0
  713. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_completions.py +0 -0
  714. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  715. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_merges.py +0 -0
  716. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_no_agent_record.py +0 -0
  717. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_tick.py +0 -0
  718. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_usage_limit_done.py +0 -0
  719. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_refine_chat.py +0 -0
  720. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_2101.py +0 -0
  721. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  722. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_deadlock_2240.py +0 -0
  723. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_stuck_2490.py +0 -0
  724. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_propagate.py +0 -0
  725. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_propagate_threshold.py +0 -0
  726. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_roll_between_legs_2854.py +0 -0
  727. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_roll_window_handoff.py +0 -0
  728. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_unified_1242.py +0 -0
  729. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_verify.py +0 -0
  730. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_window.py +0 -0
  731. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_remote_auto_prune.py +0 -0
  732. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_remote_interactive_reaper.py +0 -0
  733. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_add.py +0 -0
  734. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_edit_2220.py +0 -0
  735. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_graph_fleet_2237.py +0 -0
  736. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_onboard_2220.py +0 -0
  737. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_report_result_push.py +0 -0
  738. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reports.py +0 -0
  739. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry.py +0 -0
  740. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry_advisory_1606.py +0 -0
  741. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry_type_1636.py +0 -0
  742. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_revalidate.py +0 -0
  743. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review.py +0 -0
  744. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_end_review_without_verdict.py +0 -0
  745. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_parse_failure_diagnostic.py +0 -0
  746. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_reaffirm.py +0 -0
  747. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_state.py +0 -0
  748. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_backstop.py +0 -0
  749. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_override_audit.py +0 -0
  750. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_relay.py +0 -0
  751. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_zero_commits.py +0 -0
  752. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_scoped_review_wiring.py +0 -0
  753. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_scorecard.py +0 -0
  754. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_self_health.py +0 -0
  755. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve.py +0 -0
  756. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve_app_board_trim.py +0 -0
  757. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve_rest_routes.py +0 -0
  758. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_session.py +0 -0
  759. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_slice_issue_attribution.py +0 -0
  760. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke.py +0 -0
  761. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke_live_checkout_restore.py +0 -0
  762. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke_workflow.py +0 -0
  763. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_spend_ceiling.py +0 -0
  764. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_spend_ceiling_coordinator.py +0 -0
  765. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_split.py +0 -0
  766. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_split_work.py +0 -0
  767. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_sql_dialect.py +0 -0
  768. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_sqlite_connect_ratchet.py +0 -0
  769. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stage_projection.py +0 -0
  770. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stale_busy_reviewer_697.py +0 -0
  771. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stalled_pipeline.py +0 -0
  772. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_state.py +0 -0
  773. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_state_review_findings_daemon.py +0 -0
  774. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_status_fleet_footer.py +0 -0
  775. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stop_1567.py +0 -0
  776. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_store_contract.py +0 -0
  777. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_store_migrate.py +0 -0
  778. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stuck.py +0 -0
  779. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  780. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_terminal_command.py +0 -0
  781. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_author.py +0 -0
  782. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_chat.py +0 -0
  783. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_orchestrator.py +0 -0
  784. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_report.py +0 -0
  785. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_verdict_parsing.py +0 -0
  786. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_verdict_transcript_floor.py +0 -0
  787. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_text_io_encoding_audit.py +0 -0
  788. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_board_audit.py +0 -0
  789. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_config_load_1080.py +0 -0
  790. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_daemon_routing_906.py +0 -0
  791. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_tmux_host.py +0 -0
  792. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_tmux_session.py +0 -0
  793. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_transcript_floor.py +0 -0
  794. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage.py +0 -0
  795. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage_limits.py +0 -0
  796. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage_rollup.py +0 -0
  797. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_venv_live_install_2121.py +0 -0
  798. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_version_single_source.py +0 -0
  799. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_watch.py +0 -0
  800. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  801. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_events.py +0 -0
  802. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_image_pin_sync.py +0 -0
  803. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_safety.py +0 -0
  804. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_test_scoping.py +0 -0
  805. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worktree.py +0 -0
  806. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  807. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_write_parity.py +0 -0
  808. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/write_parity.py +0 -0
  809. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  810. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/contract.md +0 -0
  811. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  812. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  813. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  814. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  815. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  816. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/contract.md +0 -0
  817. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  818. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  819. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  820. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  821. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  822. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  823. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  824. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  825. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  826. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  827. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  828. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  829. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  830. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  831. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/contract.md +0 -0
  832. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  833. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  834. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  835. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  836. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  837. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  838. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  839. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  840. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  841. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  842. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  843. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  844. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  845. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  846. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/contract.md +0 -0
  847. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  848. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  849. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  850. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  851. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  852. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  853. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  854. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  855. {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.295
3
+ Version: 0.5.297
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.295
3
+ Version: 0.5.297
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
@@ -508,6 +508,7 @@ tests/test_conflict_fix.py
508
508
  tests/test_conflict_fix_semantic.py
509
509
  tests/test_coord_log_daemon_fallback_2547.py
510
510
  tests/test_coord_test.py
511
+ tests/test_coord_test_runner_acceptance_toolchain_2936.py
511
512
  tests/test_coord_test_runner_baseline.py
512
513
  tests/test_coord_test_runner_populated_home.py
513
514
  tests/test_coord_test_runner_routing.py
@@ -534,6 +534,7 @@
534
534
  "tests/test_conflict_fix_semantic.py",
535
535
  "tests/test_coord_log_daemon_fallback_2547.py",
536
536
  "tests/test_coord_test.py",
537
+ "tests/test_coord_test_runner_acceptance_toolchain_2936.py",
537
538
  "tests/test_coord_test_runner_baseline.py",
538
539
  "tests/test_coord_test_runner_populated_home.py",
539
540
  "tests/test_coord_test_runner_routing.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.295",
2
+ "tag": "0.5.297",
3
3
  "distance": 0,
4
- "node": "g6f3f2c4c263d6bd9620eee9c2030c0ed984ee448",
4
+ "node": "g47fe3ff98db0a0f6549b080e1a59c60423ff2df8",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -1742,6 +1742,53 @@ def _worker_subprocess_env(
1742
1742
  return env
1743
1743
 
1744
1744
 
1745
+ def worker_coord_reachable(base_env: dict[str, str] | None = None) -> tuple[bool, str]:
1746
+ """#2936: does ``coord`` resolve on a WORKER's PATH — not this agent
1747
+ process's own?
1748
+
1749
+ Built on the exact env a real worker is spawned into
1750
+ (:func:`_worker_subprocess_env`, whose #402/#2569 strip removes the
1751
+ fleet's pinned ``~/.coord-venv/bin`` from PATH). A worker that cannot
1752
+ resolve ``coord`` can run its entire suite, PASS, and be structurally
1753
+ unable to record that verdict (``coord test <id> --passed``) — the
1754
+ missing verdict then reads as a TEST FAILURE and walks the
1755
+ ``models.escalation`` ladder, re-dispatching already-correct work on a
1756
+ more expensive model for a PATH gap, not a weak one (#2897 cost one
1757
+ instance of this an extra opus rerun on top of an already-passing
1758
+ sonnet leg).
1759
+
1760
+ Before this, the gap was discovered only when a smoke worker's own
1761
+ final-turn transcript happened to mention it (as #2897's did) — this
1762
+ function exists so the agent can say so ITSELF, at startup, in
1763
+ ``journalctl --user -u coord-agent``, mirroring #1671's PATH diagnostics
1764
+ for capability probes.
1765
+
1766
+ Returns ``(ok, message)`` rather than logging directly, so the check is
1767
+ testable with a synthetic *base_env* with no mocking of ``shutil.which``
1768
+ or the logging module required. ``base_env=None`` (the production
1769
+ default) resolves against this process's real ``os.environ``, exactly
1770
+ like :func:`_worker_subprocess_env` itself.
1771
+ """
1772
+ worker_path = _worker_subprocess_env(base_env).get("PATH", "")
1773
+ resolved = shutil.which("coord", path=worker_path)
1774
+ if resolved:
1775
+ return True, (
1776
+ f"coord agent: worker PATH check OK — 'coord' resolves at {resolved} "
1777
+ "(a smoke/test worker on this machine can record its verdict, #2936)"
1778
+ )
1779
+ return False, (
1780
+ "coord agent: WARNING 'coord' does NOT resolve on a WORKER's PATH — "
1781
+ f"searched: {worker_path!r}. A smoke/test worker on this machine can "
1782
+ "run its whole suite, PASS, and be structurally unable to record the "
1783
+ "verdict via `coord test <id> --passed`; the missing verdict then "
1784
+ "reads as a TEST FAILURE and escalates the model for an "
1785
+ "infrastructure gap, not a weak one (#2936). Fix: re-run "
1786
+ "install-agent.sh on this machine so ~/.local/bin/coord exists and "
1787
+ "symlinks to $HOME/.coord-venv/bin/coord (the blue/green symlink "
1788
+ "itself, never a resolved .blue/.green path)."
1789
+ )
1790
+
1791
+
1745
1792
  def _slugify(text: str, max_len: int = 40) -> str:
1746
1793
  """Convert *text* to a URL/branch-safe slug."""
1747
1794
  slug = re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
@@ -5444,6 +5491,18 @@ class AgentServer:
5444
5491
  self.log_dir.mkdir(parents=True, exist_ok=True)
5445
5492
  self._load_state()
5446
5493
 
5494
+ # #2936: verify AT STARTUP — not a suite-run later — that a worker
5495
+ # this agent spawns will be able to resolve `coord` on its own PATH
5496
+ # to record a test/smoke verdict. Only the failure case is logged:
5497
+ # this file configures no logging handler of its own (`coord agent`
5498
+ # never calls `configure_daemon_logging`, unlike `coord serve` —
5499
+ # #2862), so a bare `_log.info` here would be a silent no-op on the
5500
+ # real daemon while `_log.warning` reaches `journalctl` via Python's
5501
+ # stderr handler-of-last-resort with zero configuration needed.
5502
+ _coord_reachable, _coord_reachable_msg = worker_coord_reachable()
5503
+ if not _coord_reachable:
5504
+ _log.warning(_coord_reachable_msg)
5505
+
5447
5506
  # ── #2299: hot config reload ────────────────────────────────────────────
5448
5507
 
5449
5508
  #: Config-derived state that a reload refreshes, versus the state it must
@@ -3759,18 +3759,29 @@ def _reconcile_blocked(
3759
3759
  except a CONFIRMED-clear reading OR a probe that came back unreadable
3760
3760
  (#2806), which is deliberate: a `blocked` entry this sweep cannot say
3761
3761
  anything new about must render EXACTLY as it did before #2230 existed.
3762
- Three ways to land there:
3762
+ Four ways to land there:
3763
3763
 
3764
3764
  * the block is PERMANENT (:func:`is_permanent_block_reason`) — #1844's
3765
3765
  guard refusal or #2019's dead end — neither of which any amount of
3766
3766
  re-checking can ever change;
3767
+ * the block is `_resolve_prereqs`'s own unsatisfiable ``after=`` verdict
3768
+ (:func:`_is_unsatisfiable_prereq_reason`, #2935) — a `waiting` entry
3769
+ that never reached `running` has no assignment and no branch, so
3770
+ there is categorically no merge-queue row for THIS sweep to have any
3771
+ opinion about; the entry's fate is `_reconcile_blocked_after`'s alone
3772
+ to decide, from the ``after=`` graph, on this or a later tick. Checked
3773
+ — and returned from — before :func:`_blocked_gate_reading` even runs,
3774
+ specifically so :func:`_reconcile_blocked_unreadable` never gets the
3775
+ chance to overwrite `last_reason` with a merge-gate "could not read"
3776
+ sentence and clobber the one marker `_reconcile_blocked_after` needs
3777
+ to recognise this row again next tick — see #2935 for the incident a
3778
+ missing version of this branch caused;
3767
3779
  * there is no evidence either way (:func:`_blocked_gate_reading` returns
3768
3780
  ``None``) AND :func:`_reconcile_blocked_unreadable` also has nothing
3769
- to add — an entry that never reached the merge queue at all (a
3770
- dispatch-time failure, an unsatisfiable ``after=``) has nothing this
3771
- sweep can cheaply re-check, and guessing would be exactly the "worse
3772
- than nothing" sweep the issue warns a naive "retry everything" pass
3773
- would be;
3781
+ to add — a dispatch-time failure (#2589's two per-run shapes) has
3782
+ nothing this sweep can cheaply re-check, and guessing would be
3783
+ exactly the "worse than nothing" sweep the issue warns a naive
3784
+ "retry everything" pass would be;
3774
3785
  * the gate is CONFIRMED still shut — the common, honest outcome for a
3775
3786
  `blocked` entry that has not in fact recovered yet.
3776
3787
 
@@ -3801,6 +3812,58 @@ def _reconcile_blocked(
3801
3812
  """
3802
3813
  if is_permanent_block_reason(entry.last_reason):
3803
3814
  return None
3815
+ if _is_unsatisfiable_prereq_reason(entry.last_reason):
3816
+ # #2935: this entry's ONLY `blocked` cause is `_resolve_prereqs`'s
3817
+ # own after= verdict (step 4's launch walk, or its #2362/#2756
3818
+ # sibling `_reconcile_blocked_after`, called immediately before this
3819
+ # function in the same per-tick loop) — a `waiting` entry that never
3820
+ # reached `running` at all (see `_resolve_prereqs`'s own comment:
3821
+ # "attempts is deliberately NOT incremented: nothing was ever
3822
+ # launched for this entry"). A never-dispatched entry has no
3823
+ # assignment and no branch, so there is no merge-queue row for
3824
+ # #2230's gate sweep to have ANY opinion about — a merge gate cannot
3825
+ # exist for something that was never built, and probing for one
3826
+ # anyway is a category error, not a failed probe.
3827
+ #
3828
+ # This must be checked BEFORE `_blocked_gate_reading`/
3829
+ # `_reconcile_blocked_unreadable` below, not folded into their "no
3830
+ # evidence" handling: `_reconcile_blocked_unreadable` WRITES
3831
+ # `last_reason` the instant the shell's live probe was attempted and
3832
+ # came back with no key (`live_blocked_unreadable`) — and doing that
3833
+ # here would CLOBBER this exact marker text, which is the ONLY
3834
+ # signal `_reconcile_blocked_after` uses (both here and on every
3835
+ # future tick) to recognise this row as an after=-caused block worth
3836
+ # re-diagnosing at all. The claude-coordinator#2935 incident: five
3837
+ # dependents whose prerequisite had already landed stayed `blocked`
3838
+ # for 178-207 consecutive ticks apiece, because the FIRST tick after
3839
+ # they became re-evaluable this way overwrote their own "will never
3840
+ # satisfy"/"not queued, not merged and not open" text with this
3841
+ # sweep's "no merge-queue row ... could not be read" sentence —
3842
+ # after which `_reconcile_blocked_after`'s guard could never
3843
+ # recognise the row again, even once the prerequisite genuinely
3844
+ # landed. Bailing out here, before any write, keeps the marker
3845
+ # intact for as many ticks as it takes the after= graph to actually
3846
+ # clear — the entry's fate stays entirely `_reconcile_blocked_
3847
+ # after`'s to decide, exactly as the issue's "Expected behaviour"
3848
+ # asks: answered from the after= graph, never from a merge-gate
3849
+ # probe.
3850
+ #
3851
+ # Deliberately a text match on the SAME two verdict shapes
3852
+ # `_reconcile_blocked_after` itself already trusts to gate its own
3853
+ # resume — not the #2589/#2635 per-run dispatch markers
3854
+ # (`is_dispatch_failure_reason`/`is_empty_branch_death_reason`),
3855
+ # which stay OUT of this function on purpose (see
3856
+ # `test_a_pre_dispatch_reason_text_does_not_suppress_a_real_
3857
+ # unreadable_note`): those two describe what ONE launch attempt
3858
+ # dispatched, which can go stale the moment an earlier attempt on
3859
+ # the SAME entry left real evidence behind, so only the shell's live
3860
+ # re-check (`live_blocked_unreadable`) is trusted to suppress them.
3861
+ # `_resolve_prereqs`'s unsatisfiable verdict carries no such
3862
+ # per-run ambiguity: it is only ever written for a `waiting` entry
3863
+ # that has NEVER reached `running`, so the "nothing was ever
3864
+ # dispatched" reading it encodes cannot be contradicted by an
3865
+ # earlier attempt the way a per-run marker can.
3866
+ return None
3804
3867
  reading = _blocked_gate_reading(entry, facts, live_blocked_gate)
3805
3868
  if reading is None:
3806
3869
  return _reconcile_blocked_unreadable(entry, live_blocked_unreadable)
@@ -109,14 +109,52 @@ echo "Installed: $("$VENV_DIR/bin/coord" version)"
109
109
 
110
110
  # The venv is now fully installed and verified working (coord version printed
111
111
  # above). Disarm the cleanup trap here: everything from this point on
112
- # (machine-name detection, the systemd unit, node shims, systemctl,
113
- # loginctl) is unrelated to venv creation, and a failure in any of it must
114
- # NOT delete a venv that already works — that would poison the retry with a
115
- # from-scratch pip re-install just to get back to the same later failure
116
- # (#2911 review).
112
+ # (machine-name detection, the systemd unit, the coord CLI shim, node shims,
113
+ # systemctl, loginctl) is unrelated to venv creation, and a failure in any of
114
+ # it must NOT delete a venv that already works — that would poison the retry
115
+ # with a from-scratch pip re-install just to get back to the same later
116
+ # failure (#2911 review).
117
117
  trap - EXIT
118
118
  CREATED_VENV=0
119
119
 
120
+ # --- coord CLI shim (#2936) --------------------------------------------------
121
+ # Workers are spawned with THIS agent's own venv stripped from PATH (#402,
122
+ # hardened by #2569's PIP_REQUIRE_VIRTUALENV after an 11h fleet outage — see
123
+ # coord/agent.py's `_worker_subprocess_env`). That strip is correct and must
124
+ # stay: a worker's bare `pip install -e .` must never land in the fleet's
125
+ # live $VENV_DIR. But nothing else guarantees a worker's PATH resolves
126
+ # `coord` itself — and when it doesn't, a smoke/test worker can run its
127
+ # whole suite, pass, and be structurally unable to record the verdict via
128
+ # `coord test <id> --passed`. The missing verdict then reads as a TEST
129
+ # FAILURE and walks the model-escalation ladder for an infrastructure gap,
130
+ # never a weak model (#2936; one instance cost an extra opus rerun of an
131
+ # already-passing sonnet leg).
132
+ #
133
+ # $HOME/.local/bin is (a) already put on the coord-agent unit's PATH below
134
+ # and (b) NOT stripped from a worker's PATH — #2569's strip matches
135
+ # $VENV_DIR/bin by name/realpath only, never $HOME/.local/bin. A plain
136
+ # symlink there closes the gap for every worker this agent spawns.
137
+ #
138
+ # MUST point at $VENV_DIR itself — the blue/green symlink `coord agent
139
+ # update` repoints atomically on every release (docs/AGENT_OPERATIONS.md) —
140
+ # NOT at a `readlink -f`-resolved `.blue`/`.green` path. Resolving it here
141
+ # would freeze the shim on whichever side happens to be live at install
142
+ # time and silently go stale on the very next blue/green swap.
143
+ COORD_SHIM_DIR="$HOME/.local/bin"
144
+ COORD_SHIM_TARGET="$VENV_DIR/bin/coord"
145
+ COORD_SHIM_LINK="$COORD_SHIM_DIR/coord"
146
+ mkdir -p "$COORD_SHIM_DIR"
147
+ if [ -L "$COORD_SHIM_LINK" ] && [ "$(readlink "$COORD_SHIM_LINK")" = "$COORD_SHIM_TARGET" ]; then
148
+ : # already ours, and already pointed at the unresolved blue/green symlink
149
+ elif [ -e "$COORD_SHIM_LINK" ] || [ -L "$COORD_SHIM_LINK" ]; then
150
+ echo "warning: $COORD_SHIM_LINK exists and is not the coord shim — left as-is"
151
+ echo " A smoke/test worker on this machine cannot record its verdict via"
152
+ echo " 'coord test <id> --passed' unless 'coord' resolves on ITS PATH (#2936)."
153
+ else
154
+ ln -s "$COORD_SHIM_TARGET" "$COORD_SHIM_LINK"
155
+ echo "Installed coord shim: $COORD_SHIM_LINK -> $COORD_SHIM_TARGET"
156
+ fi
157
+
120
158
  # Detect machine name if not provided
121
159
  if [ -z "$MACHINE_NAME" ]; then
122
160
  MACHINE_NAME=$(hostname -s)
@@ -648,15 +648,33 @@ run_python_acceptance_ci() {
648
648
  local ci_home="$WT/.coord-ci-home"
649
649
  mkdir -p "$ci_home"
650
650
  log "running: coord acceptance run --all --ci (cli-pytest route, ms-37)"
651
- if (env -u COORD_SERVICE_URL -u COORD_TOKEN -u COORD_CONFIG \
651
+ local rc=0
652
+ (env -u COORD_SERVICE_URL -u COORD_TOKEN -u COORD_CONFIG \
652
653
  HOME="$ci_home" PATH="$venv/bin:$PATH" \
653
654
  "$venv/bin/coord" acceptance run \
654
655
  --repo claude-coordinator --all --ci \
655
656
  --config "$WT/.github/coord-ci-acceptance.yml" \
656
- --for-path coord/cli.py --path "$WT") >"$acc_out" 2>&1; then
657
+ --for-path coord/cli.py --path "$WT") >"$acc_out" 2>&1 || rc=$?
658
+ if [[ "$rc" -eq 0 ]]; then
657
659
  say "PASS(python): ordinary suite + sealed acceptance suite (ms-37, cli-pytest) both green"
658
660
  return 0
659
661
  fi
662
+ # #2936: 127 is the shell's "command not found" for `$venv/bin/coord`
663
+ # itself — the SAME infrastructure class as the missing-python3/missing-
664
+ # fallback-command cases above (#1814), NOT a red suite. This venv is the
665
+ # one `run_python` just built (or found already usable) and successfully
666
+ # ran the ordinary pytest suite from moments ago, so a missing
667
+ # `$venv/bin/coord` here means this package's own console-script entry
668
+ # point never landed in it — an environment problem, not something the
669
+ # branch under test can be blamed for. Before this check, "coord:
670
+ # command not found" (#2936 — a smoke worker unable to resolve `coord` at
671
+ # all) and a genuinely red sealed suite were indistinguishable here, and
672
+ # the missing binary silently laundered into `RESULT: FAIL`.
673
+ if [[ "$rc" -eq 127 ]]; then
674
+ toolchain_missing coord python-acceptance-cli "\$venv/bin ($venv/bin), then \$PATH"
675
+ tail -n 20 "$acc_out" | sed 's/^/ /'
676
+ return 1
677
+ fi
660
678
  say "FAIL(python): sealed acceptance suite (cli-pytest route, ms-37) failed under --ci — either a test-id NOT listed in expected_red failed for real, or one listed in expected_red unexpectedly passed (see .github/workflows/test.yml's 'A red result here is attributable, not a mystery' step for the two-cause triage)"
661
679
  tail -n 40 "$acc_out" | sed 's/^/ /'
662
680
  return 1
@@ -0,0 +1,181 @@
1
+ """Regression tests for #2936 — `run_python_acceptance_ci`'s ``coord`` call
2
+ in scripts/coord-test-runner.sh must never launder "the binary could not run
3
+ at all" into a red sealed-acceptance suite.
4
+
5
+ BACKGROUND. #2897's smoke worker on dell64 could not resolve `coord` on ITS
6
+ OWN path at all (no `~/.local/bin/coord` shim on that machine) and said so in
7
+ its own final turn — it printed the PASS marker but had no way to record the
8
+ verdict via `coord test <id> --passed`. The missing verdict then read as a
9
+ TEST FAILURE and walked the model-escalation ladder for a PATH gap, not a
10
+ weak model: an already-correct sonnet leg was re-run on opus for no reason.
11
+
12
+ THIS FILE'S SLICE OF #2936. `run_python_acceptance_ci` (the ms-37 cli-pytest
13
+ acceptance route, #2180) is the one place left in this script that shells out
14
+ to `coord` at all — the Rust/cargo arm that used to carry a similar risk left
15
+ with the crate in #2899. Before this fix, that call's `if ... ; then PASS
16
+ ... fi` collapsed exit 127 ("$venv/bin/coord: No such file or directory" —
17
+ the shell's own "command not found", the same class #1814 already guards for
18
+ python3/cargo/the fallback command) into the same `FAIL(python)` a genuinely
19
+ red sealed suite gets. The two must never share a verdict: one says "the
20
+ branch broke something", the other says "the environment could not tell us
21
+ anything" (#1814's whole point).
22
+
23
+ HOW THIS RUNS IN MILLISECONDS. Same technique as
24
+ `tests/test_coord_test_runner_populated_home.py`: fake interpreters are
25
+ planted at the exact paths the runner probes (`$WT/.venv/bin/python`,
26
+ `$WT/.venv/bin/coord`) so no real venv is built and no real pytest/coord CLI
27
+ runs. The fake `coord` exits with whatever `FAKE_COORD_EXIT` says, which is
28
+ indistinguishable to the runner (and to a real "command not found") from
29
+ `$?` alone — the runner never looks past the exit code, so faking THAT is a
30
+ faithful stand-in for a truly-missing binary.
31
+ """
32
+
33
+ from __future__ import annotations
34
+
35
+ import os
36
+ import stat
37
+ import subprocess
38
+ from pathlib import Path
39
+
40
+ import pytest
41
+
42
+ from .conftest import POSIX_BASH
43
+
44
+ REPO_ROOT = Path(__file__).resolve().parents[1]
45
+ SCRIPT = REPO_ROOT / "scripts" / "coord-test-runner.sh"
46
+
47
+ #: Answers just enough pytest invocation shapes to get the ordinary suite to
48
+ #: PASS and reach `run_python_post_arms` — `-c` probes (xdist detection) and
49
+ #: the full-suite `-m pytest ... --ignore=tests/acceptance` run. Nothing here
50
+ #: needs to answer a flake/baseline re-run (`::` node ids) or the
51
+ #: populated-home arm's bare test-file invocation: the fixture repo's diff
52
+ #: touches no python test files, so that arm SKIPs on its own before either
53
+ #: shape would be needed.
54
+ _FAKE_PYTHON = r"""#!/usr/bin/env bash
55
+ if [[ "$1" == "-c" ]]; then
56
+ exit 1 # no xdist -> serial
57
+ fi
58
+ if [[ "$1" == "-m" && "$2" == "pytest" ]]; then
59
+ printf '1 passed\n'
60
+ exit 0
61
+ fi
62
+ exit 0
63
+ """
64
+
65
+ #: A stand-in for `coord` at `$WT/.venv/bin/coord`, where
66
+ #: `run_python_acceptance_ci` looks for it once the ordinary suite is green.
67
+ #: `FAKE_COORD_EXIT` stands in for whatever exit code a real invocation would
68
+ #: have produced — 127 for "command not found", anything else for a real
69
+ #: pass/fail.
70
+ _FAKE_COORD = r"""#!/usr/bin/env bash
71
+ exit "${FAKE_COORD_EXIT:-0}"
72
+ """
73
+
74
+
75
+ def _git(cwd: Path, *args: str) -> str:
76
+ return subprocess.run(
77
+ ["git", *args],
78
+ cwd=str(cwd),
79
+ capture_output=True,
80
+ text=True,
81
+ encoding="utf-8",
82
+ check=True,
83
+ ).stdout.strip()
84
+
85
+
86
+ def _executable(path: Path, text: str) -> None:
87
+ path.parent.mkdir(parents=True, exist_ok=True)
88
+ path.write_text(text, encoding="utf-8")
89
+ path.chmod(path.stat().st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
90
+
91
+
92
+ @pytest.fixture
93
+ def repo(tmp_path: Path) -> Path:
94
+ """A repo shaped like an ordinary code-coordinator Test leg: the diff
95
+ touches only ``coord/**`` (routes to pytest, no python test files, so the
96
+ populated-home arm SKIPs itself and does not need its own fake)."""
97
+ r = tmp_path / "repo"
98
+ (r / "coord").mkdir(parents=True)
99
+ _git(r, "init", "-q", "-b", "main")
100
+ _git(r, "config", "user.email", "t@t.com")
101
+ _git(r, "config", "user.name", "Test")
102
+ (r / "coord" / "foo.py").write_text("x = 1\n", encoding="utf-8")
103
+ (r / "README.md").write_text("init\n", encoding="utf-8")
104
+ _git(r, "add", "-A")
105
+ _git(r, "commit", "-qm", "initial")
106
+ _git(r, "tag", "base")
107
+
108
+ (r / "coord" / "foo.py").write_text("x = 2\n", encoding="utf-8")
109
+ _git(r, "add", "-A")
110
+ _git(r, "commit", "-qm", "branch change")
111
+
112
+ _executable(r / ".venv" / "bin" / "python", _FAKE_PYTHON)
113
+ _executable(r / ".venv" / "bin" / "coord", _FAKE_COORD)
114
+ return r
115
+
116
+
117
+ def _run(repo: Path, **fake_env: str) -> subprocess.CompletedProcess[str]:
118
+ env = dict(os.environ)
119
+ env.update(fake_env)
120
+ return subprocess.run(
121
+ [POSIX_BASH, str(SCRIPT), str(repo), "--base-ref", "base", "--repo", "code-coordinator"],
122
+ capture_output=True,
123
+ text=True,
124
+ encoding="utf-8",
125
+ timeout=120,
126
+ env=env,
127
+ )
128
+
129
+
130
+ def test_a_green_acceptance_run_still_passes(repo: Path) -> None:
131
+ """Sanity baseline: with no injected fault, the branch is green end to end."""
132
+ result = _run(repo, FAKE_COORD_EXIT="0")
133
+
134
+ assert result.returncode == 0, (result.stdout, result.stderr)
135
+ assert "RESULT: PASS" in result.stdout
136
+
137
+
138
+ def test_missing_coord_binary_is_infrastructure_not_a_failed_suite(repo: Path) -> None:
139
+ """The #2936 core guard: exit 127 ("command not found") from the `coord`
140
+ call must read as INFRA, never as a red sealed suite.
141
+
142
+ Asserting the ABSENCE of the failure wording matters as much as the
143
+ presence of the new one — `RESULT: FAIL` here is exactly what would
144
+ walk the model-escalation ladder for a PATH gap (#2897's dell64 cost).
145
+ """
146
+ result = _run(repo, FAKE_COORD_EXIT="127")
147
+
148
+ out = result.stdout + result.stderr
149
+ assert result.returncode == 3, out
150
+ assert "TOOLCHAIN MISSING(python-acceptance-cli)" in out
151
+ assert "coord" in out
152
+ assert "RESULT: INFRA" in out
153
+
154
+ assert "FAIL(python)" not in out
155
+ assert "RESULT: FAIL" not in out
156
+ assert "sealed acceptance suite (cli-pytest route, ms-37) failed" not in out
157
+
158
+
159
+ def test_missing_coord_binary_message_is_actionable(repo: Path) -> None:
160
+ """Matches the #1814 bar every other TOOLCHAIN MISSING message meets:
161
+ which tool, where it looked, and that this is not a test verdict."""
162
+ result = _run(repo, FAKE_COORD_EXIT="127")
163
+ out = result.stdout + result.stderr
164
+
165
+ assert "INFRASTRUCTURE failure" in out
166
+ assert "python-acceptance-cli suite never ran" in out
167
+
168
+
169
+ def test_a_genuinely_failing_acceptance_suite_is_still_a_failure(repo: Path) -> None:
170
+ """The other half of the distinction: a real red sealed suite (any
171
+ non-127 non-zero exit) must not be laundered into an infrastructure
172
+ error by this change."""
173
+ result = _run(repo, FAKE_COORD_EXIT="3")
174
+
175
+ out = result.stdout + result.stderr
176
+ assert result.returncode == 1, out
177
+ assert "FAIL(python)" in out
178
+ assert "sealed acceptance suite (cli-pytest route, ms-37) failed" in out
179
+ assert "RESULT: FAIL" in out
180
+ assert "TOOLCHAIN MISSING" not in out
181
+ assert "RESULT: INFRA" not in out
@@ -3355,6 +3355,105 @@ def test_a_blocked_entry_that_has_hit_the_resume_ceiling_stays_blocked_and_says_
3355
3355
  assert plan.launch is None
3356
3356
 
3357
3357
 
3358
+ # ── #2935: a never-dispatched after=-blocked entry must never reach the ────
3359
+ # merge-gate sweep at all
3360
+ #
3361
+ # claude-coordinator#2935: a `waiting` entry blocked by `_resolve_prereqs`'s
3362
+ # own unsatisfiable `after=` verdict has no assignment and no branch — there
3363
+ # is categorically no merge-queue row for #2230's sweep to have an opinion
3364
+ # about, "unreadable" or otherwise. Before this fix, `_reconcile_blocked`
3365
+ # never special-cased this shape: it fell through to `_blocked_gate_reading`
3366
+ # (which correctly finds no evidence) and then to `_reconcile_blocked_
3367
+ # unreadable`, which — whenever the shell's live probe had actually been
3368
+ # attempted (`live_blocked_unreadable` carrying a note, exactly what
3369
+ # `coord.commands.drive_queue._fetch_live_blocked_gate`'s #2806 self-heal
3370
+ # produces for a row with no merge-queue row) — WROTE `last_reason` to a
3371
+ # "could not be read" sentence. That overwrite destroyed the only marker
3372
+ # `_reconcile_blocked_after` uses to recognise this row as after=-caused at
3373
+ # all, so every later tick — even long after the prerequisite landed — took
3374
+ # the SAME "no evidence, probe unreadable" branch forever: a permanent
3375
+ # block, never resumed. These pin the fix: the merge-gate sweep must bail
3376
+ # out before ever consulting `live_blocked_unreadable` for this shape, and
3377
+ # the entry must still resume once its prereq actually lands.
3378
+
3379
+
3380
+ def test_a_never_dispatched_after_blocked_entry_never_reports_gate_unreadable():
3381
+ """The shell's live probe (a real `live_blocked_unreadable` note, the
3382
+ exact shape `_fetch_live_blocked_gate` emits for a row with no
3383
+ merge-queue row) must not produce a `gate_unreadable` reconcile — or any
3384
+ write at all — for an entry whose only cause is an unsatisfiable
3385
+ `after=` verdict with its prereq still not landed."""
3386
+ dep_key = entry_key(REPO, 2897)
3387
+ entries = [
3388
+ entry(2897, position=0, state=STATE_BLOCKED),
3389
+ _blocked_entry(
3390
+ 2899,
3391
+ position=1,
3392
+ after=(dep_key,),
3393
+ last_reason=f"pre-req {dep_key} is queued but blocked — it will never satisfy",
3394
+ ),
3395
+ ]
3396
+ plan = plan_tick(
3397
+ entries,
3398
+ board(),
3399
+ capacity=1,
3400
+ live_blocked_gate={},
3401
+ live_blocked_unreadable={
3402
+ entry_key(REPO, 2899): "no merge-queue row for this entry, even "
3403
+ "after the self-heal enqueue attempt"
3404
+ },
3405
+ )
3406
+ assert plan.reconciles == ()
3407
+ assert plan.launch is None
3408
+
3409
+
3410
+ def test_a_never_dispatched_after_blocked_entry_still_resumes_once_its_prereq_lands():
3411
+ """End-to-end regression for the #2935 incident: a tick where the
3412
+ prereq has NOT yet landed and the shell's probe comes back unreadable
3413
+ must leave `last_reason` untouched (nothing in `plan.reconciles` to
3414
+ write) — so a LATER tick, once the prereq lands, still recognises the
3415
+ original marker and resumes normally, exactly as it would have if the
3416
+ spurious probe had never run."""
3417
+ dep_key = entry_key(REPO, 2897)
3418
+ blocked_dep = entry(2897, position=0, state=STATE_BLOCKED)
3419
+ dependent = _blocked_entry(
3420
+ 2899,
3421
+ position=1,
3422
+ after=(dep_key,),
3423
+ resumes=0,
3424
+ last_reason=f"pre-req {dep_key} is queued but blocked — it will never satisfy",
3425
+ )
3426
+
3427
+ # Tick 1: prereq still blocked, shell's probe comes back unreadable —
3428
+ # must be a total no-op (the #2935 fix).
3429
+ tick1 = plan_tick(
3430
+ [blocked_dep, dependent],
3431
+ board(),
3432
+ capacity=1,
3433
+ live_blocked_gate={},
3434
+ live_blocked_unreadable={
3435
+ entry_key(REPO, 2899): "no merge-queue row for this entry, even "
3436
+ "after the self-heal enqueue attempt"
3437
+ },
3438
+ )
3439
+ assert tick1.reconciles == ()
3440
+
3441
+ # Tick 2: the prereq has since landed. `dependent`'s `last_reason` is
3442
+ # STILL the original unsatisfiable-prereq marker — untouched by tick 1 —
3443
+ # so `_reconcile_blocked_after` recognises it and resumes it, even
3444
+ # though a merge-gate probe against it failed in between.
3445
+ tick2 = plan_tick(
3446
+ [entry(2897, position=0, state=STATE_DONE), dependent],
3447
+ board(merged=(2897,)),
3448
+ capacity=1,
3449
+ )
3450
+ reconcile = next(r for r in tick2.reconciles if r.key == entry_key(REPO, 2899))
3451
+ assert reconcile.outcome == "resumed"
3452
+ assert reconcile.updates["state"] == STATE_WAITING
3453
+ assert reconcile.updates["attempts"] == 0
3454
+ assert tick2.launch is not None and tick2.launch.issue == 2899
3455
+
3456
+
3358
3457
  # ── #2362: a blocked entry resumes once its unsatisfiable after= lands ─────
3359
3458
  #
3360
3459
  # `_resolve_prereqs` blocks a `waiting` entry the instant one of its named