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