code-coordinator 0.5.758__tar.gz → 0.5.760__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 (1006) hide show
  1. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.760/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/drive_queue.py +33 -15
  5. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/decomposition_chat.py +113 -2
  6. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_queue.py +283 -32
  7. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/wedged_drive_queue.py +22 -13
  8. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/collect.py +98 -3
  9. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue.py +129 -1
  10. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_decomposition_chat.py +133 -0
  11. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue.py +233 -0
  12. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_collect.py +146 -0
  13. code_coordinator-0.5.758/code_coordinator.egg-info/scm_version.json +0 -8
  14. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.gitignore +0 -0
  27. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/GOAL.md +0 -0
  29. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/LICENSE +0 -0
  30. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/README.md +0 -0
  32. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/app_drive.py +0 -0
  49. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/app_drive_daemon.py +0 -0
  50. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/backup.py +0 -0
  54. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor.py +0 -0
  56. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_followthrough.py +0 -0
  57. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_permissions.py +0 -0
  58. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_policy.py +0 -0
  59. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_schema.py +0 -0
  60. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_service.py +0 -0
  61. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_wire.py +0 -0
  62. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/brain.py +0 -0
  63. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/branch_model.py +0 -0
  64. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/briefing_lessons.py +0 -0
  65. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/bugbash.py +0 -0
  67. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/cargo_cache.py +0 -0
  68. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_fix.py +0 -0
  69. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_github.py +0 -0
  70. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_gitlab.py +0 -0
  71. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_store.py +0 -0
  72. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/claim.py +0 -0
  73. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/claude_setup_token.py +0 -0
  74. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/cli.py +0 -0
  75. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/client.py +0 -0
  76. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/codegen.py +0 -0
  77. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/__init__.py +0 -0
  78. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/_common.py +0 -0
  79. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/acceptance.py +0 -0
  80. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/agent_ops.py +0 -0
  81. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/app_drive.py +0 -0
  82. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/audit.py +0 -0
  83. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/backup.py +0 -0
  84. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/bugbash.py +0 -0
  85. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/chat.py +0 -0
  86. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/ci.py +0 -0
  87. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/codegen.py +0 -0
  88. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dispatch.py +0 -0
  89. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dispatch_workers.py +0 -0
  90. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dr.py +0 -0
  91. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/drive.py +0 -0
  92. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/gate_a.py +0 -0
  93. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/gates.py +0 -0
  94. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/issues.py +0 -0
  95. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/lifecycle.py +0 -0
  96. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/machine.py +0 -0
  97. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/merge.py +0 -0
  98. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/milestone.py +0 -0
  99. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/plan_followup.py +0 -0
  100. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/plans.py +0 -0
  101. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/portal.py +0 -0
  102. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/pr.py +0 -0
  103. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/release.py +0 -0
  104. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/repo.py +0 -0
  105. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/report.py +0 -0
  106. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/review.py +0 -0
  107. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/scorecard.py +0 -0
  108. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/sessions.py +0 -0
  109. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/setup.py +0 -0
  110. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/smoke.py +0 -0
  111. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/status.py +0 -0
  112. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/store_migrate.py +0 -0
  113. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/terminal.py +0 -0
  114. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/test_gate.py +0 -0
  115. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/tui.py +0 -0
  116. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/comments.py +0 -0
  117. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/config.py +0 -0
  118. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/config_reload.py +0 -0
  119. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/confirm_test.py +0 -0
  120. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/conflict_fix.py +0 -0
  121. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dao.py +0 -0
  122. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/__init__.py +0 -0
  123. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/fixture.py +0 -0
  124. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/index.html +0 -0
  125. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/reports.html +0 -0
  126. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/server.py +0 -0
  127. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/terminal.py +0 -0
  128. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/db.py +0 -0
  129. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dead_end.py +0 -0
  130. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/README.md +0 -0
  131. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-agent.service +0 -0
  132. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-backup.service +0 -0
  133. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-backup.timer +0 -0
  134. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-board-doctor.service +0 -0
  135. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-board-doctor.timer +0 -0
  136. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.service +0 -0
  137. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.sh +0 -0
  138. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.timer +0 -0
  139. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-dr-verify.service +0 -0
  140. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-dr-verify.timer +0 -0
  141. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-drive-queue.service +0 -0
  142. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-drive-queue.timer +0 -0
  143. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-failure-notify.service +0 -0
  144. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-fleet-watchdog.service +0 -0
  145. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  146. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-nightly-smoke.service +0 -0
  147. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-nightly-smoke.timer +0 -0
  148. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-notify.service +0 -0
  149. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-notify.timer +0 -0
  150. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-propagate.service +0 -0
  151. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-propagate.timer +0 -0
  152. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-window.service +0 -0
  153. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-window.timer +0 -0
  154. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-serve.service +0 -0
  155. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web-dist-build.service +0 -0
  156. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web-dist-build.timer +0 -0
  157. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web.service +0 -0
  158. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy_manifest.py +0 -0
  159. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy_units.py +0 -0
  160. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deprecation_telemetry.py +0 -0
  161. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deps.py +0 -0
  162. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/diagnose.py +0 -0
  163. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dirlink.py +0 -0
  164. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dispatch.py +0 -0
  165. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dispatch_liveness.py +0 -0
  166. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dist_name.py +0 -0
  167. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dr_promote.py +0 -0
  168. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dr_verify.py +0 -0
  169. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive.py +0 -0
  170. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_sessions_snapshot.py +0 -0
  171. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_state.py +0 -0
  172. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/entry_truth.py +0 -0
  173. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/events.py +0 -0
  174. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/failure_class.py +0 -0
  175. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/failure_classifier.py +0 -0
  176. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/filelock.py +0 -0
  177. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/fleet_config_health.py +0 -0
  178. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/forge_availability.py +0 -0
  179. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/freshness.py +0 -0
  180. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_a.py +0 -0
  181. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_b.py +0 -0
  182. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_snapshot.py +0 -0
  183. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gates.py +0 -0
  184. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gen_board_fixture.py +0 -0
  185. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/github_ops.py +0 -0
  186. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/github_throttle.py +0 -0
  187. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/goal.py +0 -0
  188. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/graph_health.py +0 -0
  189. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gtk_native_driver.py +0 -0
  190. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/__init__.py +0 -0
  191. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/aggregate.py +0 -0
  192. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/__init__.py +0 -0
  193. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/_ci_pin.py +0 -0
  194. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/agent_install.py +0 -0
  195. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/cargo_targets.py +0 -0
  196. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/claude_binary.py +0 -0
  197. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/config_drift.py +0 -0
  198. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  199. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/coord_web_ci_pin.py +0 -0
  200. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/deploy_lane_facts.py +0 -0
  201. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/disk.py +0 -0
  202. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_board.py +0 -0
  203. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  204. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_phantom.py +0 -0
  205. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_unit_drift.py +0 -0
  206. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/graph.py +0 -0
  207. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/graphify_cli.py +0 -0
  208. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/gui_lane_preflight.py +0 -0
  209. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/index_lock.py +0 -0
  210. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/issues_sync_staleness.py +0 -0
  211. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/local_machine_identity.py +0 -0
  212. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/plan_usage.py +0 -0
  213. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/pr_churn.py +0 -0
  214. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/release_cordon.py +0 -0
  215. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/repo_state.py +0 -0
  216. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/spawned_coord.py +0 -0
  217. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/stalled_pipeline.py +0 -0
  218. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/sustained_cpu.py +0 -0
  219. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/timer_active.py +0 -0
  220. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/toolchain.py +0 -0
  221. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/unit_drift.py +0 -0
  222. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/unit_enablement.py +0 -0
  223. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/worktrees.py +0 -0
  224. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/cli.py +0 -0
  225. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/context.py +0 -0
  226. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/fleet_snapshot.py +0 -0
  227. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/models.py +0 -0
  228. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/pypi.py +0 -0
  229. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/registry.py +0 -0
  230. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/render.py +0 -0
  231. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/units.py +0 -0
  232. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/hooks.py +0 -0
  233. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/housekeeping.py +0 -0
  234. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/interactive.py +0 -0
  235. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/invariant_alarms.py +0 -0
  236. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/issue_store.py +0 -0
  237. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/issues_sync_status.py +0 -0
  238. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/key_spec.py +0 -0
  239. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/liveness_auditor.py +0 -0
  240. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/mac_native_driver.py +0 -0
  241. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_fault.py +0 -0
  242. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_metrics.py +0 -0
  243. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_onboard.py +0 -0
  244. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_pause.py +0 -0
  245. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_stats.py +0 -0
  246. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/merge_queue.py +0 -0
  247. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_chat.py +0 -0
  248. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_dispatch.py +0 -0
  249. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_gate.py +0 -0
  250. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_order.py +0 -0
  251. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/mock_author.py +0 -0
  252. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/models.py +0 -0
  253. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/native_fs_wait.py +0 -0
  254. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/native_pixels.py +0 -0
  255. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/network.py +0 -0
  256. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/new_issue_chat.py +0 -0
  257. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_runner.py +0 -0
  258. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_smoke.py +0 -0
  259. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_status.py +0 -0
  260. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_store.py +0 -0
  261. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/__init__.py +0 -0
  262. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/baseline.py +0 -0
  263. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/cli.py +0 -0
  264. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/digest.py +0 -0
  265. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/models.py +0 -0
  266. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/predicate.py +0 -0
  267. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/service.py +0 -0
  268. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/store.py +0 -0
  269. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/transport.py +0 -0
  270. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notify.py +0 -0
  271. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/openapi.py +0 -0
  272. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/overlap_fence.py +0 -0
  273. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/overlap_predict.py +0 -0
  274. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/parentage.py +0 -0
  275. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/parentage_github.py +0 -0
  276. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/pipeline.py +0 -0
  277. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/plan_parser.py +0 -0
  278. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/plans.py +0 -0
  279. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/platform_paths.py +0 -0
  280. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_bridge.py +0 -0
  281. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_store.py +0 -0
  282. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_sync.py +0 -0
  283. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/pr_body_lint.py +0 -0
  284. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/preflight_size.py +0 -0
  285. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/prereqs.py +0 -0
  286. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/prereview_gate.py +0 -0
  287. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/progress.py +0 -0
  288. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/__init__.py +0 -0
  289. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/base.py +0 -0
  290. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/claude.py +0 -0
  291. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/claude_pty.py +0 -0
  292. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/opencode.py +0 -0
  293. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/queue_diagnose.py +0 -0
  294. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reconcile.py +0 -0
  295. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reconcile_tick.py +0 -0
  296. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/refine_chat.py +0 -0
  297. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_cordon.py +0 -0
  298. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_gate.py +0 -0
  299. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_propagate.py +0 -0
  300. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_verify.py +0 -0
  301. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_window.py +0 -0
  302. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_dormancy.py +0 -0
  303. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_edit.py +0 -0
  304. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_onboard.py +0 -0
  305. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reports.py +0 -0
  306. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/rest_schema.py +0 -0
  307. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/restart_cmd.py +0 -0
  308. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/revalidate.py +0 -0
  309. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/review.py +0 -0
  310. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/scorecard.py +0 -0
  311. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/self_health.py +0 -0
  312. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/serve_app.py +0 -0
  313. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/shell_exec_wrap.py +0 -0
  314. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  315. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  316. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  317. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  318. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  319. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/portal-followup/SKILL.md +0 -0
  320. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/release-now/SKILL.md +0 -0
  321. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  322. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  323. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/update-issue/SKILL.md +0 -0
  324. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/smoke.py +0 -0
  325. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/smoke_tags.py +0 -0
  326. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/spend_ceiling.py +0 -0
  327. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/split_work.py +0 -0
  328. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/sql.py +0 -0
  329. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/stage_projection.py +0 -0
  330. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/state.py +0 -0
  331. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/store_migrate.py +0 -0
  332. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/store_parity.py +0 -0
  333. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/templates/deploy-cloudflare.node.yml +0 -0
  334. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_author.py +0 -0
  335. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_chat.py +0 -0
  336. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_orchestrator.py +0 -0
  337. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_report.py +0 -0
  338. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/tui_pty_driver.py +0 -0
  339. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/tui_release.py +0 -0
  340. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/uat_checks.py +0 -0
  341. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/upstream_gaps.py +0 -0
  342. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage.py +0 -0
  343. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage_limits.py +0 -0
  344. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage_rollup.py +0 -0
  345. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/win_native_bridge.py +0 -0
  346. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/win_native_driver.py +0 -0
  347. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/worker_events.py +0 -0
  348. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coordinator.example.yml +0 -0
  349. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-agent.service +0 -0
  350. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-backup.service +0 -0
  351. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-backup.timer +0 -0
  352. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-board-doctor.service +0 -0
  353. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-board-doctor.timer +0 -0
  354. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.service +0 -0
  355. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.sh +0 -0
  356. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.timer +0 -0
  357. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-dr-verify.service +0 -0
  358. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-dr-verify.timer +0 -0
  359. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-drive-queue.service +0 -0
  360. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-drive-queue.timer +0 -0
  361. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-failure-notify.service +0 -0
  362. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-failure-notify.sh +0 -0
  363. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-fleet-watchdog.service +0 -0
  364. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-fleet-watchdog.timer +0 -0
  365. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-nightly-smoke.service +0 -0
  366. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-nightly-smoke.timer +0 -0
  367. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-notify.service +0 -0
  368. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-notify.timer +0 -0
  369. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-propagate.service +0 -0
  370. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-propagate.timer +0 -0
  371. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-window.service +0 -0
  372. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-window.timer +0 -0
  373. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-serve.service +0 -0
  374. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.service +0 -0
  375. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.sh +0 -0
  376. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.timer +0 -0
  377. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-rollback.sh +0 -0
  378. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web.service +0 -0
  379. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/node-shim.sh +0 -0
  380. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_TUI_CI.md +0 -0
  381. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  382. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_CI.md +0 -0
  383. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_DIST.md +0 -0
  384. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  385. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/AGENT_OPERATIONS.md +0 -0
  386. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ARCHITECTURE.md +0 -0
  387. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ARCH_SECURITY_GATES.md +0 -0
  388. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/COCKPIT.md +0 -0
  389. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CONTROL_CENTER.md +0 -0
  390. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/COST_DISCIPLINE.md +0 -0
  391. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CROSS_PLATFORM.md +0 -0
  392. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CUSTOMER_FACING_APPS.md +0 -0
  393. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CUSTOMER_PORTAL.md +0 -0
  394. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DATA_STORE_SELECTION.md +0 -0
  395. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DISASTER_RECOVERY.md +0 -0
  396. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DRIVE_QUEUE.md +0 -0
  397. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/EPHEMERAL_WORKERS.md +0 -0
  398. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/FORGE_MIGRATION.md +0 -0
  399. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/GRAPHIFY_SETUP.md +0 -0
  400. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ISSUE_GUIDANCE.md +0 -0
  401. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/MAC_MINI.md +0 -0
  402. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  403. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/NOTIFIER.md +0 -0
  404. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPENCODE_VERIFICATION.md +0 -0
  405. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPERATING_GOTCHAS.md +0 -0
  406. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPERATOR_GUIDES.md +0 -0
  407. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ORACLE_LOOP.md +0 -0
  408. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PHONE_WEBAPP.md +0 -0
  409. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PIPELINE_V2.md +0 -0
  410. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PLATFORM_EVOLUTION.md +0 -0
  411. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/SECOND_BACKEND.md +0 -0
  412. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/STORE_SERVICE.md +0 -0
  413. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  414. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/WEB_CONTROL_CENTER.md +0 -0
  415. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/WSL_WINDOWS_WORKER.md +0 -0
  416. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/README.md +0 -0
  417. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/_tokens.css +0 -0
  418. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/issue-detail.html +0 -0
  419. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/pipeline-narrow.html +0 -0
  420. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/pipeline-wide.html +0 -0
  421. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/graphify-out/.gitignore +0 -0
  422. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/install-agent.sh +0 -0
  423. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/pyproject.toml +0 -0
  424. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/audit_review_verdict_overrides.py +0 -0
  425. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  426. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/build-worker-image.sh +0 -0
  427. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/coordinator-machine.py +0 -0
  428. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/dr-down.sh +0 -0
  429. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/dr-up.sh +0 -0
  430. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/epic-down.sh +0 -0
  431. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/epic-up.sh +0 -0
  432. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/preflight.sh +0 -0
  433. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/provision-server.sh +0 -0
  434. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/provision-worker.sh +0 -0
  435. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  436. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  437. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/throwaway-vm.sh +0 -0
  438. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/verify-github-token.sh +0 -0
  439. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/check_gh_argv_containment.py +0 -0
  440. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/codegen.py +0 -0
  441. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/comment_cruft.py +0 -0
  442. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-test-runner.sh +0 -0
  443. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  444. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  445. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  446. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  447. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-venv-rollback.sh +0 -0
  448. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/drive-batch.sh +0 -0
  449. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/extract-coord-tui.sh +0 -0
  450. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/fleet_watchdog.py +0 -0
  451. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/gen_board_fixture.py +0 -0
  452. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/gen_mock_index.py +0 -0
  453. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/lib/provision-core.sh +0 -0
  454. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/next_release_tag.py +0 -0
  455. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/provision-machine.sh +0 -0
  456. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/run_tests_in_populated_home.sh +0 -0
  457. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/run_tests_without_gh.sh +0 -0
  458. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/setup-macmini.sh +0 -0
  459. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/smoke_437_interactive.py +0 -0
  460. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify-provision-noble.sh +0 -0
  461. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_878_review_capture.py +0 -0
  462. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_release_published.py +0 -0
  463. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_release_wheel.py +0 -0
  464. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/setup.cfg +0 -0
  465. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/SMOKE_SET.md +0 -0
  466. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/__init__.py +0 -0
  467. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/conftest.py +0 -0
  468. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/contract.md +0 -0
  469. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/manifest.yml +0 -0
  470. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  471. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  472. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/contract.md +0 -0
  473. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  474. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  475. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/manifest.yml +0 -0
  476. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  477. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/tsconfig.json +0 -0
  478. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  479. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/backends.py +0 -0
  480. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/conftest.py +0 -0
  481. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/board-pipeline-basic.json +0 -0
  482. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  483. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  484. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  485. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  486. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/all_pass.json +0 -0
  487. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  488. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/mixed_fail.json +0 -0
  489. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  490. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  491. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/skip.json +0 -0
  492. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/truncated.json +0 -0
  493. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  494. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  495. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  496. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  497. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  498. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  499. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  500. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  501. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  502. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_acceptance.py +0 -0
  503. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_acceptance_drivers.py +0 -0
  504. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent.py +0 -0
  505. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_api_error.py +0 -0
  506. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_app.py +0 -0
  507. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_branch_base.py +0 -0
  508. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_branch_capture.py +0 -0
  509. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_config_free_1712.py +0 -0
  510. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_deploy_units_endpoint.py +0 -0
  511. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_dirty_worktree.py +0 -0
  512. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  513. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graceful_shutdown_3649.py +0 -0
  514. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graph_refresh.py +0 -0
  515. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graph_self_heal.py +0 -0
  516. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_health_h3.py +0 -0
  517. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_idle_restart.py +0 -0
  518. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_push_failure.py +0 -0
  519. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_reap.py +0 -0
  520. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_repos_and_pull.py +0 -0
  521. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_restart_services_endpoint.py +0 -0
  522. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_skills_self_heal.py +0 -0
  523. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_startup_diagnostics.py +0 -0
  524. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_update.py +0 -0
  525. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_update_bluegreen.py +0 -0
  526. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_usage_limit.py +0 -0
  527. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_zero_commit.py +0 -0
  528. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ambient_home_isolation.py +0 -0
  529. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_app_drive.py +0 -0
  530. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_capability_reroute_3241.py +0 -0
  531. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_dependency_busy_2804.py +0 -0
  532. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_reject_plan.py +0 -0
  533. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_usage_gate.py +0 -0
  534. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approved_work_2532.py +0 -0
  535. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approved_work_2996.py +0 -0
  536. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_assignment_already_recorded_daemon.py +0 -0
  537. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_log.py +0 -0
  538. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_outcome.py +0 -0
  539. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_query.py +0 -0
  540. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_auto_loop.py +0 -0
  541. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_auto_release_publish_2035.py +0 -0
  542. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_backend_selection.py +0 -0
  543. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_backup.py +0 -0
  544. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_base_checkout_restore.py +0 -0
  545. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_block_log.py +0 -0
  546. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_cap_762.py +0 -0
  547. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor.py +0 -0
  548. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_followthrough.py +0 -0
  549. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_permissions.py +0 -0
  550. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_policy.py +0 -0
  551. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_fixture.py +0 -0
  552. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_nightly_status.py +0 -0
  553. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_read_path.py +0 -0
  554. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_schema.py +0 -0
  555. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_service.py +0 -0
  556. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_state.py +0 -0
  557. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_wire.py +0 -0
  558. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_brain.py +0 -0
  559. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_branch_model.py +0 -0
  560. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_briefing_lessons.py +0 -0
  561. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_bug_intake.py +0 -0
  562. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_bugbash.py +0 -0
  563. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_build_worker_image_env_update.py +0 -0
  564. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cargo_cache.py +0 -0
  565. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_check_gh_argv_containment.py +0 -0
  566. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_acceptance_gate_1950.py +0 -0
  567. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_fix.py +0 -0
  568. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_github.py +0 -0
  569. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_gitlab.py +0 -0
  570. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_parity_2091.py +0 -0
  571. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_store.py +0 -0
  572. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claim.py +0 -0
  573. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claude_md_budget.py +0 -0
  574. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claude_setup_token.py +0 -0
  575. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_acceptance.py +0 -0
  576. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign.py +0 -0
  577. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  578. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_interactive_remote.py +0 -0
  579. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_provider.py +0 -0
  580. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  581. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_audit.py +0 -0
  582. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_chat_continue.py +0 -0
  583. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_ci.py +0 -0
  584. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_codegen.py +0 -0
  585. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_decide.py +0 -0
  586. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_capability_rules.py +0 -0
  587. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_config_provenance.py +0 -0
  588. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_forge_availability.py +0 -0
  589. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_graph.py +0 -0
  590. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_self.py +0 -0
  591. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_test_coverage.py +0 -0
  592. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor.py +0 -0
  593. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_config_free_1801.py +0 -0
  594. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  595. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  596. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive.py +0 -0
  597. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue_investigate.py +0 -0
  598. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue_stranded_prereq.py +0 -0
  599. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_escalate.py +0 -0
  600. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_fix_headless_review.py +0 -0
  601. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_gate_a.py +0 -0
  602. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_gates_next_action.py +0 -0
  603. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_inject_board_less.py +0 -0
  604. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_install_drift.py +0 -0
  605. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_install_skills.py +0 -0
  606. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_close_wrong_repo.py +0 -0
  607. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_comment.py +0 -0
  608. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_create_label.py +0 -0
  609. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_reopen.py +0 -0
  610. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_view_list.py +0 -0
  611. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issues.py +0 -0
  612. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_merge.py +0 -0
  613. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_assign.py +0 -0
  614. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_capture.py +0 -0
  615. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_chat_add_child.py +0 -0
  616. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_dispatch.py +0 -0
  617. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_gate_b.py +0 -0
  618. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_gate_c.py +0 -0
  619. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_order.py +0 -0
  620. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  621. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_ship.py +0 -0
  622. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_network.py +0 -0
  623. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_new_issue_chat.py +0 -0
  624. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_plans.py +0 -0
  625. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_portal.py +0 -0
  626. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_pr.py +0 -0
  627. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_pull_artifact.py +0 -0
  628. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_queue.py +0 -0
  629. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_reattach_sessions.py +0 -0
  630. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_refine_board.py +0 -0
  631. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_preflight.py +0 -0
  632. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_propagate.py +0 -0
  633. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_window.py +0 -0
  634. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_repo_2220.py +0 -0
  635. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  636. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_scorecard.py +0 -0
  637. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_serve_store_backend_3084.py +0 -0
  638. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_set_review_findings.py +0 -0
  639. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_smoke_nightly.py +0 -0
  640. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_smoke_nightly_sweep.py +0 -0
  641. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_advisory_terminal.py +0 -0
  642. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_contested_tag.py +0 -0
  643. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_invariant_alarms.py +0 -0
  644. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_machine_fault.py +0 -0
  645. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_merge_queue.py +0 -0
  646. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_nightly.py +0 -0
  647. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_provider.py +0 -0
  648. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_retried_3340.py +0 -0
  649. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_review_finalizing.py +0 -0
  650. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_supervisor_3366.py +0 -0
  651. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_test_failed_tag.py +0 -0
  652. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_usage_limit.py +0 -0
  653. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_sync_comments_873.py +0 -0
  654. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_test_plan.py +0 -0
  655. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_track.py +0 -0
  656. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_tui_update.py +0 -0
  657. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_wait.py +0 -0
  658. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client.py +0 -0
  659. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_base_install.py +0 -0
  660. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_config_cache_atomic_3052.py +0 -0
  661. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_resource_migration_1946.py +0 -0
  662. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_commands_common.py +0 -0
  663. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_comment_cruft.py +0 -0
  664. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_comments.py +0 -0
  665. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_completion_summary.py +0 -0
  666. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config.py +0 -0
  667. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_acceptance.py +0 -0
  668. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_audit.py +0 -0
  669. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_drift_check.py +0 -0
  670. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_effective.py +0 -0
  671. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_prereview_gate.py +0 -0
  672. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_pricing.py +0 -0
  673. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  674. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_usage_gate.py +0 -0
  675. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_confirm_test.py +0 -0
  676. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_conflict_fix.py +0 -0
  677. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_conflict_fix_semantic.py +0 -0
  678. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  679. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test.py +0 -0
  680. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  681. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_baseline.py +0 -0
  682. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_populated_home.py +0 -0
  683. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_routing.py +0 -0
  684. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_toolchain.py +0 -0
  685. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_venv_setup.py +0 -0
  686. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_uat.py +0 -0
  687. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_web_sse_restart_live.py +0 -0
  688. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coordinator_machine.py +0 -0
  689. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cross_platform_imports.py +0 -0
  690. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dao.py +0 -0
  691. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard.py +0 -0
  692. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_api.py +0 -0
  693. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_fixture.py +0 -0
  694. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_reports.py +0 -0
  695. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_server.py +0 -0
  696. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_terminal.py +0 -0
  697. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_terminal_live.py +0 -0
  698. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_db.py +0 -0
  699. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dead_end.py +0 -0
  700. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_db_backup.py +0 -0
  701. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_web_dist.py +0 -0
  702. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_web_rollback.py +0 -0
  703. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_db_backup_unit.py +0 -0
  704. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_drive_queue_unit.py +0 -0
  705. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_failure_notify_unit.py +0 -0
  706. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_manifest.py +0 -0
  707. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_notify_unit.py +0 -0
  708. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_units_lane.py +0 -0
  709. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_web_unit.py +0 -0
  710. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deprecation_telemetry.py +0 -0
  711. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deps.py +0 -0
  712. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_diagnose.py +0 -0
  713. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dirlink.py +0 -0
  714. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch.py +0 -0
  715. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_liveness.py +0 -0
  716. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_target_validation.py +0 -0
  717. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_workers.py +0 -0
  718. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dist_name.py +0 -0
  719. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_done_housekeeping.py +0 -0
  720. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_azure_scripts.py +0 -0
  721. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_promote.py +0 -0
  722. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_verify.py +0 -0
  723. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive.py +0 -0
  724. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_machine_fault.py +0 -0
  725. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_blocked_rendering.py +0 -0
  726. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_launch_argv.py +0 -0
  727. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_max_parallel_config.py +0 -0
  728. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  729. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_roll_pending.py +0 -0
  730. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  731. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_sessions_snapshot.py +0 -0
  732. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_state.py +0 -0
  733. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_tmux.py +0 -0
  734. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_entry_truth.py +0 -0
  735. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_capability_detection.py +0 -0
  736. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  737. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_image_provenance.py +0 -0
  738. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_errors.py +0 -0
  739. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_events.py +0 -0
  740. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_failure_class.py +0 -0
  741. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_failure_classifier.py +0 -0
  742. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_filelock.py +0 -0
  743. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  744. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fix_escalation_classifier.py +0 -0
  745. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fix_of_force_override.py +0 -0
  746. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_config_health.py +0 -0
  747. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_health_probes.py +0 -0
  748. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_health_snapshot.py +0 -0
  749. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_watchdog.py +0 -0
  750. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_forge_availability.py +0 -0
  751. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_freshness.py +0 -0
  752. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_a.py +0 -0
  753. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_b.py +0 -0
  754. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_snapshot_staleness.py +0 -0
  755. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gates.py +0 -0
  756. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  757. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gen_mock_index.py +0 -0
  758. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_rust_fixture.py +0 -0
  759. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_rust_requests.py +0 -0
  760. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_types_fixture.py +0 -0
  761. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_github_ops.py +0 -0
  762. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_github_throttle.py +0 -0
  763. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_goal.py +0 -0
  764. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_graph_health.py +0 -0
  765. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_graph_selfheal_absent_2237.py +0 -0
  766. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gtk_native_driver.py +0 -0
  767. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_handoff.py +0 -0
  768. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_checks.py +0 -0
  769. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_cli.py +0 -0
  770. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_cli_graph.py +0 -0
  771. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_config.py +0 -0
  772. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_context.py +0 -0
  773. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_coord_tui_ci_pin.py +0 -0
  774. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_coord_web_ci_pin.py +0 -0
  775. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_deploy_lane_facts.py +0 -0
  776. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_fix.py +0 -0
  777. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_incident_regression.py +0 -0
  778. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_issues_sync_staleness.py +0 -0
  779. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_pr_churn.py +0 -0
  780. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_pypi.py +0 -0
  781. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_registry.py +0 -0
  782. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_release_cordon_probe.py +0 -0
  783. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_sustained_cpu.py +0 -0
  784. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_timer_active.py +0 -0
  785. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_toolchain.py +0 -0
  786. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_unit_drift.py +0 -0
  787. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_unit_enablement.py +0 -0
  788. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_wedged_drive_queue.py +0 -0
  789. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_hooks.py +0 -0
  790. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_housekeeping.py +0 -0
  791. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_human_attended_437.py +0 -0
  792. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_init.py +0 -0
  793. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_capabilities_3515.py +0 -0
  794. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_venv_2911.py +0 -0
  795. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  796. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_integration.py +0 -0
  797. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive.py +0 -0
  798. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_briefing_echo.py +0 -0
  799. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_pane_log_2541.py +0 -0
  800. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_prefill_state.py +0 -0
  801. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_session_relaunch.py +0 -0
  802. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_test_verdict_backstop.py +0 -0
  803. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_token_attribution.py +0 -0
  804. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_worktree.py +0 -0
  805. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_invariant_alarms.py +0 -0
  806. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_issue_store_seam.py +0 -0
  807. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_issues_sync_status.py +0 -0
  808. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_key_spec.py +0 -0
  809. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_liveness_auditor.py +0 -0
  810. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_liveness_notify.py +0 -0
  811. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_lock_contention_ratchet.py +0 -0
  812. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_mac_native_driver.py +0 -0
  813. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_fault.py +0 -0
  814. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_metrics.py +0 -0
  815. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_onboard.py +0 -0
  816. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_pause.py +0 -0
  817. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_stats.py +0 -0
  818. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_queue.py +0 -0
  819. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_verification.py +0 -0
  820. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_verify.py +0 -0
  821. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_chat.py +0 -0
  822. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_dispatch.py +0 -0
  823. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_gate.py +0 -0
  824. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_order.py +0 -0
  825. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_seam.py +0 -0
  826. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_mock_author.py +0 -0
  827. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_model_tiering.py +0 -0
  828. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models.py +0 -0
  829. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models_config_labels.py +0 -0
  830. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models_pinned_1650.py +0 -0
  831. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_native_fs_wait.py +0 -0
  832. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_native_pixels.py +0 -0
  833. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_needs_attention.py +0 -0
  834. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_network.py +0 -0
  835. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_new_issue_chat.py +0 -0
  836. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_next_release_tag.py +0 -0
  837. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_runner.py +0 -0
  838. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_smoke.py +0 -0
  839. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_status.py +0 -0
  840. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_store.py +0 -0
  841. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_no_eligible_host_3600.py +0 -0
  842. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_node_shim.py +0 -0
  843. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_baseline.py +0 -0
  844. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_cli.py +0 -0
  845. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_config.py +0 -0
  846. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_drive_seam.py +0 -0
  847. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_isolation.py +0 -0
  848. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_predicate.py +0 -0
  849. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_quiet_hours.py +0 -0
  850. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_service.py +0 -0
  851. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notify.py +0 -0
  852. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notify_drain.py +0 -0
  853. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_openapi.py +0 -0
  854. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_operational_defaults.py +0 -0
  855. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_overlap_fence.py +0 -0
  856. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_overlap_predict.py +0 -0
  857. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_packaged_deploy_units.py +0 -0
  858. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_parentage.py +0 -0
  859. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_paste_landed.py +0 -0
  860. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pause_store_guard_recursion_3789.py +0 -0
  861. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  862. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pipeline.py +0 -0
  863. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plain_runner_smoke_3673.py +0 -0
  864. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_approve_plan_command.py +0 -0
  865. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_pr_command.py +0 -0
  866. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_review_command.py +0 -0
  867. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_only.py +0 -0
  868. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_parser.py +0 -0
  869. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_platform_paths.py +0 -0
  870. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_bridge.py +0 -0
  871. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_config.py +0 -0
  872. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_store.py +0 -0
  873. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_sync.py +0 -0
  874. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pr_body_lint.py +0 -0
  875. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_preflight_size.py +0 -0
  876. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_prereqs.py +0 -0
  877. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_prereview_gate.py +0 -0
  878. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_production_db_guard.py +0 -0
  879. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_progress.py +0 -0
  880. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provider_seam.py +0 -0
  881. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers.py +0 -0
  882. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers_config_labels.py +0 -0
  883. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers_pty.py +0 -0
  884. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provision_core.py +0 -0
  885. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provision_machine.py +0 -0
  886. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_py_rust_mirror_inventory.py +0 -0
  887. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_queue_diagnose.py +0 -0
  888. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_quiet_hours.py +0 -0
  889. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_quiet_hours_store_2146.py +0 -0
  890. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reap_merged_sessions.py +0 -0
  891. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reap_stale_interactive_tick.py +0 -0
  892. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile.py +0 -0
  893. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_branch.py +0 -0
  894. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_completions.py +0 -0
  895. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  896. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_merges.py +0 -0
  897. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_no_agent_record.py +0 -0
  898. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_tick.py +0 -0
  899. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_usage_limit_done.py +0 -0
  900. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_refine_chat.py +0 -0
  901. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_2101.py +0 -0
  902. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  903. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_deadlock_2240.py +0 -0
  904. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  905. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_stuck_2490.py +0 -0
  906. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_gate.py +0 -0
  907. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_propagate.py +0 -0
  908. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_propagate_threshold.py +0 -0
  909. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_roll_between_legs_2854.py +0 -0
  910. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_roll_window_handoff.py +0 -0
  911. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_unified_1242.py +0 -0
  912. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_verify.py +0 -0
  913. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_window.py +0 -0
  914. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_remote_auto_prune.py +0 -0
  915. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_remote_interactive_reaper.py +0 -0
  916. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_add.py +0 -0
  917. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_dormancy.py +0 -0
  918. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_edit_2220.py +0 -0
  919. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_graph_fleet_2237.py +0 -0
  920. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_max_parallel_3423.py +0 -0
  921. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_onboard_2220.py +0 -0
  922. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_report_public_export.py +0 -0
  923. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_report_result_push.py +0 -0
  924. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reports.py +0 -0
  925. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_restart_cmd.py +0 -0
  926. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry.py +0 -0
  927. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_advisory_1606.py +0 -0
  928. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_escalation_classify_3360.py +0 -0
  929. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_type_1636.py +0 -0
  930. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_revalidate.py +0 -0
  931. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review.py +0 -0
  932. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_end_review_without_verdict.py +0 -0
  933. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_parse_failure_diagnostic.py +0 -0
  934. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_reaffirm.py +0 -0
  935. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_state.py +0 -0
  936. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_backstop.py +0 -0
  937. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_override_audit.py +0 -0
  938. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_relay.py +0 -0
  939. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_zero_commits.py +0 -0
  940. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_scoped_review_wiring.py +0 -0
  941. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_scorecard.py +0 -0
  942. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_self_health.py +0 -0
  943. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve.py +0 -0
  944. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_app.py +0 -0
  945. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_app_board_trim.py +0 -0
  946. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_rest_routes.py +0 -0
  947. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_session.py +0 -0
  948. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_slice_issue_attribution.py +0 -0
  949. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke.py +0 -0
  950. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  951. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_live_checkout_restore.py +0 -0
  952. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_plain_runner_3673.py +0 -0
  953. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_workflow.py +0 -0
  954. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_spend_ceiling.py +0 -0
  955. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_spend_ceiling_coordinator.py +0 -0
  956. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_split.py +0 -0
  957. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_split_work.py +0 -0
  958. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_sql_dialect.py +0 -0
  959. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_sqlite_connect_ratchet.py +0 -0
  960. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stage_projection.py +0 -0
  961. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stale_busy_reviewer_697.py +0 -0
  962. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stalled_pipeline.py +0 -0
  963. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_state.py +0 -0
  964. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_state_review_findings_daemon.py +0 -0
  965. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_status_fleet_footer.py +0 -0
  966. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stop_1567.py +0 -0
  967. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_store_contract.py +0 -0
  968. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_store_migrate.py +0 -0
  969. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stuck.py +0 -0
  970. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  971. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_terminal_command.py +0 -0
  972. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_author.py +0 -0
  973. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_chat.py +0 -0
  974. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_orchestrator.py +0 -0
  975. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_report.py +0 -0
  976. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_verdict_parsing.py +0 -0
  977. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_verdict_transcript_floor.py +0 -0
  978. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_text_io_encoding_audit.py +0 -0
  979. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_board_audit.py +0 -0
  980. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_config_load_1080.py +0 -0
  981. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_daemon_routing_906.py +0 -0
  982. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_throwaway_vm.py +0 -0
  983. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tmux_host.py +0 -0
  984. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tmux_session.py +0 -0
  985. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_transcript_floor.py +0 -0
  986. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tui_pty_driver.py +0 -0
  987. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_uat_checks.py +0 -0
  988. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_upstream_gaps.py +0 -0
  989. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage.py +0 -0
  990. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage_limits.py +0 -0
  991. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage_rollup.py +0 -0
  992. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_venv_live_install_2121.py +0 -0
  993. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_version_single_source.py +0 -0
  994. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_watch.py +0 -0
  995. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_win_native_bridge.py +0 -0
  996. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_win_native_driver.py +0 -0
  997. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  998. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_env_venv_isolation.py +0 -0
  999. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_events.py +0 -0
  1000. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_image_pin_sync.py +0 -0
  1001. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_safety.py +0 -0
  1002. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_test_scoping.py +0 -0
  1003. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worktree.py +0 -0
  1004. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  1005. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_write_parity.py +0 -0
  1006. {code_coordinator-0.5.758 → code_coordinator-0.5.760}/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.758
3
+ Version: 0.5.760
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.758
3
+ Version: 0.5.760
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
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.760",
3
+ "distance": 0,
4
+ "node": "g110342595fbe069c4cb87b136ae89c3e3656fc3a",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-12"
8
+ }
@@ -93,6 +93,8 @@ from coord.drive_queue import (
93
93
  find_cycle,
94
94
  fired_holds,
95
95
  flag_shadows_config_warning,
96
+ format_coarse_duration,
97
+ is_benign_queue_alert_command,
96
98
  is_dispatch_failure_reason,
97
99
  is_fix_round_ceiling_blocked,
98
100
  is_merge_gate_block_reason,
@@ -2069,15 +2071,12 @@ def _reason_age_suffix(entry: QueueEntry, now: float) -> str:
2069
2071
  return f" ({_age_str(max(0.0, now - entry.reason_at))} ago)"
2070
2072
 
2071
2073
 
2072
- def _age_str(delta_seconds: float) -> str:
2073
- """``42s`` / ``3h`` / ``5d`` — coarse, single-unit, matches #2133's ask."""
2074
- if delta_seconds < 60:
2075
- return f"{int(delta_seconds)}s"
2076
- if delta_seconds < 3600:
2077
- return f"{int(delta_seconds // 60)}m"
2078
- if delta_seconds < 86400:
2079
- return f"{int(delta_seconds // 3600)}h"
2080
- return f"{int(delta_seconds // 86400)}d"
2074
+ # #3983: `coord.drive_queue.format_coarse_duration` — imported under this
2075
+ # module's own pre-existing name so every call site below (and the
2076
+ # `describe_unreachable_wait`-driven alert text) renders "how long has this
2077
+ # held" with the identical single-unit shape, never a second formatter that
2078
+ # could drift from it.
2079
+ _age_str = format_coarse_duration
2081
2080
 
2082
2081
 
2083
2082
  def _hold_lines(entry: QueueEntry) -> list[str]:
@@ -2566,7 +2565,7 @@ def _unreachable_wait_alert_dict(rows: list[Mapping[str, Any]]) -> dict | None:
2566
2565
  waits = detect_unreachable_waits(entries_from_rows(rows))
2567
2566
  if not waits:
2568
2567
  return None
2569
- synthetic = unreachable_wait_alert(waits)
2568
+ synthetic = unreachable_wait_alert(waits, now=time.time())
2570
2569
  return {
2571
2570
  "reason": synthetic.reason,
2572
2571
  "gate_readings": " | ".join(synthetic.details),
@@ -2583,13 +2582,32 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
2583
2582
 
2584
2583
  rows = list_drive_queue()
2585
2584
  counts = _counts(rows)
2586
- # #2944: a tick-raised alert (a HELD gate, "nothing eligible to launch")
2585
+ # #2944: a tick-raised alert (a HELD gate, a real BLOCKED-entry remedy)
2587
2586
  # takes priority when one exists — it is fresher and, on a busy queue,
2588
2587
  # `_unreachable_wait_alert_dict` would silently win-and-hide it every
2589
- # time a real, actionable alert IS present. Only when the tick has
2590
- # nothing to say (the common, dangerous case a queue with free slots
2591
- # sits in for hours) does the guaranteed-false-wait check get to speak.
2592
- alert = _queue_alert() or _unreachable_wait_alert_dict(rows)
2588
+ # time a real, actionable alert IS present.
2589
+ #
2590
+ # #3983: EXCEPT the one tick-raised shape that is itself a sentinel for
2591
+ # "nothing is actually broken" — `QUEUE_ALERT_NO_REMEDY_COMMAND` (step
2592
+ # 4's "nothing eligible to launch" write when every stalled entry is a
2593
+ # benign deferral, never an actual block). The quadraui#2341 incident: a
2594
+ # root parked `needs_decomposition` with 13 `waiting` dependents chained
2595
+ # on it via `after=` never reaches `blocked` at all — `_resolve_prereqs`
2596
+ # treats a `parked` pre-req as an ordinary unsatisfied deferral, not the
2597
+ # unsatisfiable-and-escalate shape it gives a `blocked`/`failed` one — so
2598
+ # EVERY tick re-wrote this exact no-remedy sentinel over the root's own
2599
+ # #2944/#2978 finding, and `status` never got a chance to name it. Same
2600
+ # benign-sentinel check `coord.notifier.collect.halted_drives` already
2601
+ # uses to keep this shape out of the pager — one question ("is this
2602
+ # tick-raised alert itself the thing, or just noise?"), one answer,
2603
+ # shared by both callers.
2604
+ tick_alert = _queue_alert()
2605
+ if tick_alert is not None and not is_benign_queue_alert_command(
2606
+ tick_alert.get("proposed_command")
2607
+ ):
2608
+ alert = tick_alert
2609
+ else:
2610
+ alert = _unreachable_wait_alert_dict(rows) or tick_alert
2593
2611
  # #3413: `alert["created_at"]` (present only for a tick-raised record —
2594
2612
  # `_unreachable_wait_alert_dict` is computed fresh on every call and
2595
2613
  # carries no timestamp of its own) now survives an unbroken same-reason
@@ -46,6 +46,7 @@ from typing import TYPE_CHECKING, Any
46
46
 
47
47
  if TYPE_CHECKING: # pragma: no cover - typing only
48
48
  from coord.config import Config
49
+ from coord.milestone_order import WorkOrderNode
49
50
  from coord.models import Assignment, Board, Machine, Repo, SplitProposal
50
51
  from coord.preflight_size import SplitVerification
51
52
 
@@ -1314,6 +1315,98 @@ def parse_size_triage_response(
1314
1315
  )
1315
1316
 
1316
1317
 
1318
+ def _repoint_queued_dependents_at_split(
1319
+ *,
1320
+ repo_name: str,
1321
+ original_issue: int,
1322
+ epic_number: int,
1323
+ remapped_nodes: tuple["WorkOrderNode", ...],
1324
+ origin: str,
1325
+ ) -> None:
1326
+ """Re-point every queued entry whose ``after=`` names *original_issue*
1327
+ onto the split's sink children (#3984).
1328
+
1329
+ Without this, ``drive_queue._resolve_prereqs``'s ``live_prereq_
1330
+ terminal`` recovery (#2602/#2850) reads a prerequisite a live re-check
1331
+ finds CLOSED as satisfied, whatever the reason it closed — so a
1332
+ dependent chained on the original would read it as "done" the instant
1333
+ :func:`file_and_queue_split_proposal` closes it as superseded, and
1334
+ launch before any split child has merged (the quadraui#2341 incident:
1335
+ 13 rows would have launched against code the split hadn't landed yet).
1336
+
1337
+ Walks the WHOLE drive queue, not just *repo_name*'s — an ``after=`` key
1338
+ is fully-qualified (``repo#N``) and a dependent can live in a different
1339
+ repo than the original. Every matching row is rewritten with the SAME
1340
+ write path ``coord drive-queue add`` itself uses
1341
+ (:func:`coord.state.enqueue_drive_queue`), carrying forward every
1342
+ OTHER operator-declared field on that row untouched, then confirmed
1343
+ with a readback before moving to the next row — an unconfirmed rewrite
1344
+ is not a rewrite, same discipline the child-queuing loop above already
1345
+ applies. A row's ``last_reason`` also records why its edges changed, so
1346
+ ``coord drive-queue list`` doesn't just show a different ``after=``
1347
+ with no explanation.
1348
+
1349
+ Raises (never swallows) on the first row that doesn't read back the new
1350
+ ``after=`` — propagating straight out of
1351
+ :func:`file_and_queue_split_proposal`, which calls this BEFORE closing
1352
+ the original, so a raise here always aborts before that close.
1353
+ """
1354
+ from coord.drive_queue import entry_key, rewrite_after_for_split, sink_children
1355
+ from coord.state import (
1356
+ enqueue_drive_queue,
1357
+ get_drive_queue_entry,
1358
+ list_drive_queue,
1359
+ update_drive_queue_entry,
1360
+ )
1361
+
1362
+ sink_issue_numbers = sink_children(remapped_nodes)
1363
+ original_key = entry_key(repo_name, original_issue)
1364
+ sink_keys = [entry_key(repo_name, n) for n in sink_issue_numbers]
1365
+
1366
+ for row in list_drive_queue():
1367
+ current_after = [str(a) for a in (row.get("after_json") or [])]
1368
+ if original_key not in current_after:
1369
+ continue
1370
+ dep_repo = str(row.get("repo_name") or "")
1371
+ dep_issue = int(row.get("issue_number") or 0)
1372
+ new_after = rewrite_after_for_split(current_after, original_key, sink_keys)
1373
+
1374
+ enqueue_drive_queue(
1375
+ dep_repo,
1376
+ dep_issue,
1377
+ machine=row.get("machine") or None,
1378
+ after=new_after,
1379
+ hold_after=bool(row.get("hold_after")),
1380
+ hold_reason=str(row.get("hold_reason") or ""),
1381
+ resume_when=str(row.get("resume_when") or ""),
1382
+ hold_scope=str(row.get("hold_scope") or "entry"),
1383
+ max_fix_rounds=row.get("max_fix_rounds"),
1384
+ no_acceptance=bool(row.get("no_acceptance")),
1385
+ plan_destructive=bool(row.get("plan_destructive")),
1386
+ )
1387
+ update_drive_queue_entry(
1388
+ dep_repo,
1389
+ dep_issue,
1390
+ last_reason=(
1391
+ f"re-pointed off superseded {original_key} onto #{epic_number}'s "
1392
+ f"split children ({', '.join(sink_keys)}) by the {origin}"
1393
+ ),
1394
+ )
1395
+
1396
+ confirmed = get_drive_queue_entry(dep_repo, dep_issue)
1397
+ confirmed_after = (
1398
+ [str(a) for a in (confirmed.get("after_json") or [])]
1399
+ if confirmed is not None
1400
+ else None
1401
+ )
1402
+ if confirmed is None or sorted(confirmed_after) != sorted(new_after):
1403
+ raise RuntimeError(
1404
+ f"filed epic #{epic_number} but re-pointing queued dependent "
1405
+ f"{dep_repo}#{dep_issue} off superseded {original_key} did not "
1406
+ f"read back the new after= list"
1407
+ )
1408
+
1409
+
1317
1410
  def file_and_queue_split_proposal(
1318
1411
  *,
1319
1412
  proposal: "SplitProposal",
@@ -1339,8 +1432,13 @@ def file_and_queue_split_proposal(
1339
1432
  ``proposal.chunks`` order, remap the placeholder work order onto the
1340
1433
  real numbers and splice it into the epic body, queue each child
1341
1434
  (confirming every queue write with a readback — an unconfirmed queue
1342
- insert is not a queued child), then close the original issue pointing
1343
- at the new epic — forcing past the "open children" guard (the
1435
+ insert is not a queued child), re-point every ALREADY-queued entry
1436
+ whose ``after=`` names the original onto the split's sink children
1437
+ (:func:`_repoint_queued_dependents_at_split`, #3984 — otherwise
1438
+ ``drive_queue._resolve_prereqs``'s ``live_prereq_terminal`` recovery
1439
+ reads the original's close as "pre-req satisfied" and launches every
1440
+ dependent before any child has landed), then close the original issue
1441
+ pointing at the new epic — forcing past the "open children" guard (the
1344
1442
  original's own body is exactly the shape expected to trip it once it
1345
1443
  already carries a ``## Sub-issues``/``## Work order`` block, e.g. from
1346
1444
  a prior triage pass) and confirming the close itself with a readback,
@@ -1410,6 +1508,19 @@ def file_and_queue_split_proposal(
1410
1508
  "did not read back from the drive queue"
1411
1509
  )
1412
1510
 
1511
+ # #3984: before closing the original, re-point every dependent ALREADY
1512
+ # queued against it onto the split's children — a failure here raises
1513
+ # and propagates straight out of this function, same as every other
1514
+ # step above, so the original is never closed with a dependent still
1515
+ # pointing at it.
1516
+ _repoint_queued_dependents_at_split(
1517
+ repo_name=repo.name,
1518
+ original_issue=proposal.issue_number,
1519
+ epic_number=epic_number,
1520
+ remapped_nodes=remapped_nodes,
1521
+ origin=origin,
1522
+ )
1523
+
1413
1524
  # `force=True`: the original being split is likely to already carry a
1414
1525
  # `## Sub-issues`/`## Work order` block of its own (e.g. a prior triage
1415
1526
  # pass), which would otherwise trip `close_issue()`'s open-children
@@ -114,7 +114,7 @@ from coord.merge_queue import (
114
114
  is_ci_unreadable_reason,
115
115
  is_stale_smoke_reason,
116
116
  )
117
- from coord.milestone_order import TRACKING_ISSUE_LABEL
117
+ from coord.milestone_order import TRACKING_ISSUE_LABEL, WorkOrderNode
118
118
  from coord.models import (
119
119
  CLOSES_ISSUE_TYPES,
120
120
  EPIC_DECOMPOSE_TYPE,
@@ -1551,6 +1551,20 @@ QUEUE_ALERT_STAGE = "drive-queue"
1551
1551
  #: change — `coord drive-queue status` still reads the record unchanged.
1552
1552
  QUEUE_ALERT_NO_REMEDY_COMMAND = "coord drive-queue list"
1553
1553
 
1554
+
1555
+ def is_benign_queue_alert_command(command: object) -> bool:
1556
+ """Is *command* the :data:`QUEUE_ALERT_NO_REMEDY_COMMAND` sentinel?
1557
+
1558
+ One normalization (`str(...).strip()`), shared by `coord drive-queue
1559
+ status` (`coord.commands.drive_queue._queue_alert`'s caller) and the
1560
+ notifier (`coord.notifier.collect.halted_drives`) — before #3983 each
1561
+ wrote its own comparison (one on the raw dict value, the other via
1562
+ `str(...).strip()` plus its own repo/issue check), which happened to
1563
+ agree only because neither had yet drifted; this is the one answer both
1564
+ now ask the identical question of (#2096).
1565
+ """
1566
+ return str(command or "").strip() == QUEUE_ALERT_NO_REMEDY_COMMAND
1567
+
1554
1568
  #: #3413: a DISPLAY hint only — production's `coord-drive-queue.timer` fires
1555
1569
  #: every 3 minutes (`OnUnitActiveSec=3min`, `deploy/coord-drive-queue.timer`),
1556
1570
  #: not a value this module reads from the deployed unit (there is no seam to
@@ -1636,6 +1650,51 @@ def parse_after_spec(raw: str | Iterable[str], default_repo: str) -> list[str]:
1636
1650
  return out
1637
1651
 
1638
1652
 
1653
+ def sink_children(nodes: Iterable[WorkOrderNode]) -> list[int]:
1654
+ """The subset of a split's children nothing else in *nodes* depends on.
1655
+
1656
+ A split's own ``after=`` graph can fan out into more than one
1657
+ independent chain (e.g. ``C1 -> C2`` alongside a parallel ``C3``) — this
1658
+ is every chain's own tail, i.e. the split's full "everything landed"
1659
+ frontier. :func:`coord.decomposition_chat.file_and_queue_split_proposal`
1660
+ re-points a dependent chained on the SUPERSEDED original onto exactly
1661
+ this set: a dependent re-pointed at only the last-filed child would
1662
+ launch the moment that ONE chain lands, while a sibling chain is still
1663
+ mid-flight (#3984).
1664
+
1665
+ Order follows *nodes*' own order, not issue-number order — filed issue
1666
+ numbers need not increase in work-order position order.
1667
+ """
1668
+ nodes = list(nodes)
1669
+ depended_on = {dep for node in nodes for dep in node.after}
1670
+ return [node.issue_number for node in nodes if node.issue_number not in depended_on]
1671
+
1672
+
1673
+ def rewrite_after_for_split(
1674
+ after: Sequence[str], original_key: str, sink_keys: Sequence[str]
1675
+ ) -> list[str]:
1676
+ """Drop *original_key* from *after* and append *sink_keys* in its place.
1677
+
1678
+ Every OTHER pre-req *after* already names (the ``X`` in ``after=O,X``)
1679
+ is kept, untouched — a dependent chained on more than the superseded
1680
+ original still waits on those too. De-duplicates, preserving
1681
+ first-seen order, so a dependent that already names one of the sink
1682
+ children (unusual, but not impossible) doesn't end up listing it
1683
+ twice. Returns a list with the same keys and order as *after* — never
1684
+ raises — when *original_key* isn't present; callers are expected to
1685
+ check that themselves before deciding whether a rewrite happened.
1686
+ """
1687
+ kept = [key for key in after if key != original_key]
1688
+ if len(kept) == len(after):
1689
+ return kept
1690
+ seen = set(kept)
1691
+ for key in sink_keys:
1692
+ if key not in seen:
1693
+ seen.add(key)
1694
+ kept.append(key)
1695
+ return kept
1696
+
1697
+
1639
1698
  # ── the queue row ────────────────────────────────────────────────────────────
1640
1699
 
1641
1700
 
@@ -4196,6 +4255,16 @@ class UnreachableWait:
4196
4255
  is accurate even though those dependents themselves never appear in the
4197
4256
  result (see the predicate's own docstring for why). `0` for an entry
4198
4257
  nothing is chained behind.
4258
+
4259
+ `cause` (#3983) is :func:`classify_unreachable_wait_cause`'s verdict —
4260
+ one of :data:`UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION`/
4261
+ `_PREMISE_REFUSAL`/`_UPSTREAM_GAP_PARK` for a terminal park, or
4262
+ `_DISPATCH_FAILURE`/`_NEVER_DISPATCHED` for the two shapes
4263
+ :func:`is_unreachable_wait_shape` itself distinguishes. `reason_at` is
4264
+ `entry.reason_at` carried straight through — the wall-clock stamp of
4265
+ when `last_reason` (hence this wait) was written, so a renderer can
4266
+ show how long the row has sat this way instead of a bare, undated
4267
+ reason (#2133's rule, applied here).
4199
4268
  """
4200
4269
 
4201
4270
  key: str
@@ -4203,6 +4272,8 @@ class UnreachableWait:
4203
4272
  deferrals: int
4204
4273
  last_reason: str
4205
4274
  dependents: int = 0
4275
+ cause: str = ""
4276
+ reason_at: float | None = None
4206
4277
 
4207
4278
 
4208
4279
  def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
@@ -4273,6 +4344,135 @@ def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
4273
4344
  return entry.state == STATE_BLOCKED and _is_dispatch_failure_reason(entry.last_reason)
4274
4345
 
4275
4346
 
4347
+ # #3983: the cause label `classify_unreachable_wait_cause` assigns a row
4348
+ # matching `is_unreachable_wait_shape`. The three terminal-park values are
4349
+ # the SAME strings `coord.queue_diagnose` names
4350
+ # `CAUSE_NEEDS_DECOMPOSITION`/`CAUSE_PREMISE_REFUSAL`/`CAUSE_UPSTREAM_GAP_PARK`
4351
+ # — deliberately not imported from there: `coord.queue_diagnose` imports
4352
+ # `QueueEntry`/`is_unreachable_wait_shape` FROM this module, so importing its
4353
+ # constants back here would cycle. Keeping the literal text identical is
4354
+ # what lets a reader compare `coord drive-queue status`'s alert and `coord
4355
+ # drive-queue diagnose`'s verdict for the same row without translating
4356
+ # between two vocabularies for the same finding (#2096).
4357
+ UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION = "needs-decomposition"
4358
+ UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL = "premise-refusal"
4359
+ UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK = "upstream-gap-park"
4360
+ #: `attempts > 0`, exhausted the retry budget with no #2273 dispatch-layer
4361
+ #: assignment ever created — the second `is_unreachable_wait_shape` branch.
4362
+ UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE = "dispatch-failure"
4363
+ #: `attempts == 0`, no terminal-park marker — the original #2944 shape:
4364
+ #: nothing has ever tried to dispatch this row at all.
4365
+ UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED = "never-dispatched"
4366
+
4367
+ #: The three causes a worker/park-writer already asserted are terminal —
4368
+ #: "no fix-it leg or relaunch can resolve this" is the row's OWN last_reason
4369
+ #: text, not a guess this module is making. See
4370
+ #: :func:`unreachable_wait_remedy_command` for why that rules out the
4371
+ #: blanket `remove && add` requeue for exactly these three.
4372
+ _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES = frozenset(
4373
+ {
4374
+ UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION,
4375
+ UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL,
4376
+ UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK,
4377
+ }
4378
+ )
4379
+
4380
+ _UNREACHABLE_WAIT_CAUSE_LABEL: dict[str, str] = {
4381
+ UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: "needs-decomposition park (#3931)",
4382
+ UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: "premise-refusal park (#3164)",
4383
+ UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: "upstream-gap park (#3977)",
4384
+ UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE: "exhausted dispatch-layer death (#2273)",
4385
+ UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED: "never dispatched",
4386
+ }
4387
+
4388
+ #: The manual next-step for a cause no blind command can fix — embedded
4389
+ #: straight into :func:`describe_unreachable_wait` so the reason text stays
4390
+ #: self-contained even where :func:`unreachable_wait_remedy_command` can only
4391
+ #: offer a read-only fallback (#3983).
4392
+ _UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE: dict[str, str] = {
4393
+ UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: (
4394
+ "not fixable by any fix-it leg or relaunch — decompose the issue "
4395
+ "into the proposed sub-issues and clear the row by hand"
4396
+ ),
4397
+ UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: (
4398
+ "not fixable by a requeue alone — run `coord drive-queue "
4399
+ "clear-refusal` once the missing prerequisite is confirmed, THEN "
4400
+ "`coord drive-queue remove` + `add`"
4401
+ ),
4402
+ UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: (
4403
+ "not fixable by any fix-it leg or relaunch — clear the row by hand "
4404
+ "once the release lands or the gap is confirmed"
4405
+ ),
4406
+ }
4407
+
4408
+
4409
+ def classify_unreachable_wait_cause(entry: QueueEntry) -> str:
4410
+ """Which `is_unreachable_wait_shape` branch explains *entry*'s wedge.
4411
+
4412
+ Read straight off `entry.last_reason` via the same marker predicates
4413
+ `coord.drive_queue`'s own parked pre-pass and
4414
+ `coord.queue_diagnose._rule_terminal_park` already trust for this text
4415
+ — never a live probe, so this is exactly as cheap as the shape check
4416
+ itself (#2096: one question, one answer, asked the same way everywhere).
4417
+ Callers are expected to gate on :func:`is_unreachable_wait_shape` first;
4418
+ called on a row that fails that shape, this still returns a value
4419
+ rather than raising (the two dispatch-shaped labels degrade safely for
4420
+ an unmatched row — see :func:`unreachable_wait_remedy_command`, which
4421
+ treats an unrecognised cause the same as "never dispatched").
4422
+ """
4423
+ reason = entry.last_reason
4424
+ if is_premise_refusal_reason(reason):
4425
+ return UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL
4426
+ if is_needs_decomposition_reason(reason):
4427
+ return UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION
4428
+ if is_upstream_gap_park_reason(reason):
4429
+ return UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK
4430
+ if entry.attempts and _is_dispatch_failure_reason(reason):
4431
+ return UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE
4432
+ return UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED
4433
+
4434
+
4435
+ def unreachable_wait_remedy_command(w: UnreachableWait) -> str:
4436
+ """The one-line fix for *w*, picked by `.cause` (#3983) — never the
4437
+ blanket `coord drive-queue remove && add` requeue for a cause the row's
4438
+ OWN last_reason already asserts no relaunch can resolve.
4439
+
4440
+ Mirrors :func:`merge_gate_remedy_command`'s #3016 rule for the same
4441
+ reason: a wrong "run this" is worse than no recommendation, so a cause
4442
+ with no blind-safe command falls back to the identical read-only
4443
+ inspect pattern (`coord drive-queue list`, scoped to the entry's repo)
4444
+ rather than ever proposing `remove`+`add` for a needs-decomposition,
4445
+ premise-refusal or upstream-gap park — relaunching one of those just
4446
+ re-runs the drive straight back into the identical park (the #3922
4447
+ needs-decomposition incident this guards against).
4448
+ """
4449
+ parsed = parse_key(w.key)
4450
+ repo, issue = parsed if parsed is not None else ("", 0)
4451
+ if w.cause in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES:
4452
+ return f"coord drive-queue list --repo {repo}"
4453
+ return (
4454
+ f"coord drive-queue remove {repo} {issue} && "
4455
+ f"coord drive-queue add {repo} {issue}"
4456
+ )
4457
+
4458
+
4459
+ def format_coarse_duration(delta_seconds: float) -> str:
4460
+ """``42s`` / ``3h`` / ``5d`` — coarse, single-unit (#2133's ask).
4461
+
4462
+ Shared by :func:`describe_unreachable_wait` and
4463
+ `coord.commands.drive_queue`'s own age renderings (imported from here
4464
+ rather than re-implemented) so "how long has this held" always reads
4465
+ the same shape everywhere it is shown.
4466
+ """
4467
+ if delta_seconds < 60:
4468
+ return f"{int(delta_seconds)}s"
4469
+ if delta_seconds < 3600:
4470
+ return f"{int(delta_seconds // 60)}m"
4471
+ if delta_seconds < 86400:
4472
+ return f"{int(delta_seconds // 3600)}h"
4473
+ return f"{int(delta_seconds // 86400)}d"
4474
+
4475
+
4276
4476
  def is_unreachable_wait(
4277
4477
  entry: QueueEntry,
4278
4478
  *,
@@ -4327,21 +4527,74 @@ def detect_unreachable_waits(
4327
4527
  deferrals=e.deferrals,
4328
4528
  last_reason=e.last_reason,
4329
4529
  dependents=dependents_of.get(e.key, 0),
4530
+ cause=classify_unreachable_wait_cause(e),
4531
+ reason_at=e.reason_at,
4330
4532
  )
4331
4533
  )
4332
4534
  return waits
4333
4535
 
4334
4536
 
4335
- def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
4537
+ def describe_unreachable_wait(w: UnreachableWait, *, now: float | None = None) -> str:
4538
+ """Render one :class:`UnreachableWait` — the entry, its cause (#3983),
4539
+ how long it has sat this way, and (#2978) its dependent count when
4540
+ non-zero, naming WHY those dependents need no remedy of their own (they
4541
+ self-heal on #2756 the moment the root clears, so a reader must not
4542
+ read this as "fix these too").
4543
+
4544
+ *now* is the caller's wall clock: omitted (the default), the age clause
4545
+ is left out rather than guessed — the same degrade `_reason_age_suffix`
4546
+ uses for a row with no `reason_at` at all. Every live caller has a
4547
+ clock available (`time.time()` for the CLI/notifier, `ctx.now` for the
4548
+ health probe) and is expected to pass it; only a clockless test exercises
4549
+ the bare form.
4550
+
4551
+ One rendering, shared by :func:`unreachable_wait_alert` (the `coord
4552
+ drive-queue status` `alert:` line), `coord doctor`'s WARN sample
4553
+ (:mod:`coord.health.checks.wedged_drive_queue`) and (#3983)
4554
+ :mod:`coord.notifier.collect`'s own per-root ``HaltedDrive`` reason —
4555
+ so the CLI, the health probe and the pager phrase the identical finding
4556
+ identically rather than drifting apart (#2096).
4557
+ """
4558
+ age = ""
4559
+ if now is not None and w.reason_at is not None:
4560
+ age = f", stuck {format_coarse_duration(max(0.0, now - w.reason_at))}"
4561
+ cause_label = _UNREACHABLE_WAIT_CAUSE_LABEL.get(w.cause, w.cause or "unknown cause")
4562
+ base = f"{w.key} ({w.state}, {cause_label}, {w.deferrals} deferrals{age})"
4563
+ notes: list[str] = []
4564
+ manual_note = _UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE.get(w.cause)
4565
+ if manual_note:
4566
+ notes.append(manual_note)
4567
+ if w.dependents:
4568
+ plural = "y" if w.dependents == 1 else "ies"
4569
+ notes.append(
4570
+ f"{w.dependents} dependent entr{plural} chained behind it will "
4571
+ "self-heal automatically once this clears (#2756), no remedy "
4572
+ "needed on them"
4573
+ )
4574
+ if notes:
4575
+ base += " — " + "; ".join(notes)
4576
+ return base
4577
+
4578
+
4579
+ def unreachable_wait_alert(
4580
+ waits: Sequence[UnreachableWait], *, now: float | None = None
4581
+ ) -> QueueAlert:
4336
4582
  """The queue-level record #2944's predicate raises, in :func:`_hold_alert`'s
4337
4583
  shape — a message naming the entry (or entries), the evidence that
4338
- qualified it, and the ONE remedy that actually clears it.
4584
+ qualified it, and the remedy that actually clears it.
4585
+
4586
+ #3983: the remedy is picked PER ENTRY by :func:`unreachable_wait_remedy_command`
4587
+ — never the blanket ``remove`` + ``add`` for a needs-decomposition/
4588
+ premise-refusal/upstream-gap park, each of which the row's own
4589
+ last_reason already asserts no relaunch can resolve (see that
4590
+ function's docstring). The top-level ``command`` field mirrors the
4591
+ single entry's remedy when there is exactly one; with several entries
4592
+ of possibly different causes there is no one command that is safe for
4593
+ all of them, so it falls back to the same read-only ``coord
4594
+ drive-queue list`` #3016's ``merge_gate_remedy_command`` falls back to
4595
+ — the per-entry remedy is still named in ``details`` and inline in
4596
+ ``reason`` via :func:`describe_unreachable_wait`.
4339
4597
 
4340
- ``add`` alone does not clear ``blocked`` (the queue list already
4341
- documents this as a footgun elsewhere) — only ``remove`` then ``add``
4342
- does, so that is the command surfaced here rather than the generic
4343
- ``coord drive-queue list`` other alerts fall back on; naming the wrong
4344
- remedy on a state this non-obvious defeats the point of alerting at all.
4345
4598
  Named INLINE in ``reason`` (not only in ``command``, which
4346
4599
  ``drive-queue status``'s plain-text rendering never echoes — only its
4347
4600
  ``gate_readings``/``details`` lines are printed) so the remedy is visible
@@ -4358,42 +4611,40 @@ def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
4358
4611
  that were never named — but easy to mis-generalize to "the dependents
4359
4612
  too" by an operator who does not already know #2756 self-heals them.
4360
4613
  """
4361
- def _name(w: UnreachableWait) -> str:
4362
- base = f"{w.key} ({w.state}, {w.deferrals} deferrals)"
4363
- if w.dependents:
4364
- plural = "ies" if w.dependents != 1 else "y"
4365
- base += (
4366
- f" — {w.dependents} dependent entr{plural} chained behind it "
4367
- "will self-heal automatically once this clears (#2756), no "
4368
- "remedy needed on them"
4369
- )
4370
- return base
4371
-
4372
- names = ", ".join(_name(w) for w in waits[:5])
4614
+ names = ", ".join(describe_unreachable_wait(w, now=now) for w in waits[:5])
4373
4615
  more = ", ..." if len(waits) > 5 else ""
4374
4616
  plural = len(waits) != 1
4617
+ if len(waits) == 1:
4618
+ command = unreachable_wait_remedy_command(waits[0])
4619
+ elif waits and all(
4620
+ w.cause not in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES for w in waits
4621
+ ):
4622
+ command = (
4623
+ "coord drive-queue remove <repo> <issue> && "
4624
+ "coord drive-queue add <repo> <issue> — for each ROOT entry "
4625
+ "named above; any dependents chained behind it self-heal on "
4626
+ "their own (#2756)"
4627
+ )
4628
+ else:
4629
+ command = "coord drive-queue list # remedy differs per entry — see above"
4375
4630
  return QueueAlert(
4376
4631
  reason=(
4377
4632
  f"{len(waits)} queue entr{'ies' if plural else 'y'} stuck in a "
4378
4633
  "guaranteed-false wait — blocked/parked with no branch/PR/"
4379
4634
  "merge-queue row any sweep could ever act on (never dispatched, "
4380
4635
  "or every dispatch attempt died before creating an assignment); "
4381
- f"no sweep can ever clear this on its own: {names}{more}. Fix: "
4382
- "coord drive-queue remove <repo> <issue> && "
4383
- "coord drive-queue add <repo> <issue> for each ROOT entry named "
4384
- "above — never on a dependent chained behind one."
4636
+ f"no sweep can ever clear this on its own: {names}{more}. Fix "
4637
+ "is named per entry above — a needs-decomposition/"
4638
+ "premise-refusal/upstream-gap park is NEVER cleared by `remove`"
4639
+ "+`add`, only an ordinary never-dispatched/dispatch-failure root is."
4385
4640
  ),
4386
4641
  details=tuple(
4387
- f"{w.key}: {w.state}, {w.deferrals} deferrals, "
4388
- f"dependents={w.dependents}, last_reason={w.last_reason!r}"
4642
+ f"{w.key}: {w.state}, cause={w.cause}, {w.deferrals} deferrals, "
4643
+ f"dependents={w.dependents}, last_reason={w.last_reason!r}, "
4644
+ f"fix={unreachable_wait_remedy_command(w)}"
4389
4645
  for w in waits
4390
4646
  ),
4391
- command=(
4392
- "coord drive-queue remove <repo> <issue> && "
4393
- "coord drive-queue add <repo> <issue> — for each ROOT entry "
4394
- "named above; any dependents chained behind it self-heal on "
4395
- "their own (#2756)"
4396
- ),
4647
+ command=command,
4397
4648
  )
4398
4649
 
4399
4650