code-coordinator 0.5.587__tar.gz → 0.5.589__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 (937) hide show
  1. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/bugbash.py +158 -19
  7. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/bugbash.py +31 -0
  8. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/dispatch.py +83 -15
  9. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/mac_native_driver.py +148 -11
  10. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/prereqs.py +158 -2
  11. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_bugbash.py +264 -6
  12. code_coordinator-0.5.589/tests/test_cli_inject_board_less.py +161 -0
  13. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_mac_native_driver.py +152 -5
  14. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_prereqs.py +119 -3
  15. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.claude/commands/board.md +0 -0
  16. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.claude/commands/complete-session.md +0 -0
  17. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.claude/commands/coordinator.md +0 -0
  18. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.githooks/_lib.sh +0 -0
  19. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.githooks/post-checkout +0 -0
  20. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.githooks/post-commit +0 -0
  21. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.githooks/post-merge +0 -0
  22. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  23. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.github/coord-ci-acceptance.yml +0 -0
  24. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.github/workflows/auto-release.yml +0 -0
  25. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/.gitignore +0 -0
  28. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/GOAL.md +0 -0
  30. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/LICENSE +0 -0
  31. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/README.md +0 -0
  33. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/backup.py +0 -0
  51. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/client.py +0 -0
  67. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/config.py +0 -0
  106. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/reports.html +0 -0
  114. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/db.py +0 -0
  117. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dead_end.py +0 -0
  118. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/decomposition_chat.py +0 -0
  119. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/README.md +0 -0
  120. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-agent.service +0 -0
  121. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-backup.service +0 -0
  122. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-backup.timer +0 -0
  123. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-db-backup.service +0 -0
  124. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-db-backup.sh +0 -0
  125. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-db-backup.timer +0 -0
  126. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-dr-verify.service +0 -0
  127. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-dr-verify.timer +0 -0
  128. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-drive-queue.service +0 -0
  129. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-drive-queue.timer +0 -0
  130. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-failure-notify.service +0 -0
  131. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-fleet-watchdog.service +0 -0
  132. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  133. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-notify.service +0 -0
  134. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-notify.timer +0 -0
  135. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-release-propagate.service +0 -0
  136. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-release-propagate.timer +0 -0
  137. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-release-window.service +0 -0
  138. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-release-window.timer +0 -0
  139. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-serve.service +0 -0
  140. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-web-dist-build.service +0 -0
  141. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-web-dist-build.timer +0 -0
  142. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy/coord-web.service +0 -0
  143. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy_manifest.py +0 -0
  144. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deploy_units.py +0 -0
  145. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deprecation_telemetry.py +0 -0
  146. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/deps.py +0 -0
  147. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/diagnose.py +0 -0
  148. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dirlink.py +0 -0
  149. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dispatch.py +0 -0
  150. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dispatch_liveness.py +0 -0
  151. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dist_name.py +0 -0
  152. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dr_promote.py +0 -0
  153. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/dr_verify.py +0 -0
  154. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/drive.py +0 -0
  155. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/drive_queue.py +0 -0
  156. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/drive_sessions_snapshot.py +0 -0
  157. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/drive_state.py +0 -0
  158. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/events.py +0 -0
  159. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/failure_class.py +0 -0
  160. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/failure_classifier.py +0 -0
  161. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/filelock.py +0 -0
  162. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/fleet_config_health.py +0 -0
  163. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/forge_availability.py +0 -0
  164. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/freshness.py +0 -0
  165. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gate_a.py +0 -0
  166. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gate_b.py +0 -0
  167. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gate_snapshot.py +0 -0
  168. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gates.py +0 -0
  169. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gen_board_fixture.py +0 -0
  170. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/github_ops.py +0 -0
  171. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/github_throttle.py +0 -0
  172. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/goal.py +0 -0
  173. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/graph_health.py +0 -0
  174. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/gtk_native_driver.py +0 -0
  175. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/__init__.py +0 -0
  176. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/aggregate.py +0 -0
  177. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/__init__.py +0 -0
  178. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/_ci_pin.py +0 -0
  179. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/agent_install.py +0 -0
  180. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/cargo_targets.py +0 -0
  181. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/claude_binary.py +0 -0
  182. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/config_drift.py +0 -0
  183. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  184. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/coord_web_ci_pin.py +0 -0
  185. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/deploy_lane_facts.py +0 -0
  186. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/disk.py +0 -0
  187. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/fleet_board.py +0 -0
  188. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  189. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/fleet_phantom.py +0 -0
  190. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/fleet_unit_drift.py +0 -0
  191. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/graph.py +0 -0
  192. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/graphify_cli.py +0 -0
  193. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/index_lock.py +0 -0
  194. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/issues_sync_staleness.py +0 -0
  195. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/local_machine_identity.py +0 -0
  196. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/plan_usage.py +0 -0
  197. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/pr_churn.py +0 -0
  198. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/release_cordon.py +0 -0
  199. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/repo_state.py +0 -0
  200. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/spawned_coord.py +0 -0
  201. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/stalled_pipeline.py +0 -0
  202. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/timer_active.py +0 -0
  203. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/toolchain.py +0 -0
  204. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/unit_drift.py +0 -0
  205. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/unit_enablement.py +0 -0
  206. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/wedged_drive_queue.py +0 -0
  207. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/checks/worktrees.py +0 -0
  208. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/cli.py +0 -0
  209. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/context.py +0 -0
  210. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/fleet_snapshot.py +0 -0
  211. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/models.py +0 -0
  212. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/pypi.py +0 -0
  213. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/registry.py +0 -0
  214. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/render.py +0 -0
  215. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/health/units.py +0 -0
  216. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/hooks.py +0 -0
  217. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/housekeeping.py +0 -0
  218. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/interactive.py +0 -0
  219. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/invariant_alarms.py +0 -0
  220. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/issue_store.py +0 -0
  221. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/issues_sync_status.py +0 -0
  222. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/liveness_auditor.py +0 -0
  223. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/machine_fault.py +0 -0
  224. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/machine_metrics.py +0 -0
  225. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/machine_onboard.py +0 -0
  226. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/machine_pause.py +0 -0
  227. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/machine_stats.py +0 -0
  228. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/merge_queue.py +0 -0
  229. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/milestone_chat.py +0 -0
  230. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/milestone_dispatch.py +0 -0
  231. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/milestone_gate.py +0 -0
  232. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/milestone_order.py +0 -0
  233. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/mock_author.py +0 -0
  234. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/models.py +0 -0
  235. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/network.py +0 -0
  236. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/new_issue_chat.py +0 -0
  237. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/__init__.py +0 -0
  238. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/baseline.py +0 -0
  239. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/cli.py +0 -0
  240. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/collect.py +0 -0
  241. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/digest.py +0 -0
  242. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/models.py +0 -0
  243. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/predicate.py +0 -0
  244. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/service.py +0 -0
  245. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/store.py +0 -0
  246. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notifier/transport.py +0 -0
  247. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/notify.py +0 -0
  248. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/openapi.py +0 -0
  249. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/overlap_fence.py +0 -0
  250. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/overlap_predict.py +0 -0
  251. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/parentage.py +0 -0
  252. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/parentage_github.py +0 -0
  253. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/pipeline.py +0 -0
  254. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/plan_parser.py +0 -0
  255. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/plans.py +0 -0
  256. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/platform_paths.py +0 -0
  257. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/portal_bridge.py +0 -0
  258. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/portal_store.py +0 -0
  259. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/portal_sync.py +0 -0
  260. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/pr_body_lint.py +0 -0
  261. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/progress.py +0 -0
  262. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/providers/__init__.py +0 -0
  263. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/providers/base.py +0 -0
  264. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/providers/claude.py +0 -0
  265. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/providers/claude_pty.py +0 -0
  266. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/providers/opencode.py +0 -0
  267. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/queue_diagnose.py +0 -0
  268. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/reconcile.py +0 -0
  269. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/reconcile_tick.py +0 -0
  270. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/refine_chat.py +0 -0
  271. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/release_cordon.py +0 -0
  272. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/release_gate.py +0 -0
  273. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/release_propagate.py +0 -0
  274. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/release_verify.py +0 -0
  275. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/release_window.py +0 -0
  276. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/repo_dormancy.py +0 -0
  277. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/repo_edit.py +0 -0
  278. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/repo_onboard.py +0 -0
  279. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/reports.py +0 -0
  280. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/rest_schema.py +0 -0
  281. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/restart_cmd.py +0 -0
  282. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/revalidate.py +0 -0
  283. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/review.py +0 -0
  284. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/scorecard.py +0 -0
  285. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/self_health.py +0 -0
  286. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/serve_app.py +0 -0
  287. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  288. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  289. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  290. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  291. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  292. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/portal-followup/SKILL.md +0 -0
  293. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/release-now/SKILL.md +0 -0
  294. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  295. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  296. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/skills/update-issue/SKILL.md +0 -0
  297. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/smoke.py +0 -0
  298. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/smoke_tags.py +0 -0
  299. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/spend_ceiling.py +0 -0
  300. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/split_work.py +0 -0
  301. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/sql.py +0 -0
  302. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/stage_projection.py +0 -0
  303. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/state.py +0 -0
  304. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/store_migrate.py +0 -0
  305. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/store_parity.py +0 -0
  306. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/templates/deploy-cloudflare.node.yml +0 -0
  307. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/test_author.py +0 -0
  308. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/test_chat.py +0 -0
  309. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/test_orchestrator.py +0 -0
  310. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/test_report.py +0 -0
  311. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/tui_pty_driver.py +0 -0
  312. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/tui_release.py +0 -0
  313. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/uat_checks.py +0 -0
  314. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/usage.py +0 -0
  315. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/usage_limits.py +0 -0
  316. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/usage_rollup.py +0 -0
  317. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/win_native_bridge.py +0 -0
  318. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/win_native_driver.py +0 -0
  319. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coord/worker_events.py +0 -0
  320. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/coordinator.example.yml +0 -0
  321. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-agent.service +0 -0
  322. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-backup.service +0 -0
  323. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-backup.timer +0 -0
  324. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-db-backup.service +0 -0
  325. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-db-backup.sh +0 -0
  326. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-db-backup.timer +0 -0
  327. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-dr-verify.service +0 -0
  328. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-dr-verify.timer +0 -0
  329. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-drive-queue.service +0 -0
  330. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-drive-queue.timer +0 -0
  331. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-failure-notify.service +0 -0
  332. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-failure-notify.sh +0 -0
  333. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-fleet-watchdog.service +0 -0
  334. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-fleet-watchdog.timer +0 -0
  335. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-notify.service +0 -0
  336. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-notify.timer +0 -0
  337. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-release-propagate.service +0 -0
  338. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-release-propagate.timer +0 -0
  339. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-release-window.service +0 -0
  340. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-release-window.timer +0 -0
  341. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-serve.service +0 -0
  342. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-web-dist-build.service +0 -0
  343. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-web-dist-build.sh +0 -0
  344. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-web-dist-build.timer +0 -0
  345. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-web-rollback.sh +0 -0
  346. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/coord-web.service +0 -0
  347. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/deploy/node-shim.sh +0 -0
  348. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ADR_COORD_TUI_CI.md +0 -0
  349. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  350. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ADR_COORD_WEB_CI.md +0 -0
  351. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ADR_COORD_WEB_DIST.md +0 -0
  352. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  353. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/AGENT_OPERATIONS.md +0 -0
  354. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ARCHITECTURE.md +0 -0
  355. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ARCH_SECURITY_GATES.md +0 -0
  356. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/COCKPIT.md +0 -0
  357. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/CONTROL_CENTER.md +0 -0
  358. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/COST_DISCIPLINE.md +0 -0
  359. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/CROSS_PLATFORM.md +0 -0
  360. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/CUSTOMER_FACING_APPS.md +0 -0
  361. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/DATA_STORE_SELECTION.md +0 -0
  363. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/DISASTER_RECOVERY.md +0 -0
  364. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/DRIVE_QUEUE.md +0 -0
  365. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/EPHEMERAL_WORKERS.md +0 -0
  366. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/FORGE_MIGRATION.md +0 -0
  367. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/GRAPHIFY_SETUP.md +0 -0
  368. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ISSUE_GUIDANCE.md +0 -0
  369. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/MAC_MINI.md +0 -0
  370. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  371. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/NOTIFIER.md +0 -0
  372. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/OPENCODE_VERIFICATION.md +0 -0
  373. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/OPERATING_GOTCHAS.md +0 -0
  374. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/OPERATOR_GUIDES.md +0 -0
  375. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/ORACLE_LOOP.md +0 -0
  376. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/PHONE_WEBAPP.md +0 -0
  377. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/PIPELINE_V2.md +0 -0
  378. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/PLATFORM_EVOLUTION.md +0 -0
  379. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/SECOND_BACKEND.md +0 -0
  380. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/STORE_SERVICE.md +0 -0
  381. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  382. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/WEB_CONTROL_CENTER.md +0 -0
  383. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/WSL_WINDOWS_WORKER.md +0 -0
  384. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/mocks/web/README.md +0 -0
  385. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/mocks/web/_tokens.css +0 -0
  386. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/mocks/web/issue-detail.html +0 -0
  387. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/mocks/web/pipeline-narrow.html +0 -0
  388. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/docs/mocks/web/pipeline-wide.html +0 -0
  389. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/graphify-out/.gitignore +0 -0
  390. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/install-agent.sh +0 -0
  391. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/pyproject.toml +0 -0
  392. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/audit_review_verdict_overrides.py +0 -0
  393. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  394. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/build-worker-image.sh +0 -0
  395. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/coordinator-machine.py +0 -0
  396. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/dr-down.sh +0 -0
  397. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/dr-up.sh +0 -0
  398. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/epic-down.sh +0 -0
  399. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/epic-up.sh +0 -0
  400. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/preflight.sh +0 -0
  401. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/provision-server.sh +0 -0
  402. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/provision-worker.sh +0 -0
  403. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  404. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  405. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/throwaway-vm.sh +0 -0
  406. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/azure-workers/verify-github-token.sh +0 -0
  407. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/check_gh_argv_containment.py +0 -0
  408. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/codegen.py +0 -0
  409. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-test-runner.sh +0 -0
  410. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  411. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  412. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  413. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  414. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/coord-venv-rollback.sh +0 -0
  415. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/drive-batch.sh +0 -0
  416. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/extract-coord-tui.sh +0 -0
  417. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/fleet_watchdog.py +0 -0
  418. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/gen_mock_index.py +0 -0
  420. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/lib/provision-core.sh +0 -0
  421. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/next_release_tag.py +0 -0
  422. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/provision-machine.sh +0 -0
  423. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/run_tests_in_populated_home.sh +0 -0
  424. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/run_tests_without_gh.sh +0 -0
  425. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/setup-macmini.sh +0 -0
  426. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/smoke_437_interactive.py +0 -0
  427. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/verify-provision-noble.sh +0 -0
  428. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/verify_878_review_capture.py +0 -0
  429. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/verify_release_published.py +0 -0
  430. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/scripts/verify_release_wheel.py +0 -0
  431. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/setup.cfg +0 -0
  432. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/SMOKE_SET.md +0 -0
  433. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/__init__.py +0 -0
  434. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-37/conftest.py +0 -0
  435. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-37/contract.md +0 -0
  436. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-37/manifest.yml +0 -0
  437. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  438. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  439. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/contract.md +0 -0
  440. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  441. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  442. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/manifest.yml +0 -0
  443. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-51/tsconfig.json +0 -0
  445. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  446. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/backends.py +0 -0
  447. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/conftest.py +0 -0
  448. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/board-pipeline-basic.json +0 -0
  449. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  450. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  451. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  452. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  453. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/all_pass.json +0 -0
  454. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  455. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/mixed_fail.json +0 -0
  456. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  457. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  458. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/skip.json +0 -0
  459. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/playwright/truncated.json +0 -0
  460. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  461. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  462. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  463. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  464. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  465. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  466. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  467. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  468. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_acceptance.py +0 -0
  470. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_acceptance_drivers.py +0 -0
  471. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent.py +0 -0
  472. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_api_error.py +0 -0
  473. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_app.py +0 -0
  474. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_branch_base.py +0 -0
  475. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_branch_capture.py +0 -0
  476. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_config_free_1712.py +0 -0
  477. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_deploy_units_endpoint.py +0 -0
  478. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_dirty_worktree.py +0 -0
  479. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  480. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_graph_self_heal.py +0 -0
  481. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_health_h3.py +0 -0
  482. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_idle_restart.py +0 -0
  483. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_push_failure.py +0 -0
  484. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_reap.py +0 -0
  485. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_repos_and_pull.py +0 -0
  486. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_restart_services_endpoint.py +0 -0
  487. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_skills_self_heal.py +0 -0
  488. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_startup_diagnostics.py +0 -0
  489. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_update.py +0 -0
  490. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_update_bluegreen.py +0 -0
  491. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_usage_limit.py +0 -0
  492. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_agent_zero_commit.py +0 -0
  493. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ambient_home_isolation.py +0 -0
  494. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approve_capability_reroute_3241.py +0 -0
  495. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approve_dependency_busy_2804.py +0 -0
  496. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approve_reject_plan.py +0 -0
  497. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approve_usage_gate.py +0 -0
  498. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approved_work_2532.py +0 -0
  499. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_approved_work_2996.py +0 -0
  500. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_assignment_already_recorded_daemon.py +0 -0
  501. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_audit_log.py +0 -0
  502. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_audit_outcome.py +0 -0
  503. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_audit_query.py +0 -0
  504. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_auto_loop.py +0 -0
  505. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_auto_release_publish_2035.py +0 -0
  506. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_backend_selection.py +0 -0
  507. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_backup.py +0 -0
  508. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_base_checkout_restore.py +0 -0
  509. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_block_log.py +0 -0
  510. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_cap_762.py +0 -0
  511. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_fixture.py +0 -0
  512. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_read_path.py +0 -0
  513. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_schema.py +0 -0
  514. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_service.py +0 -0
  515. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_state.py +0 -0
  516. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_board_wire.py +0 -0
  517. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_brain.py +0 -0
  518. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_branch_model.py +0 -0
  519. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_bug_intake.py +0 -0
  520. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_build_worker_image_env_update.py +0 -0
  521. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cargo_cache.py +0 -0
  522. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_check_gh_argv_containment.py +0 -0
  523. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_acceptance_gate_1950.py +0 -0
  524. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_fix.py +0 -0
  525. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_github.py +0 -0
  526. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_gitlab.py +0 -0
  527. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_parity_2091.py +0 -0
  528. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_ci_store.py +0 -0
  529. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_claim.py +0 -0
  530. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_claude_md_budget.py +0 -0
  531. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_claude_setup_token.py +0 -0
  532. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_acceptance.py +0 -0
  533. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_assign.py +0 -0
  534. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  535. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_assign_interactive_remote.py +0 -0
  536. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_assign_provider.py +0 -0
  537. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  538. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_audit.py +0 -0
  539. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_chat_continue.py +0 -0
  540. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_ci.py +0 -0
  541. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_codegen.py +0 -0
  542. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_decide.py +0 -0
  543. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_capability_rules.py +0 -0
  544. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_config_provenance.py +0 -0
  545. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_forge_availability.py +0 -0
  546. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_graph.py +0 -0
  547. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_self.py +0 -0
  548. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_diagnose_test_coverage.py +0 -0
  549. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_doctor.py +0 -0
  550. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_doctor_config_free_1801.py +0 -0
  551. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  552. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  553. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_drive.py +0 -0
  554. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_drive_queue.py +0 -0
  555. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_escalate.py +0 -0
  556. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_fix_headless_review.py +0 -0
  557. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_gate_a.py +0 -0
  558. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_install_drift.py +0 -0
  559. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_install_skills.py +0 -0
  560. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_issue_comment.py +0 -0
  561. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_issue_create_label.py +0 -0
  562. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_issue_reopen.py +0 -0
  563. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_issue_view_list.py +0 -0
  564. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_issues.py +0 -0
  565. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_merge.py +0 -0
  566. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_assign.py +0 -0
  567. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_capture.py +0 -0
  568. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_chat_add_child.py +0 -0
  569. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_dispatch.py +0 -0
  570. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_gate_b.py +0 -0
  571. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_gate_c.py +0 -0
  572. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_order.py +0 -0
  573. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  574. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_milestone_ship.py +0 -0
  575. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_network.py +0 -0
  576. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_new_issue_chat.py +0 -0
  577. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_plans.py +0 -0
  578. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_portal.py +0 -0
  579. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_pr.py +0 -0
  580. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_pull_artifact.py +0 -0
  581. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_queue.py +0 -0
  582. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_reattach_sessions.py +0 -0
  583. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_refine_board.py +0 -0
  584. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_release_preflight.py +0 -0
  585. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_release_propagate.py +0 -0
  586. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_release_window.py +0 -0
  587. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_repo_2220.py +0 -0
  588. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  589. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_scorecard.py +0 -0
  590. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_serve_store_backend_3084.py +0 -0
  591. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_set_review_findings.py +0 -0
  592. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_advisory_terminal.py +0 -0
  593. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_contested_tag.py +0 -0
  594. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_invariant_alarms.py +0 -0
  595. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_machine_fault.py +0 -0
  596. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_merge_queue.py +0 -0
  597. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_provider.py +0 -0
  598. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_retried_3340.py +0 -0
  599. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_review_finalizing.py +0 -0
  600. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_supervisor_3366.py +0 -0
  601. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_test_failed_tag.py +0 -0
  602. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_status_usage_limit.py +0 -0
  603. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_sync_comments_873.py +0 -0
  604. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_test_plan.py +0 -0
  605. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_track.py +0 -0
  606. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_tui_update.py +0 -0
  607. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cli_wait.py +0 -0
  608. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_client.py +0 -0
  609. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_client_base_install.py +0 -0
  610. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_client_config_cache_atomic_3052.py +0 -0
  611. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_client_resource_migration_1946.py +0 -0
  612. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_commands_common.py +0 -0
  613. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_comments.py +0 -0
  614. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_completion_summary.py +0 -0
  615. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config.py +0 -0
  616. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_acceptance.py +0 -0
  617. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_audit.py +0 -0
  618. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_drift_check.py +0 -0
  619. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_effective.py +0 -0
  620. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_pricing.py +0 -0
  621. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  622. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_config_usage_gate.py +0 -0
  623. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_confirm_test.py +0 -0
  624. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_conflict_fix.py +0 -0
  625. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_conflict_fix_semantic.py +0 -0
  626. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  627. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test.py +0 -0
  628. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  629. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test_runner_baseline.py +0 -0
  630. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test_runner_populated_home.py +0 -0
  631. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test_runner_routing.py +0 -0
  632. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_test_runner_toolchain.py +0 -0
  633. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_uat.py +0 -0
  634. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coord_web_sse_restart_live.py +0 -0
  635. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_coordinator_machine.py +0 -0
  636. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_cross_platform_imports.py +0 -0
  637. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dao.py +0 -0
  638. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard.py +0 -0
  639. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_api.py +0 -0
  640. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_fixture.py +0 -0
  641. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_reports.py +0 -0
  642. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_server.py +0 -0
  643. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_terminal.py +0 -0
  644. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dashboard_terminal_live.py +0 -0
  645. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_db.py +0 -0
  646. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dead_end.py +0 -0
  647. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_decomposition_chat.py +0 -0
  648. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_coord_db_backup.py +0 -0
  649. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_coord_web_dist.py +0 -0
  650. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_coord_web_rollback.py +0 -0
  651. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_db_backup_unit.py +0 -0
  652. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_drive_queue_unit.py +0 -0
  653. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_failure_notify_unit.py +0 -0
  654. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_manifest.py +0 -0
  655. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_notify_unit.py +0 -0
  656. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_units_lane.py +0 -0
  657. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deploy_web_unit.py +0 -0
  658. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deprecation_telemetry.py +0 -0
  659. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_deps.py +0 -0
  660. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_diagnose.py +0 -0
  661. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dirlink.py +0 -0
  662. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dispatch.py +0 -0
  663. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dispatch_liveness.py +0 -0
  664. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dispatch_target_validation.py +0 -0
  665. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dispatch_workers.py +0 -0
  666. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dist_name.py +0 -0
  667. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_done_housekeeping.py +0 -0
  668. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dr_azure_scripts.py +0 -0
  669. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dr_promote.py +0 -0
  670. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_dr_verify.py +0 -0
  671. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive.py +0 -0
  672. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_machine_fault.py +0 -0
  673. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue.py +0 -0
  674. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_blocked_rendering.py +0 -0
  675. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_launch_argv.py +0 -0
  676. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_max_parallel_config.py +0 -0
  677. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  678. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_roll_pending.py +0 -0
  679. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  680. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_sessions_snapshot.py +0 -0
  681. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_state.py +0 -0
  682. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_drive_tmux.py +0 -0
  683. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_epic_up_capability_detection.py +0 -0
  684. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  685. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_epic_up_image_provenance.py +0 -0
  686. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_errors.py +0 -0
  687. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_events.py +0 -0
  688. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_failure_class.py +0 -0
  689. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_failure_classifier.py +0 -0
  690. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_filelock.py +0 -0
  691. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  692. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fix_escalation_classifier.py +0 -0
  693. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fix_of_force_override.py +0 -0
  694. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fleet_config_health.py +0 -0
  695. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fleet_health_probes.py +0 -0
  696. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fleet_health_snapshot.py +0 -0
  697. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_fleet_watchdog.py +0 -0
  698. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_forge_availability.py +0 -0
  699. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_freshness.py +0 -0
  700. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gate_a.py +0 -0
  701. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gate_b.py +0 -0
  702. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gate_snapshot_staleness.py +0 -0
  703. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gates.py +0 -0
  704. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  705. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gen_mock_index.py +0 -0
  706. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_generated_rust_fixture.py +0 -0
  707. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_generated_rust_requests.py +0 -0
  708. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_generated_types_fixture.py +0 -0
  709. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_github_ops.py +0 -0
  710. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_github_throttle.py +0 -0
  711. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_goal.py +0 -0
  712. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_graph_health.py +0 -0
  713. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_graph_selfheal_absent_2237.py +0 -0
  714. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_gtk_native_driver.py +0 -0
  715. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_handoff.py +0 -0
  716. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_checks.py +0 -0
  717. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_cli.py +0 -0
  718. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_cli_graph.py +0 -0
  719. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_config.py +0 -0
  720. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_context.py +0 -0
  721. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_coord_tui_ci_pin.py +0 -0
  722. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_coord_web_ci_pin.py +0 -0
  723. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_deploy_lane_facts.py +0 -0
  724. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_fix.py +0 -0
  725. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_incident_regression.py +0 -0
  726. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_issues_sync_staleness.py +0 -0
  727. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_pr_churn.py +0 -0
  728. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_pypi.py +0 -0
  729. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_registry.py +0 -0
  730. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_release_cordon_probe.py +0 -0
  731. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_timer_active.py +0 -0
  732. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_toolchain.py +0 -0
  733. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_unit_drift.py +0 -0
  734. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_unit_enablement.py +0 -0
  735. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_health_wedged_drive_queue.py +0 -0
  736. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_hooks.py +0 -0
  737. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_housekeeping.py +0 -0
  738. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_human_attended_437.py +0 -0
  739. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_init.py +0 -0
  740. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_install_agent_capabilities_3515.py +0 -0
  741. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_install_agent_venv_2911.py +0 -0
  742. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  743. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_integration.py +0 -0
  744. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive.py +0 -0
  745. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_briefing_echo.py +0 -0
  746. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_pane_log_2541.py +0 -0
  747. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_prefill_state.py +0 -0
  748. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_session_relaunch.py +0 -0
  749. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_test_verdict_backstop.py +0 -0
  750. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_token_attribution.py +0 -0
  751. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_interactive_worktree.py +0 -0
  752. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_invariant_alarms.py +0 -0
  753. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_issue_store_seam.py +0 -0
  754. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_issues_sync_status.py +0 -0
  755. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_liveness_auditor.py +0 -0
  756. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_liveness_notify.py +0 -0
  757. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_lock_contention_ratchet.py +0 -0
  758. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_machine_fault.py +0 -0
  759. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_machine_metrics.py +0 -0
  760. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_machine_onboard.py +0 -0
  761. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_machine_pause.py +0 -0
  762. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_machine_stats.py +0 -0
  763. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_merge_queue.py +0 -0
  764. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_merge_verification.py +0 -0
  765. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_merge_verify.py +0 -0
  766. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_milestone_chat.py +0 -0
  767. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_milestone_dispatch.py +0 -0
  768. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_milestone_gate.py +0 -0
  769. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_milestone_order.py +0 -0
  770. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_milestone_seam.py +0 -0
  771. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_mock_author.py +0 -0
  772. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_model_tiering.py +0 -0
  773. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_models.py +0 -0
  774. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_models_config_labels.py +0 -0
  775. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_models_pinned_1650.py +0 -0
  776. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_needs_attention.py +0 -0
  777. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_network.py +0 -0
  778. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_new_issue_chat.py +0 -0
  779. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_next_release_tag.py +0 -0
  780. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_node_shim.py +0 -0
  781. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_baseline.py +0 -0
  782. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_cli.py +0 -0
  783. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_collect.py +0 -0
  784. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_config.py +0 -0
  785. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_drive_seam.py +0 -0
  786. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_isolation.py +0 -0
  787. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_predicate.py +0 -0
  788. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_quiet_hours.py +0 -0
  789. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notifier_service.py +0 -0
  790. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notify.py +0 -0
  791. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_notify_drain.py +0 -0
  792. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_openapi.py +0 -0
  793. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_operational_defaults.py +0 -0
  794. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_overlap_fence.py +0 -0
  795. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_overlap_predict.py +0 -0
  796. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_packaged_deploy_units.py +0 -0
  797. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_parentage.py +0 -0
  798. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_paste_landed.py +0 -0
  799. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  800. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_pipeline.py +0 -0
  801. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_plan_followup_approve_plan_command.py +0 -0
  802. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_plan_followup_pr_command.py +0 -0
  803. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_plan_followup_review_command.py +0 -0
  804. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_plan_only.py +0 -0
  805. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_plan_parser.py +0 -0
  806. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_platform_paths.py +0 -0
  807. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_portal_bridge.py +0 -0
  808. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_portal_config.py +0 -0
  809. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_portal_store.py +0 -0
  810. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_portal_sync.py +0 -0
  811. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_pr_body_lint.py +0 -0
  812. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_production_db_guard.py +0 -0
  813. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_progress.py +0 -0
  814. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_provider_seam.py +0 -0
  815. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_providers.py +0 -0
  816. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_providers_config_labels.py +0 -0
  817. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_providers_pty.py +0 -0
  818. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_provision_core.py +0 -0
  819. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_provision_machine.py +0 -0
  820. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_py_rust_mirror_inventory.py +0 -0
  821. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_quiet_hours.py +0 -0
  822. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_quiet_hours_store_2146.py +0 -0
  823. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reap_merged_sessions.py +0 -0
  824. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reap_stale_interactive_tick.py +0 -0
  825. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile.py +0 -0
  826. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_branch.py +0 -0
  827. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_completions.py +0 -0
  828. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  829. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_merges.py +0 -0
  830. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_no_agent_record.py +0 -0
  831. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_tick.py +0 -0
  832. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reconcile_usage_limit_done.py +0 -0
  833. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_refine_chat.py +0 -0
  834. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_cordon_2101.py +0 -0
  835. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  836. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_cordon_deadlock_2240.py +0 -0
  837. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  838. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_cordon_stuck_2490.py +0 -0
  839. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_gate.py +0 -0
  840. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_propagate.py +0 -0
  841. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_propagate_threshold.py +0 -0
  842. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_roll_between_legs_2854.py +0 -0
  843. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_roll_window_handoff.py +0 -0
  844. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_unified_1242.py +0 -0
  845. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_verify.py +0 -0
  846. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_release_window.py +0 -0
  847. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_remote_auto_prune.py +0 -0
  848. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_remote_interactive_reaper.py +0 -0
  849. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_add.py +0 -0
  850. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_dormancy.py +0 -0
  851. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_edit_2220.py +0 -0
  852. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_graph_fleet_2237.py +0 -0
  853. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_max_parallel_3423.py +0 -0
  854. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_repo_onboard_2220.py +0 -0
  855. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_report_public_export.py +0 -0
  856. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_report_result_push.py +0 -0
  857. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_reports.py +0 -0
  858. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_restart_cmd.py +0 -0
  859. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_retry.py +0 -0
  860. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_retry_advisory_1606.py +0 -0
  861. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_retry_escalation_classify_3360.py +0 -0
  862. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_retry_type_1636.py +0 -0
  863. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_revalidate.py +0 -0
  864. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review.py +0 -0
  865. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_end_review_without_verdict.py +0 -0
  866. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_parse_failure_diagnostic.py +0 -0
  867. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_reaffirm.py +0 -0
  868. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_state.py +0 -0
  869. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_verdict_backstop.py +0 -0
  870. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_verdict_override_audit.py +0 -0
  871. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_verdict_relay.py +0 -0
  872. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_review_zero_commits.py +0 -0
  873. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_scoped_review_wiring.py +0 -0
  874. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_scorecard.py +0 -0
  875. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_self_health.py +0 -0
  876. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_serve.py +0 -0
  877. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_serve_app.py +0 -0
  878. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_serve_app_board_trim.py +0 -0
  879. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_serve_rest_routes.py +0 -0
  880. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_session.py +0 -0
  881. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_slice_issue_attribution.py +0 -0
  882. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_smoke.py +0 -0
  883. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  884. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_smoke_live_checkout_restore.py +0 -0
  885. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_smoke_workflow.py +0 -0
  886. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_spend_ceiling.py +0 -0
  887. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_spend_ceiling_coordinator.py +0 -0
  888. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_split.py +0 -0
  889. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_split_work.py +0 -0
  890. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_sql_dialect.py +0 -0
  891. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_sqlite_connect_ratchet.py +0 -0
  892. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stage_projection.py +0 -0
  893. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stale_busy_reviewer_697.py +0 -0
  894. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stalled_pipeline.py +0 -0
  895. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_state.py +0 -0
  896. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_state_review_findings_daemon.py +0 -0
  897. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_status_fleet_footer.py +0 -0
  898. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stop_1567.py +0 -0
  899. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_store_contract.py +0 -0
  900. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_store_migrate.py +0 -0
  901. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stuck.py +0 -0
  902. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  903. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_terminal_command.py +0 -0
  904. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_author.py +0 -0
  905. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_chat.py +0 -0
  906. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_orchestrator.py +0 -0
  907. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_report.py +0 -0
  908. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_verdict_parsing.py +0 -0
  909. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_test_verdict_transcript_floor.py +0 -0
  910. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_text_io_encoding_audit.py +0 -0
  911. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_thin_client_board_audit.py +0 -0
  912. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_thin_client_config_load_1080.py +0 -0
  913. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_thin_client_daemon_routing_906.py +0 -0
  914. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_throwaway_vm.py +0 -0
  915. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_tmux_host.py +0 -0
  916. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_tmux_session.py +0 -0
  917. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_transcript_floor.py +0 -0
  918. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_tui_pty_driver.py +0 -0
  919. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_uat_checks.py +0 -0
  920. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_usage.py +0 -0
  921. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_usage_limits.py +0 -0
  922. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_usage_rollup.py +0 -0
  923. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_venv_live_install_2121.py +0 -0
  924. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_version_single_source.py +0 -0
  925. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_watch.py +0 -0
  926. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_win_native_bridge.py +0 -0
  927. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_win_native_driver.py +0 -0
  928. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  929. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worker_env_venv_isolation.py +0 -0
  930. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worker_events.py +0 -0
  931. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worker_image_pin_sync.py +0 -0
  932. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worker_safety.py +0 -0
  933. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worker_test_scoping.py +0 -0
  934. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worktree.py +0 -0
  935. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  936. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/test_write_parity.py +0 -0
  937. {code_coordinator-0.5.587 → code_coordinator-0.5.589}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.587
3
+ Version: 0.5.589
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.587
3
+ Version: 0.5.589
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
@@ -517,6 +517,7 @@ tests/test_cli_drive_queue.py
517
517
  tests/test_cli_escalate.py
518
518
  tests/test_cli_fix_headless_review.py
519
519
  tests/test_cli_gate_a.py
520
+ tests/test_cli_inject_board_less.py
520
521
  tests/test_cli_install_drift.py
521
522
  tests/test_cli_install_skills.py
522
523
  tests/test_cli_issue_comment.py
@@ -544,6 +544,7 @@
544
544
  "tests/test_cli_escalate.py",
545
545
  "tests/test_cli_fix_headless_review.py",
546
546
  "tests/test_cli_gate_a.py",
547
+ "tests/test_cli_inject_board_less.py",
547
548
  "tests/test_cli_install_drift.py",
548
549
  "tests/test_cli_install_skills.py",
549
550
  "tests/test_cli_issue_comment.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.587",
2
+ "tag": "0.5.589",
3
3
  "distance": 0,
4
- "node": "g81a6f30503a2fdb64cbd57beb67d5d4bc78612ee",
4
+ "node": "gc52e2e56b54057dea9163515ac96450778a0532e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-03"
@@ -54,11 +54,25 @@ lane for the round (:attr:`RoundReport.unavailable_lanes`) rather than
54
54
  running the exploration checklist against it or filing any finding from it
55
55
  — a locked desktop is an environment condition for the operator to fix,
56
56
  not evidence of an app bug. This engine-level behavior is unit-tested
57
- against a fake explorer in ``tests/test_bugbash.py``; the production
58
- explorer (:func:`coord.commands.bugbash._dispatch_and_await_lane`) does
59
- not itself set ``unavailable`` yet — see its own module docstring's
60
- "KNOWN GAP" note — so a live ``coord bugbash`` run does not currently
61
- benefit from this skip until that wiring lands.
57
+ against a fake explorer in ``tests/test_bugbash.py``; as of #3566 the
58
+ production explorer (:func:`coord.commands.bugbash._dispatch_and_await_lane`)
59
+ also sets ``unavailable`` — it detects a lane worker's own "unavailable"
60
+ report (:func:`parse_unavailable_report`) and the real ``mac-native`` driver
61
+ now emits a genuine ``status="unavailable"`` verdict for a denied
62
+ Accessibility-trust grant (see :mod:`coord.mac_native_driver`'s own module
63
+ docstring), so this is reachable in production, not just in a test fixture.
64
+ A real two-lane live dry run against the fleet is still outstanding — see
65
+ ``coord.commands.bugbash``'s own "KNOWN GAP" note.
66
+
67
+ **#3566: lane routing cross-references live ``/health`` probes, not just the
68
+ static ``coordinator.yml`` claim.** :func:`_pick_lane_machine` mirrors
69
+ :mod:`coord.smoke`'s ``dispatch_smoke`` cross-check
70
+ (:func:`coord.smoke._capability_probe_reasons`): a machine whose declared
71
+ capability is contradicted by its own live probe (e.g. ``macos`` declared
72
+ but Accessibility trust denied, or Screen Recording denied) is skipped
73
+ rather than picked, so ``coord bugbash`` refuses to route to it the same way
74
+ ``dispatch_smoke`` already does — not just in `/health`'s own JSON, but in
75
+ the machine selection that actually dispatches a worker.
62
76
  """
63
77
 
64
78
  from __future__ import annotations
@@ -339,6 +353,76 @@ def parse_findings_block(text: str, *, platform: str, repo: str) -> FindingsPars
339
353
  return FindingsParseResult(findings=findings)
340
354
 
341
355
 
356
+ #: #3566 ask #4/#5: the briefing's hard-rule reporting contract for a lane
357
+ #: worker that hits a missing permission (Accessibility/Screen Recording
358
+ #: trust, a locked/absent GUI session, ...) instead of improvising a
359
+ #: workaround. Mirrors :data:`FINDINGS_FENCE`'s "one constant, used by both
360
+ #: the briefing and the parser" discipline so the two can never drift apart.
361
+ UNAVAILABLE_FENCE = "bugbash-unavailable"
362
+
363
+ _UNAVAILABLE_FENCE_RE = re.compile(
364
+ rf"```{re.escape(UNAVAILABLE_FENCE)}\s*\n(.*?)```", re.DOTALL,
365
+ )
366
+
367
+ #: Fallback signatures (#3566 ask #5, "a driver session/permission
368
+ #: failure") — a worker that forgot to fence its unavailable report, or
369
+ #: whose own driver call surfaced the condition directly in a tool result,
370
+ #: still has one of these strings somewhere in its raw transcript. Matched
371
+ #: against the FULL log text (not just the final assistant message), so a
372
+ #: worker that reported the condition mid-session and then crashed is still
373
+ #: caught. Kept narrow and literal: `"no unlocked GUI session is available"`/
374
+ #: `"the screen is locked"`/`"is not on the console"`/
375
+ #: `"AXIsProcessTrusted() is False"` are the exact strings
376
+ #: `coord.mac_native_driver`'s own `session_available`/`ax_trust_available`
377
+ #: precheck now actually emits in production (#3566) — reachable, not just
378
+ #: hand-written in a test. `"AXIsProcessTrusted() returned False"` and
379
+ #: `"CGPreflightScreenCaptureAccess"` are defensive-only: no in-tree driver
380
+ #: emits that exact phrasing today, but `coord.prereqs`'s own `/health` probe
381
+ #: text and a future Screen-Recording driver precheck are plausible sources,
382
+ #: and keeping the signature narrow and literal costs nothing. None of these
383
+ #: are a vague substring that could false-positive on an unrelated mention of
384
+ #: "unavailable" in a finding's prose.
385
+ _UNAVAILABLE_SIGNATURES: tuple[str, ...] = (
386
+ '"status": "unavailable"',
387
+ '"status":"unavailable"',
388
+ "no unlocked GUI session is available",
389
+ "the screen is locked",
390
+ "is not on the console",
391
+ "AXIsProcessTrusted() is False",
392
+ "AXIsProcessTrusted() returned False",
393
+ "CGPreflightScreenCaptureAccess",
394
+ )
395
+
396
+
397
+ def parse_unavailable_report(text: str) -> str:
398
+ """The lane-unavailable reason from *text* (a lane worker's full
399
+ transcript), or ``""`` if none is present (#3566).
400
+
401
+ First checks for the authoritative fenced
402
+ ```` ```bugbash-unavailable ```` block the briefing instructs a worker
403
+ to write when it hits a missing permission or absent session rather
404
+ than improvising a workaround (ask #4's hard rule). Falls back to
405
+ :data:`_UNAVAILABLE_SIGNATURES` — a driver-level session/permission
406
+ failure surfacing directly in a tool result even without the worker's
407
+ own cooperation.
408
+
409
+ Never raises. The caller
410
+ (:func:`coord.commands.bugbash._dispatch_and_await_lane`) treats a
411
+ non-empty return as :attr:`ExploreOutcome.unavailable`, never
412
+ ``ok=False``/a protocol error — #2096's "one question, one answer":
413
+ this is the ONE place that question is answered.
414
+ """
415
+ match = _UNAVAILABLE_FENCE_RE.search(text)
416
+ if match:
417
+ reason = match.group(1).strip()
418
+ if reason:
419
+ return reason
420
+ for signature in _UNAVAILABLE_SIGNATURES:
421
+ if signature in text:
422
+ return f"driver/session signal found in transcript: {signature!r}"
423
+ return ""
424
+
425
+
342
426
  # ── dedupe ───────────────────────────────────────────────────────────────
343
427
 
344
428
 
@@ -527,7 +611,9 @@ class BugbashLane:
527
611
  reference: bool = False
528
612
 
529
613
 
530
- def discover_lanes(config: Any, repo_name: str, *, reference_backend: str = "") -> list[BugbashLane]:
614
+ def discover_lanes(
615
+ config: Any, repo_name: str, *, reference_backend: str = "", http_client: Any = None,
616
+ ) -> list[BugbashLane]:
531
617
  """Derive *repo_name*'s bugbash lanes from its acceptance drivers,
532
618
  routed to a capable machine the same way
533
619
  :mod:`coord.smoke`'s ``capability_rules`` routes smoke legs.
@@ -535,11 +621,15 @@ def discover_lanes(config: Any, repo_name: str, *, reference_backend: str = "")
535
621
  Walks the repo's top-level driver plus every ``routes:`` entry (mirrors
536
622
  :meth:`coord.config.AcceptanceConfig.entrypoints`'s walk), keeps only
537
623
  :data:`LANE_DRIVER_KINDS` entries, and drops any that has no configured
538
- machine listing both *repo_name* and the driver's ``capability`` — a
539
- lane with no capable machine is omitted rather than returned with
540
- ``machine=""``, so a caller never has to separately check "is this lane
541
- actually runnable." *reference_backend*, when it names one of the
542
- surviving lanes' ``platform``, marks that lane's ``reference=True``.
624
+ machine listing both *repo_name* and the driver's ``capability`` AND
625
+ whose live ``/health`` probe doesn't contradict that claim (#3566, see
626
+ :func:`_pick_lane_machine`) — a lane with no capable machine is omitted
627
+ rather than returned with ``machine=""``, so a caller never has to
628
+ separately check "is this lane actually runnable." *reference_backend*,
629
+ when it names one of the surviving lanes' ``platform``, marks that
630
+ lane's ``reference=True``. *http_client*, when given, is forwarded to
631
+ the ``/health`` cross-check (tests inject a fake; production leaves it
632
+ ``None`` and gets a real ``httpx`` call).
543
633
  """
544
634
  entry = config.acceptance.drivers.get(repo_name)
545
635
  if entry is None:
@@ -550,7 +640,7 @@ def discover_lanes(config: Any, repo_name: str, *, reference_backend: str = "")
550
640
  for cfg in candidates:
551
641
  if cfg.kind not in LANE_DRIVER_KINDS:
552
642
  continue
553
- machine = _pick_lane_machine(config, repo_name, cfg.capability)
643
+ machine = _pick_lane_machine(config, repo_name, cfg.capability, http_client=http_client)
554
644
  if machine is None:
555
645
  continue
556
646
  lanes.append(
@@ -565,10 +655,42 @@ def discover_lanes(config: Any, repo_name: str, *, reference_backend: str = "")
565
655
  return lanes
566
656
 
567
657
 
568
- def _pick_lane_machine(config: Any, repo_name: str, capability: str) -> str | None:
658
+ def _pick_lane_machine(
659
+ config: Any, repo_name: str, capability: str, *, http_client: Any = None,
660
+ ) -> str | None:
661
+ """The first configured machine that both claims *capability* in
662
+ ``coordinator.yml`` AND repo-membership for *repo_name* — cross-checked
663
+ against that machine's own live ``/health`` tool probes (#3566) before
664
+ it's picked, not just the static claim.
665
+
666
+ Before this fix, this function (and therefore every ``coord bugbash``
667
+ dispatch) only ever asked ``capability in m.capabilities`` — a
668
+ hand-written ``coordinator.yml`` claim nothing verified — while
669
+ :mod:`coord.smoke`'s own ``dispatch_smoke`` already cross-referenced
670
+ ``/health``'s ``tool_versions`` (:func:`coord.smoke
671
+ ._capability_probe_reasons`) before routing smoke work. A ``macos``
672
+ machine whose Accessibility/Screen-Recording trust (:mod:`coord.prereqs`'s
673
+ ``macos-accessibility-trust``/``macos-screen-recording`` probes) was
674
+ revoked therefore still looked dispatchable to bugbash even though
675
+ ``/health`` itself would have said otherwise — the exact gap the first
676
+ live ``mac-native`` attempt hit. Reusing
677
+ :func:`coord.smoke._capability_probe_reasons` here (rather than a second,
678
+ independently-drifting copy of the same dict) means ``coord bugbash``
679
+ now refuses to route to a machine with a known-unmet required-capability
680
+ prereq the same way ``dispatch_smoke`` already does, falling through to
681
+ the next capable-on-paper machine (or returning ``None`` if none remain)
682
+ instead of dispatching a worker that can never actually run the lane.
683
+ """
684
+ from coord.smoke import _capability_probe_reasons # noqa: PLC0415 — avoid an import cycle
685
+
569
686
  for m in config.machines:
570
- if repo_name in m.repos and (not capability or capability in m.capabilities):
571
- return m.name
687
+ if repo_name not in m.repos:
688
+ continue
689
+ if capability and capability not in m.capabilities:
690
+ continue
691
+ if capability and _capability_probe_reasons(m, [capability], http_client=http_client):
692
+ continue # declared but the machine's own /health probe denies it
693
+ return m.name
572
694
  return None
573
695
 
574
696
 
@@ -592,6 +714,16 @@ def build_exploration_briefing(
592
714
  "",
593
715
  f"Reference backend for comparison: {reference_backend or '(none configured)'}",
594
716
  "",
717
+ "HARD RULE — drive the app ONLY through this lane's own driver "
718
+ "(coord.mac_native_driver / coord.win_native_driver / "
719
+ "coord.gtk_native_driver, whichever this lane is). Never use "
720
+ "osascript, System Events, a Terminal/iTerm `do script`, a "
721
+ "home-made input-injection helper, or System Settings. If a "
722
+ "required permission (Accessibility, Screen Recording, a locked/"
723
+ "absent GUI session, ...) is missing, STOP IMMEDIATELY and report "
724
+ "the lane unavailable (see below) — do NOT improvise a workaround, "
725
+ "and do NOT send any key or click to recover (#3566).",
726
+ "",
595
727
  "1. Run this repo's Tier-2 smoke spec for this driver to completion.",
596
728
  "2. Then walk the exploration checklist below on the real app, using "
597
729
  "the native driver's own probes/captures as evidence:",
@@ -603,7 +735,13 @@ def build_exploration_briefing(
603
735
  "For anything that behaves differently from the reference backend, "
604
736
  "or crashes, hangs, or renders wrong, report it as a finding.",
605
737
  "",
606
- "When done, end your final message with a fenced "
738
+ "If the HARD RULE above fires (a required permission/session is "
739
+ "missing), skip the findings fence entirely and end your final "
740
+ "message with a fenced "
741
+ f"```{UNAVAILABLE_FENCE}``` block containing one line: the reason "
742
+ "the lane is unavailable.",
743
+ "",
744
+ "Otherwise, when done, end your final message with a fenced "
607
745
  f"```{FINDINGS_FENCE}``` block containing a JSON array of finding "
608
746
  "objects, each with: title, expected, actual, repro, evidence, "
609
747
  "suspected_repo (the repo the FIX belongs in — the app, its UI "
@@ -657,9 +795,10 @@ class ExploreOutcome:
657
795
  :attr:`RoundReport.lane_failures` — and never file findings from it
658
796
  this round, even defensively, regardless of what ``findings`` carries.
659
797
  The production explorer,
660
- :func:`coord.commands.bugbash._dispatch_and_await_lane`, does not yet
661
- set this flag (tracked as a KNOWN GAP in that module's docstring) —
662
- today this is exercised only at the engine/unit-test level.
798
+ :func:`coord.commands.bugbash._dispatch_and_await_lane`, sets this flag
799
+ too (#3566): it detects a worker's own "lane unavailable" report (or a
800
+ driver session/permission failure surfacing directly in the transcript)
801
+ via :func:`parse_unavailable_report`.
663
802
 
664
803
  ``protocol_error`` is a FOURTH, separate outcome (#3517): the lane
665
804
  worker DID run to completion (``ok=True``, unlike a dispatch/poll/log
@@ -23,6 +23,20 @@ to the generic catch-all worker (full Read/Edit/Write/Bash/Monitor,
23
23
  ``WORKER_SYSTEM_PROMPT``) — a tracked follow-up, since that module is
24
24
  outside this issue's file scope (see the PR description).
25
25
 
26
+ #3566 closed the gap this module used to carry here: the first live
27
+ ``mac-native`` bugbash attempt found ``AXIsProcessTrusted() == False`` and
28
+ improvised an unsafe workaround instead of stopping, and the two later
29
+ attempts that DID stop correctly still reported ``terminated='zero_findings'``
30
+ — a lane that never ran read identically to a clean pass.
31
+ :func:`coord.bugbash.build_exploration_briefing` now carries a hard rule
32
+ ("drive the app only through this lane's own driver... if a permission is
33
+ missing, stop and report unavailable") plus the exact reporting contract,
34
+ and :func:`_dispatch_and_await_lane` below detects it
35
+ (:func:`coord.bugbash.parse_unavailable_report`) and sets
36
+ :attr:`coord.bugbash.ExploreOutcome.unavailable` — so
37
+ :func:`coord.bugbash.run_bugbash` reports ``lanes_unavailable``, not
38
+ ``zero_findings``, for a lane that never actually ran.
39
+
26
40
  KNOWN GAP (#3487 acceptance, "one real dry run against vimcode on at least
27
41
  two lanes"): this module was written and unit-tested from THIS worktree,
28
42
  which has no reachable Tailscale fleet and — deliberately — no business
@@ -52,6 +66,7 @@ from coord.bugbash import (
52
66
  discover_lanes,
53
67
  finding_target_repo,
54
68
  parse_findings_block,
69
+ parse_unavailable_report,
55
70
  run_bugbash,
56
71
  subprocess_coord_runner,
57
72
  )
@@ -190,6 +205,22 @@ def _dispatch_and_await_lane(
190
205
  if text.strip():
191
206
  last_assistant_text = text
192
207
 
208
+ # #3566 ask #5: a worker's own "lane unavailable" report (the
209
+ # briefing's hard rule — a missing permission/session, never an
210
+ # improvised workaround) OR a driver session/permission failure
211
+ # surfacing directly in the transcript is a THIRD outcome, distinct
212
+ # from both a clean pass and a protocol error — checked against the
213
+ # FULL raw log text (not just the last assistant message) so it's
214
+ # caught even if the worker reported it mid-session before crashing.
215
+ # Must be checked BEFORE `parse_findings_block`: an unavailable report
216
+ # deliberately carries no findings fence (the briefing tells the
217
+ # worker to skip it), which would otherwise read as a protocol error.
218
+ unavailable_reason = parse_unavailable_report(log_resp.text)
219
+ if unavailable_reason:
220
+ return ExploreOutcome(
221
+ unavailable=True, cost=summary.total_cost_usd, notes=unavailable_reason,
222
+ )
223
+
193
224
  parsed = parse_findings_block(last_assistant_text, platform=lane.platform, repo=repo_name)
194
225
  if parsed.protocol_error:
195
226
  # #3517: the worker completed, but its report can't be trusted as a
@@ -1733,6 +1733,76 @@ def _build_interactive_launch_setup(
1733
1733
  )
1734
1734
 
1735
1735
 
1736
+ @dataclasses.dataclass(frozen=True)
1737
+ class _InjectTarget:
1738
+ """Resolved (machine, repo_name, issue_number) for an `inject` call —
1739
+ repo_name/issue_number are display-only (the final "delivered to ..."
1740
+ line), never used to route the POST itself (that's machine + the
1741
+ assignment id alone)."""
1742
+
1743
+ machine: "Machine"
1744
+ repo_name: str
1745
+ issue_number: int
1746
+
1747
+
1748
+ def _resolve_inject_target(assignment_id: str, board, cfg) -> tuple[_InjectTarget | None, str]:
1749
+ """Resolve *assignment_id* to a machine, preferring the board but
1750
+ falling back to scanning every configured machine's own `/status`
1751
+ (#3566 ask #6). Returns ``(target, "")`` on success, or ``(None,
1752
+ reason)`` naming exactly why resolution failed.
1753
+
1754
+ `coord inject` used to refuse outright on any assignment not on the
1755
+ board (``assignment '<id>' not found in board``) — but a dispatched
1756
+ `bugbash-explore` worker (``issue_number=0``, no GitHub issue, by
1757
+ construction never written to the board) has no board row to find.
1758
+ That left an operator who needed to redirect a runaway lane worker
1759
+ (the exact #3566 incident: injecting guidance into a worker that was
1760
+ about to send unsafe input) with no `coord inject` path at all, only a
1761
+ raw ``POST /inject/{id}`` straight to the agent.
1762
+
1763
+ The board lookup stays first and is unchanged for every ordinary
1764
+ (board-tracked) assignment — this is additive, never a behaviour
1765
+ change for the common case. The fallback is a live, per-machine
1766
+ ``GET /status`` scan (#2096: an agent's own current state, not a
1767
+ locally-cached guess) — the SAME ``{"active": [...], "completed":
1768
+ [...]}`` shape the chat-continue session-id fallback above this
1769
+ function already reads, so "which machine is this assignment on" has
1770
+ one answer, reached one way, for everyone who needs it (#2096's "one
1771
+ question, one answer")."""
1772
+ assignment = board.find_by_id(assignment_id)
1773
+ if assignment is not None:
1774
+ machine = next(
1775
+ (m for m in cfg.machines if m.name == assignment.machine_name), None
1776
+ )
1777
+ if machine is None:
1778
+ return None, f"machine {assignment.machine_name!r} not in config"
1779
+ return _InjectTarget(
1780
+ machine=machine, repo_name=assignment.repo_name,
1781
+ issue_number=assignment.issue_number,
1782
+ ), ""
1783
+
1784
+ from coord.network import fetch_status # noqa: PLC0415
1785
+
1786
+ for machine in cfg.machines:
1787
+ status_result = fetch_status(machine)
1788
+ if not status_result.ok or not status_result.data:
1789
+ continue
1790
+ for bucket in ("active", "completed"):
1791
+ for entry in status_result.data.get(bucket, []):
1792
+ if entry.get("id") != assignment_id:
1793
+ continue
1794
+ spec = entry.get("spec") or {}
1795
+ return _InjectTarget(
1796
+ machine=machine,
1797
+ repo_name=spec.get("repo_name", "") or "",
1798
+ issue_number=int(spec.get("issue_number", 0) or 0),
1799
+ ), ""
1800
+ return None, (
1801
+ f"assignment {assignment_id!r} not found in board or on any "
1802
+ "configured machine's /status"
1803
+ )
1804
+
1805
+
1736
1806
  @click.command(help="Send a user message to a running worker mid-session.")
1737
1807
  @click.argument("assignment_id")
1738
1808
  @click.argument("text", nargs=-1, required=True)
@@ -1743,6 +1813,10 @@ def inject(assignment_id: str, text: tuple[str, ...], config_path: Path) -> None
1743
1813
  The worker picks the message up at its next turn boundary — between
1744
1814
  tool calls, not mid-tool. Useful for adding guidance to a worker
1745
1815
  that's going off the rails without having to stop + re-dispatch.
1816
+
1817
+ Resolves the target machine via :func:`_resolve_inject_target` — the
1818
+ board when the assignment is board-tracked, or a live per-machine
1819
+ `/status` scan when it isn't (e.g. a `bugbash-explore` worker, #3566).
1746
1820
  """
1747
1821
  from coord.board_service import read_board
1748
1822
  from coord.network import inject_message
@@ -1750,16 +1824,9 @@ def inject(assignment_id: str, text: tuple[str, ...], config_path: Path) -> None
1750
1824
  cfg = _load_config(config_path)
1751
1825
  board = read_board()
1752
1826
 
1753
- assignment = board.find_by_id(assignment_id)
1754
- if assignment is None:
1755
- click.echo(f"error: assignment {assignment_id!r} not found in board", err=True)
1756
- sys.exit(1)
1757
-
1758
- machine = next(
1759
- (m for m in cfg.machines if m.name == assignment.machine_name), None
1760
- )
1761
- if machine is None:
1762
- click.echo(f"error: machine {assignment.machine_name!r} not in config", err=True)
1827
+ target, reason = _resolve_inject_target(assignment_id, board, cfg)
1828
+ if target is None:
1829
+ click.echo(f"error: {reason}", err=True)
1763
1830
  sys.exit(1)
1764
1831
 
1765
1832
  message = " ".join(text).strip()
@@ -1768,16 +1835,17 @@ def inject(assignment_id: str, text: tuple[str, ...], config_path: Path) -> None
1768
1835
  sys.exit(2)
1769
1836
 
1770
1837
  try:
1771
- status, body = inject_message(machine, assignment_id, message)
1838
+ status, body = inject_message(target.machine, assignment_id, message)
1772
1839
  except (httpx.HTTPError, httpx.TimeoutException) as e:
1773
- click.echo(f"error: could not reach agent on {machine.name}: {e}", err=True)
1840
+ click.echo(f"error: could not reach agent on {target.machine.name}: {e}", err=True)
1774
1841
  sys.exit(1)
1775
1842
 
1776
1843
  if status == 202:
1777
- click.echo(
1778
- f"Message delivered to {assignment.repo_name} #{assignment.issue_number} "
1779
- f"on {machine.name}"
1844
+ destination = (
1845
+ f"{target.repo_name} #{target.issue_number}"
1846
+ if target.repo_name else "(no board/repo info — board-less assignment)"
1780
1847
  )
1848
+ click.echo(f"Message delivered to {destination} on {target.machine.name}")
1781
1849
  else:
1782
1850
  click.echo(
1783
1851
  f"error: agent rejected message (HTTP {status}): {body.get('error', body)}",