code-coordinator 0.5.573__tar.gz → 0.5.575__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 (932) hide show
  1. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/bugbash.py +196 -28
  5. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/bugbash.py +15 -3
  6. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/reports.py +112 -17
  7. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_bugbash.py +151 -0
  8. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reports.py +103 -5
  9. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.github/workflows/test.yml +0 -0
  21. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/.gitignore +0 -0
  22. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/CLAUDE.md +0 -0
  23. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/GOAL.md +0 -0
  24. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/LICENSE +0 -0
  25. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/MANIFEST.in +0 -0
  26. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/README.md +0 -0
  27. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/SOURCES.txt +0 -0
  28. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/scm_file_list.json +0 -0
  32. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/backup.py +0 -0
  47. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/claude_setup_token.py +0 -0
  61. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/client.py +0 -0
  63. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/codegen.py +0 -0
  64. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/backup.py +0 -0
  70. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/ci.py +0 -0
  72. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/codegen.py +0 -0
  73. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/dr.py +0 -0
  76. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/machine.py +0 -0
  83. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/merge.py +0 -0
  84. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/milestone.py +0 -0
  85. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/plan_followup.py +0 -0
  86. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/plans.py +0 -0
  87. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/portal.py +0 -0
  88. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/pr.py +0 -0
  89. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/release.py +0 -0
  90. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/repo.py +0 -0
  91. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/report.py +0 -0
  92. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/review.py +0 -0
  93. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/scorecard.py +0 -0
  94. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/sessions.py +0 -0
  95. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/setup.py +0 -0
  96. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/status.py +0 -0
  97. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/store_migrate.py +0 -0
  98. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/config.py +0 -0
  103. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/confirm_test.py +0 -0
  105. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/conflict_fix.py +0 -0
  106. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dao.py +0 -0
  107. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/__init__.py +0 -0
  108. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/fixture.py +0 -0
  109. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/index.html +0 -0
  110. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/reports.html +0 -0
  111. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/db.py +0 -0
  114. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/events.py +0 -0
  155. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/gtk_native_driver.py +0 -0
  171. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/local_machine_identity.py +0 -0
  192. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/plan_usage.py +0 -0
  193. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/pr_churn.py +0 -0
  194. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/release_cordon.py +0 -0
  195. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/repo_state.py +0 -0
  196. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/spawned_coord.py +0 -0
  197. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/stalled_pipeline.py +0 -0
  198. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/timer_active.py +0 -0
  199. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/toolchain.py +0 -0
  200. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/unit_drift.py +0 -0
  201. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/unit_enablement.py +0 -0
  202. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/wedged_drive_queue.py +0 -0
  203. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/checks/worktrees.py +0 -0
  204. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/cli.py +0 -0
  205. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/context.py +0 -0
  206. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/fleet_snapshot.py +0 -0
  207. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/models.py +0 -0
  208. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/pypi.py +0 -0
  209. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/registry.py +0 -0
  210. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/render.py +0 -0
  211. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/health/units.py +0 -0
  212. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/hooks.py +0 -0
  213. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/housekeeping.py +0 -0
  214. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/interactive.py +0 -0
  215. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/invariant_alarms.py +0 -0
  216. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/issue_store.py +0 -0
  217. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/issues_sync_status.py +0 -0
  218. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/liveness_auditor.py +0 -0
  219. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/mac_native_driver.py +0 -0
  220. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/machine_fault.py +0 -0
  221. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/machine_metrics.py +0 -0
  222. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/machine_onboard.py +0 -0
  223. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/machine_pause.py +0 -0
  224. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/machine_stats.py +0 -0
  225. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/merge_queue.py +0 -0
  226. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/milestone_chat.py +0 -0
  227. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/milestone_dispatch.py +0 -0
  228. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/milestone_gate.py +0 -0
  229. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/milestone_order.py +0 -0
  230. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/mock_author.py +0 -0
  231. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/models.py +0 -0
  232. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/network.py +0 -0
  233. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/new_issue_chat.py +0 -0
  234. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/__init__.py +0 -0
  235. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/baseline.py +0 -0
  236. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/cli.py +0 -0
  237. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/collect.py +0 -0
  238. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/digest.py +0 -0
  239. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/models.py +0 -0
  240. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/predicate.py +0 -0
  241. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/service.py +0 -0
  242. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/store.py +0 -0
  243. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notifier/transport.py +0 -0
  244. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/notify.py +0 -0
  245. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/openapi.py +0 -0
  246. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/overlap_fence.py +0 -0
  247. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/overlap_predict.py +0 -0
  248. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/parentage.py +0 -0
  249. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/parentage_github.py +0 -0
  250. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/pipeline.py +0 -0
  251. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/plan_parser.py +0 -0
  252. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/plans.py +0 -0
  253. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/platform_paths.py +0 -0
  254. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/portal_bridge.py +0 -0
  255. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/portal_store.py +0 -0
  256. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/portal_sync.py +0 -0
  257. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/pr_body_lint.py +0 -0
  258. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/prereqs.py +0 -0
  259. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/progress.py +0 -0
  260. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/providers/__init__.py +0 -0
  261. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/providers/base.py +0 -0
  262. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/providers/claude.py +0 -0
  263. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/providers/claude_pty.py +0 -0
  264. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/providers/opencode.py +0 -0
  265. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/queue_diagnose.py +0 -0
  266. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/reconcile.py +0 -0
  267. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/reconcile_tick.py +0 -0
  268. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/refine_chat.py +0 -0
  269. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/release_cordon.py +0 -0
  270. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/release_gate.py +0 -0
  271. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/release_propagate.py +0 -0
  272. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/release_verify.py +0 -0
  273. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/release_window.py +0 -0
  274. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/repo_dormancy.py +0 -0
  275. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/repo_edit.py +0 -0
  276. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/repo_onboard.py +0 -0
  277. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/rest_schema.py +0 -0
  278. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/restart_cmd.py +0 -0
  279. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/revalidate.py +0 -0
  280. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/review.py +0 -0
  281. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/scorecard.py +0 -0
  282. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/self_health.py +0 -0
  283. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/serve_app.py +0 -0
  284. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  285. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  286. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  287. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  288. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/portal-followup/SKILL.md +0 -0
  290. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/release-now/SKILL.md +0 -0
  291. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  292. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  293. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/skills/update-issue/SKILL.md +0 -0
  294. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/smoke.py +0 -0
  295. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/smoke_tags.py +0 -0
  296. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/spend_ceiling.py +0 -0
  297. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/split_work.py +0 -0
  298. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/sql.py +0 -0
  299. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/stage_projection.py +0 -0
  300. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/state.py +0 -0
  301. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/store_migrate.py +0 -0
  302. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/store_parity.py +0 -0
  303. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/templates/deploy-cloudflare.node.yml +0 -0
  304. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/test_author.py +0 -0
  305. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/test_chat.py +0 -0
  306. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/test_orchestrator.py +0 -0
  307. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/test_report.py +0 -0
  308. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/tui_pty_driver.py +0 -0
  309. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/tui_release.py +0 -0
  310. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/uat_checks.py +0 -0
  311. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/usage.py +0 -0
  312. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/usage_limits.py +0 -0
  313. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/usage_rollup.py +0 -0
  314. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/win_native_bridge.py +0 -0
  315. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/win_native_driver.py +0 -0
  316. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coord/worker_events.py +0 -0
  317. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/coordinator.example.yml +0 -0
  318. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/setup.cfg +0 -0
  429. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_build_worker_image_env_update.py +0 -0
  518. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cargo_cache.py +0 -0
  519. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_check_gh_argv_containment.py +0 -0
  520. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_fix.py +0 -0
  522. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_github.py +0 -0
  523. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_gitlab.py +0 -0
  524. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_parity_2091.py +0 -0
  525. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_ci_store.py +0 -0
  526. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_claim.py +0 -0
  527. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_claude_md_budget.py +0 -0
  528. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_claude_setup_token.py +0 -0
  529. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_acceptance.py +0 -0
  530. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_assign.py +0 -0
  531. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  532. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_assign_interactive_remote.py +0 -0
  533. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_assign_provider.py +0 -0
  534. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  535. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_audit.py +0 -0
  536. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_chat_continue.py +0 -0
  537. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_ci.py +0 -0
  538. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_codegen.py +0 -0
  539. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_decide.py +0 -0
  540. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_capability_rules.py +0 -0
  541. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_config_provenance.py +0 -0
  542. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_forge_availability.py +0 -0
  543. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_graph.py +0 -0
  544. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_self.py +0 -0
  545. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_diagnose_test_coverage.py +0 -0
  546. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_doctor.py +0 -0
  547. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_doctor_config_free_1801.py +0 -0
  548. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  549. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  550. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_drive.py +0 -0
  551. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_drive_queue.py +0 -0
  552. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_escalate.py +0 -0
  553. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_fix_headless_review.py +0 -0
  554. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_gate_a.py +0 -0
  555. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_install_drift.py +0 -0
  556. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_install_skills.py +0 -0
  557. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_issue_comment.py +0 -0
  558. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_issue_create_label.py +0 -0
  559. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_issue_reopen.py +0 -0
  560. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_issue_view_list.py +0 -0
  561. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_issues.py +0 -0
  562. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_merge.py +0 -0
  563. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_assign.py +0 -0
  564. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_capture.py +0 -0
  565. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_chat_add_child.py +0 -0
  566. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_dispatch.py +0 -0
  567. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_gate_b.py +0 -0
  568. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_gate_c.py +0 -0
  569. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_order.py +0 -0
  570. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  571. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_milestone_ship.py +0 -0
  572. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_network.py +0 -0
  573. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_new_issue_chat.py +0 -0
  574. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_plans.py +0 -0
  575. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_portal.py +0 -0
  576. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_pr.py +0 -0
  577. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_pull_artifact.py +0 -0
  578. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_queue.py +0 -0
  579. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_reattach_sessions.py +0 -0
  580. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_refine_board.py +0 -0
  581. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_release_preflight.py +0 -0
  582. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_release_propagate.py +0 -0
  583. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_release_window.py +0 -0
  584. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_repo_2220.py +0 -0
  585. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  586. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_scorecard.py +0 -0
  587. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_serve_store_backend_3084.py +0 -0
  588. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_set_review_findings.py +0 -0
  589. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_advisory_terminal.py +0 -0
  590. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_contested_tag.py +0 -0
  591. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_invariant_alarms.py +0 -0
  592. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_machine_fault.py +0 -0
  593. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_merge_queue.py +0 -0
  594. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_provider.py +0 -0
  595. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_retried_3340.py +0 -0
  596. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_review_finalizing.py +0 -0
  597. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_supervisor_3366.py +0 -0
  598. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_test_failed_tag.py +0 -0
  599. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_status_usage_limit.py +0 -0
  600. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_sync_comments_873.py +0 -0
  601. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_test_plan.py +0 -0
  602. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_track.py +0 -0
  603. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_tui_update.py +0 -0
  604. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cli_wait.py +0 -0
  605. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_client.py +0 -0
  606. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_client_base_install.py +0 -0
  607. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_client_config_cache_atomic_3052.py +0 -0
  608. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_client_resource_migration_1946.py +0 -0
  609. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_commands_common.py +0 -0
  610. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_comments.py +0 -0
  611. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_completion_summary.py +0 -0
  612. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config.py +0 -0
  613. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_acceptance.py +0 -0
  614. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_audit.py +0 -0
  615. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_drift_check.py +0 -0
  616. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_effective.py +0 -0
  617. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_pricing.py +0 -0
  618. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  619. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_config_usage_gate.py +0 -0
  620. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_confirm_test.py +0 -0
  621. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_conflict_fix.py +0 -0
  622. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_conflict_fix_semantic.py +0 -0
  623. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  624. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test.py +0 -0
  625. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  626. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test_runner_baseline.py +0 -0
  627. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test_runner_populated_home.py +0 -0
  628. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test_runner_routing.py +0 -0
  629. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_test_runner_toolchain.py +0 -0
  630. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_uat.py +0 -0
  631. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coord_web_sse_restart_live.py +0 -0
  632. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_coordinator_machine.py +0 -0
  633. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_cross_platform_imports.py +0 -0
  634. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dao.py +0 -0
  635. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard.py +0 -0
  636. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_api.py +0 -0
  637. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_fixture.py +0 -0
  638. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_reports.py +0 -0
  639. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_server.py +0 -0
  640. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_terminal.py +0 -0
  641. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dashboard_terminal_live.py +0 -0
  642. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_db.py +0 -0
  643. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dead_end.py +0 -0
  644. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_decomposition_chat.py +0 -0
  645. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_coord_db_backup.py +0 -0
  646. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_coord_web_dist.py +0 -0
  647. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_coord_web_rollback.py +0 -0
  648. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_db_backup_unit.py +0 -0
  649. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_drive_queue_unit.py +0 -0
  650. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_failure_notify_unit.py +0 -0
  651. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_manifest.py +0 -0
  652. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_notify_unit.py +0 -0
  653. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_units_lane.py +0 -0
  654. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deploy_web_unit.py +0 -0
  655. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deprecation_telemetry.py +0 -0
  656. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_deps.py +0 -0
  657. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_diagnose.py +0 -0
  658. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dispatch.py +0 -0
  659. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dispatch_liveness.py +0 -0
  660. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dispatch_target_validation.py +0 -0
  661. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dispatch_workers.py +0 -0
  662. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dist_name.py +0 -0
  663. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_done_housekeeping.py +0 -0
  664. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dr_azure_scripts.py +0 -0
  665. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dr_promote.py +0 -0
  666. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_dr_verify.py +0 -0
  667. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive.py +0 -0
  668. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_machine_fault.py +0 -0
  669. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue.py +0 -0
  670. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_gtk_native_driver.py +0 -0
  711. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_handoff.py +0 -0
  712. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_checks.py +0 -0
  713. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_cli.py +0 -0
  714. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_cli_graph.py +0 -0
  715. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_config.py +0 -0
  716. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_context.py +0 -0
  717. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_coord_tui_ci_pin.py +0 -0
  718. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_coord_web_ci_pin.py +0 -0
  719. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_deploy_lane_facts.py +0 -0
  720. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_fix.py +0 -0
  721. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_incident_regression.py +0 -0
  722. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_issues_sync_staleness.py +0 -0
  723. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_pr_churn.py +0 -0
  724. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_pypi.py +0 -0
  725. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_registry.py +0 -0
  726. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_release_cordon_probe.py +0 -0
  727. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_timer_active.py +0 -0
  728. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_toolchain.py +0 -0
  729. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_unit_drift.py +0 -0
  730. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_unit_enablement.py +0 -0
  731. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_health_wedged_drive_queue.py +0 -0
  732. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_hooks.py +0 -0
  733. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_housekeeping.py +0 -0
  734. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_human_attended_437.py +0 -0
  735. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_init.py +0 -0
  736. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_install_agent_capabilities_3515.py +0 -0
  737. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_install_agent_venv_2911.py +0 -0
  738. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  739. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_integration.py +0 -0
  740. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive.py +0 -0
  741. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_briefing_echo.py +0 -0
  742. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_pane_log_2541.py +0 -0
  743. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_prefill_state.py +0 -0
  744. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_session_relaunch.py +0 -0
  745. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_test_verdict_backstop.py +0 -0
  746. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_token_attribution.py +0 -0
  747. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_interactive_worktree.py +0 -0
  748. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_invariant_alarms.py +0 -0
  749. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_issue_store_seam.py +0 -0
  750. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_issues_sync_status.py +0 -0
  751. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_liveness_auditor.py +0 -0
  752. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_liveness_notify.py +0 -0
  753. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_lock_contention_ratchet.py +0 -0
  754. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_mac_native_driver.py +0 -0
  755. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_machine_fault.py +0 -0
  756. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_machine_metrics.py +0 -0
  757. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_machine_onboard.py +0 -0
  758. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_machine_pause.py +0 -0
  759. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_machine_stats.py +0 -0
  760. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_merge_queue.py +0 -0
  761. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_merge_verify.py +0 -0
  762. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_milestone_chat.py +0 -0
  763. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_milestone_dispatch.py +0 -0
  764. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_milestone_gate.py +0 -0
  765. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_milestone_order.py +0 -0
  766. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_milestone_seam.py +0 -0
  767. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_mock_author.py +0 -0
  768. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_model_tiering.py +0 -0
  769. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_models.py +0 -0
  770. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_models_config_labels.py +0 -0
  771. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_needs_attention.py +0 -0
  772. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_network.py +0 -0
  773. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_new_issue_chat.py +0 -0
  774. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_next_release_tag.py +0 -0
  775. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_node_shim.py +0 -0
  776. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_baseline.py +0 -0
  777. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_cli.py +0 -0
  778. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_collect.py +0 -0
  779. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_config.py +0 -0
  780. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_drive_seam.py +0 -0
  781. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_isolation.py +0 -0
  782. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_predicate.py +0 -0
  783. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_quiet_hours.py +0 -0
  784. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notifier_service.py +0 -0
  785. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notify.py +0 -0
  786. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_notify_drain.py +0 -0
  787. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_openapi.py +0 -0
  788. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_operational_defaults.py +0 -0
  789. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_overlap_fence.py +0 -0
  790. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_overlap_predict.py +0 -0
  791. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_packaged_deploy_units.py +0 -0
  792. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_parentage.py +0 -0
  793. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_paste_landed.py +0 -0
  794. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  795. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_pipeline.py +0 -0
  796. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_plan_followup_approve_plan_command.py +0 -0
  797. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_plan_followup_pr_command.py +0 -0
  798. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_plan_followup_review_command.py +0 -0
  799. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_plan_only.py +0 -0
  800. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_plan_parser.py +0 -0
  801. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_platform_paths.py +0 -0
  802. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_portal_bridge.py +0 -0
  803. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_portal_config.py +0 -0
  804. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_portal_store.py +0 -0
  805. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_portal_sync.py +0 -0
  806. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_pr_body_lint.py +0 -0
  807. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_prereqs.py +0 -0
  808. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_production_db_guard.py +0 -0
  809. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_progress.py +0 -0
  810. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_provider_seam.py +0 -0
  811. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_providers.py +0 -0
  812. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_providers_config_labels.py +0 -0
  813. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_providers_pty.py +0 -0
  814. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_provision_core.py +0 -0
  815. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_provision_machine.py +0 -0
  816. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_py_rust_mirror_inventory.py +0 -0
  817. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_quiet_hours.py +0 -0
  818. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_quiet_hours_store_2146.py +0 -0
  819. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reap_merged_sessions.py +0 -0
  820. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reap_stale_interactive_tick.py +0 -0
  821. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile.py +0 -0
  822. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_branch.py +0 -0
  823. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_completions.py +0 -0
  824. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  825. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_merges.py +0 -0
  826. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_no_agent_record.py +0 -0
  827. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_tick.py +0 -0
  828. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_reconcile_usage_limit_done.py +0 -0
  829. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_refine_chat.py +0 -0
  830. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_cordon_2101.py +0 -0
  831. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  832. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_cordon_deadlock_2240.py +0 -0
  833. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  834. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_cordon_stuck_2490.py +0 -0
  835. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_gate.py +0 -0
  836. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_propagate.py +0 -0
  837. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_propagate_threshold.py +0 -0
  838. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_roll_between_legs_2854.py +0 -0
  839. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_roll_window_handoff.py +0 -0
  840. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_unified_1242.py +0 -0
  841. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_verify.py +0 -0
  842. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_release_window.py +0 -0
  843. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_remote_auto_prune.py +0 -0
  844. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_remote_interactive_reaper.py +0 -0
  845. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_add.py +0 -0
  846. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_dormancy.py +0 -0
  847. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_edit_2220.py +0 -0
  848. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_graph_fleet_2237.py +0 -0
  849. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_max_parallel_3423.py +0 -0
  850. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_repo_onboard_2220.py +0 -0
  851. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_report_public_export.py +0 -0
  852. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_report_result_push.py +0 -0
  853. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_restart_cmd.py +0 -0
  854. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_retry.py +0 -0
  855. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_retry_advisory_1606.py +0 -0
  856. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_retry_escalation_classify_3360.py +0 -0
  857. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_retry_type_1636.py +0 -0
  858. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_revalidate.py +0 -0
  859. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review.py +0 -0
  860. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_end_review_without_verdict.py +0 -0
  861. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_parse_failure_diagnostic.py +0 -0
  862. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_reaffirm.py +0 -0
  863. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_state.py +0 -0
  864. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_verdict_backstop.py +0 -0
  865. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_verdict_override_audit.py +0 -0
  866. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_verdict_relay.py +0 -0
  867. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_review_zero_commits.py +0 -0
  868. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_scoped_review_wiring.py +0 -0
  869. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_scorecard.py +0 -0
  870. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_self_health.py +0 -0
  871. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_serve.py +0 -0
  872. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_serve_app.py +0 -0
  873. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_serve_app_board_trim.py +0 -0
  874. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_serve_rest_routes.py +0 -0
  875. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_session.py +0 -0
  876. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_slice_issue_attribution.py +0 -0
  877. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_smoke.py +0 -0
  878. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  879. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_smoke_live_checkout_restore.py +0 -0
  880. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_smoke_workflow.py +0 -0
  881. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_spend_ceiling.py +0 -0
  882. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_spend_ceiling_coordinator.py +0 -0
  883. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_split.py +0 -0
  884. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_split_work.py +0 -0
  885. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_sql_dialect.py +0 -0
  886. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_sqlite_connect_ratchet.py +0 -0
  887. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stage_projection.py +0 -0
  888. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stale_busy_reviewer_697.py +0 -0
  889. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stalled_pipeline.py +0 -0
  890. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_state.py +0 -0
  891. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_state_review_findings_daemon.py +0 -0
  892. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_status_fleet_footer.py +0 -0
  893. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stop_1567.py +0 -0
  894. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_store_contract.py +0 -0
  895. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_store_migrate.py +0 -0
  896. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stuck.py +0 -0
  897. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  898. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_terminal_command.py +0 -0
  899. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_author.py +0 -0
  900. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_chat.py +0 -0
  901. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_orchestrator.py +0 -0
  902. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_report.py +0 -0
  903. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_verdict_parsing.py +0 -0
  904. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_test_verdict_transcript_floor.py +0 -0
  905. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_text_io_encoding_audit.py +0 -0
  906. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_thin_client_board_audit.py +0 -0
  907. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_thin_client_config_load_1080.py +0 -0
  908. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_thin_client_daemon_routing_906.py +0 -0
  909. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_throwaway_vm.py +0 -0
  910. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_tmux_host.py +0 -0
  911. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_tmux_session.py +0 -0
  912. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_transcript_floor.py +0 -0
  913. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_tui_pty_driver.py +0 -0
  914. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_uat_checks.py +0 -0
  915. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_usage.py +0 -0
  916. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_usage_limits.py +0 -0
  917. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_usage_rollup.py +0 -0
  918. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_venv_live_install_2121.py +0 -0
  919. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_version_single_source.py +0 -0
  920. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_watch.py +0 -0
  921. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_win_native_bridge.py +0 -0
  922. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_win_native_driver.py +0 -0
  923. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  924. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worker_env_venv_isolation.py +0 -0
  925. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worker_events.py +0 -0
  926. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worker_image_pin_sync.py +0 -0
  927. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worker_safety.py +0 -0
  928. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worker_test_scoping.py +0 -0
  929. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worktree.py +0 -0
  930. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  931. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/tests/test_write_parity.py +0 -0
  932. {code_coordinator-0.5.573 → code_coordinator-0.5.575}/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.573
3
+ Version: 0.5.575
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.573
3
+ Version: 0.5.575
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.573",
2
+ "tag": "0.5.575",
3
3
  "distance": 0,
4
- "node": "g05352d1d1a6caa0eaee8083e67ae6f4aa685847e",
4
+ "node": "g22daba195f41dce89012e37ebdeb524a5b332d51",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-03"
@@ -405,7 +405,17 @@ def _best_match(
405
405
  issue_platform = _platform_from_title(title)
406
406
  if issue_platform is not None and issue_platform != finding.platform:
407
407
  continue
408
- score = _title_similarity(finding.title, title)
408
+ # #3546: score against the TAG-STRIPPED title, not the raw one — the
409
+ # platform gate above already accounts for the ``[bugbash:<platform>]``
410
+ # prefix, so scoring the untouched title made its own extra tokens
411
+ # ("bugbash", the platform name) dilute the Jaccard score against a
412
+ # short real-world title. "Caption buttons unclickable" (3 words) vs.
413
+ # "[bugbash:win-native] Caption buttons unclickable" scored only 0.5
414
+ # — BELOW :data:`DEFAULT_DEDUPE_THRESHOLD` — purely because of the
415
+ # tag's own 3 extra words, which is exactly the "titles differing
416
+ # enough to defeat matching" root cause behind vimcode#1656/#1660
417
+ # being filed as two separate issues for one bug.
418
+ score = _title_similarity(finding.title, _strip_platform_tag(title))
409
419
  if score >= threshold and (best is None or score > best[1]):
410
420
  best = (issue, score)
411
421
  return best
@@ -416,6 +426,54 @@ def _platform_from_title(title: str) -> str | None:
416
426
  return m.group(1) if m else None
417
427
 
418
428
 
429
+ def _strip_platform_tag(title: str) -> str:
430
+ """Remove a leading ``[bugbash:<platform>]`` tag (if present) before
431
+ scoring title similarity — see :func:`_best_match`'s comment for why
432
+ leaving it in place made the score sensitive to the platform name
433
+ itself rather than just the bug description."""
434
+ return re.sub(r"^\[bugbash:[^\]]+\]\s*", "", title)
435
+
436
+
437
+ def _dedupe_round_findings(
438
+ findings: Sequence[Finding],
439
+ open_issues: list[dict],
440
+ closed_issues: list[dict],
441
+ *,
442
+ threshold: float = DEFAULT_DEDUPE_THRESHOLD,
443
+ ) -> list[DedupeResult]:
444
+ """Dedupe every finding from ONE round, in order, against *open_issues*/
445
+ *closed_issues* — AND against every finding already decided NEW or
446
+ REGRESSION earlier in this SAME call (#3546).
447
+
448
+ The bugbash run that filed vimcode#1656/#1660/#1669/#1675 as four
449
+ separate issues for one bug did so partly because two lanes reporting
450
+ the identical symptom in the SAME round were each deduped only against
451
+ issues that existed BEFORE the round started — neither lane's finding
452
+ could see the other's. This function fixes that: a finding is matched
453
+ not just against *open_issues* but against a running list seeded with
454
+ every PRIOR finding in *findings* that this same walk already decided
455
+ was new/a regression, so the second lane's identical report comes back
456
+ :attr:`DedupeVerdict.DUPLICATE` instead of also being judged new.
457
+
458
+ A within-round match's :attr:`DedupeResult.matched_number` is ``None``
459
+ here — the sibling finding it matches has not actually been filed
460
+ through ``coord issue create`` yet at dedupe time, so there is no real
461
+ issue number to report. :func:`run_bugbash`'s filing loop resolves this
462
+ to the sibling's real number once that sibling is actually filed,
463
+ rather than leaving every within-round duplicate permanently numberless.
464
+ """
465
+ results: list[DedupeResult] = []
466
+ running_open = list(open_issues)
467
+ for finding in findings:
468
+ result = dedupe_finding(finding, running_open, closed_issues, threshold=threshold)
469
+ results.append(result)
470
+ if result.verdict is not DedupeVerdict.DUPLICATE:
471
+ running_open.append(
472
+ {"number": None, "title": compose_finding_issue_title(finding)}
473
+ )
474
+ return results
475
+
476
+
419
477
  def dedupe_finding(
420
478
  finding: Finding,
421
479
  open_issues: list[dict],
@@ -548,7 +606,11 @@ def build_exploration_briefing(
548
606
  "When done, end your final message with a fenced "
549
607
  f"```{FINDINGS_FENCE}``` block containing a JSON array of finding "
550
608
  "objects, each with: title, expected, actual, repro, evidence, "
551
- "suspected_repo (the app or its UI framework), captures (list of "
609
+ "suspected_repo (the repo the FIX belongs in — the app, its UI "
610
+ "framework, e.g. quadraui, OR the coordinator tooling itself, e.g. "
611
+ "claude-coordinator, if the bug is actually in this bugbash driver "
612
+ "or its WSL/native bridge rather than in the app under test), "
613
+ "captures (list of "
552
614
  "capture paths/descriptions, may be empty). An empty array means "
553
615
  "zero findings this round.",
554
616
  ]
@@ -700,6 +762,24 @@ class FilingResult:
700
762
  preview_body: str | None = None
701
763
 
702
764
 
765
+ def finding_target_repo(finding: Finding) -> str:
766
+ """Which repo a finding's issue should be filed into (#3546 requirement
767
+ 2): :attr:`Finding.suspected_repo` when the worker reported one, else
768
+ *finding.repo* (the app the lane actually ran against) as the fallback.
769
+
770
+ Three coord/win-native-driver/WSL-bridge bugs from the first real
771
+ vimcode bugbash run were filed (and queued) in vimcode anyway, where no
772
+ worker could ever fix them, because filing unconditionally targeted
773
+ *finding.repo*. ``suspected_repo`` already carries the worker's best
774
+ guess at the actually-at-fault repo (the app itself, its UI framework,
775
+ or coord's own driver/bridge — see :func:`build_exploration_briefing`)
776
+ and defaults to *repo* in :func:`_finding_from_entry` when a lane
777
+ worker doesn't name one explicitly, so this is a one-line fallback, not
778
+ a guess of its own.
779
+ """
780
+ return finding.suspected_repo or finding.repo
781
+
782
+
703
783
  def file_finding(
704
784
  finding: Finding,
705
785
  dedupe: DedupeResult,
@@ -720,6 +800,11 @@ def file_finding(
720
800
  success, queued through ``coord drive-queue add --machine
721
801
  <lane.machine>``.
722
802
 
803
+ Both calls target :func:`finding_target_repo` (#3546) — NOT always
804
+ *finding.repo* — so a finding whose ``suspected_repo`` names coord's
805
+ own driver/bridge or the app's UI framework lands where a worker can
806
+ actually fix it, rather than in the app repo where nobody can.
807
+
723
808
  ``dry_run=True`` skips BOTH calls entirely and returns a preview —
724
809
  this is the sole mechanism backing "a dry run files nothing": there is
725
810
  no code path from ``dry_run=True`` to the runner being invoked.
@@ -732,6 +817,7 @@ def file_finding(
732
817
  filed=False, queued=False, issue_number=dedupe.matched_number,
733
818
  )
734
819
 
820
+ target_repo = finding_target_repo(finding)
735
821
  title = compose_finding_issue_title(finding)
736
822
  body = format_bug_report(
737
823
  expected=finding.expected,
@@ -755,7 +841,7 @@ def file_finding(
755
841
 
756
842
  create_out = runner(
757
843
  [
758
- "issue", "create", finding.repo,
844
+ "issue", "create", target_repo,
759
845
  "--title", title,
760
846
  "--expected", finding.expected,
761
847
  "--actual", finding.actual,
@@ -771,7 +857,7 @@ def file_finding(
771
857
  issue_number = int(match.group(1))
772
858
 
773
859
  runner(
774
- ["drive-queue", "add", finding.repo, str(issue_number), "--machine", lane.machine]
860
+ ["drive-queue", "add", target_repo, str(issue_number), "--machine", lane.machine]
775
861
  )
776
862
 
777
863
  return FilingResult(
@@ -811,6 +897,14 @@ class RoundReport:
811
897
  filings: list[FilingResult] = field(default_factory=list)
812
898
  lane_cost: dict[str, float] = field(default_factory=dict)
813
899
  skipped_lanes: list[str] = field(default_factory=list)
900
+ #: ``{platform: reason}`` for every entry in :attr:`skipped_lanes`
901
+ #: (#3546) — a skip must be as explainable as a failure or an
902
+ #: unavailability, never a bare platform name with no reason attached.
903
+ #: Currently populated with the per-lane cost-cap detail (the only
904
+ #: engine-level skip reason today); kept as its own dict (rather than
905
+ #: folded into ``skipped_lanes`` itself) so ``skipped_lanes``'s existing
906
+ #: ``list[str]`` shape — already read by callers — never has to change.
907
+ skip_reasons: dict[str, str] = field(default_factory=dict)
814
908
  #: Findings this round that were NOT duplicates of an already-tracked
815
909
  #: open issue — i.e. what actually moved the round-cap/zero-findings
816
910
  #: termination decision. Computed from the SAME dedupe verdicts stored
@@ -886,6 +980,25 @@ class RoundReport:
886
980
  set(self.lane_failures) | set(self.unavailable_lanes)
887
981
  )
888
982
 
983
+ @property
984
+ def all_lanes_skipped(self) -> bool:
985
+ """``True`` when at least one lane was skipped this round (its
986
+ per-lane cost cap was already blown) AND NOT A SINGLE lane was
987
+ actually explored (#3546) — i.e. the round asked nothing, got no
988
+ answer from anyone, yet :attr:`new_count` still reads ``0`` the same
989
+ way a genuine clean pass does.
990
+
991
+ The first real vimcode bugbash run's round 4 skipped every
992
+ configured lane this way and the CLI still printed
993
+ ``terminated='zero_findings'`` — a release gate reading that output
994
+ would conclude "last bugbash clean" about a round that tested
995
+ nothing at all. Distinct from :attr:`all_explored_lanes_failed` /
996
+ :attr:`all_explored_lanes_unavailable_or_failed`, both of which
997
+ require ``explored_lanes`` to be non-empty (a lane that was asked
998
+ and answered badly) — this property is specifically the "nobody was
999
+ even asked" case."""
1000
+ return bool(self.skipped_lanes) and not self.explored_lanes
1001
+
889
1002
 
890
1003
  @dataclass
891
1004
  class BugbashReport:
@@ -949,17 +1062,24 @@ def run_bugbash(
949
1062
 
950
1063
  Each round: every lane is explored (unless it has already exceeded
951
1064
  ``cost_cap_per_lane``, in which case it is skipped and recorded in
952
- ``skipped_lanes`` — never silently dropped), findings are deduped
953
- against a FRESH fetch of open/closed issues (so a finding filed earlier
954
- in the SAME run is already visible and won't be re-filed next round),
955
- and non-duplicates are filed via :func:`file_finding` — gated by
956
- *confirm* for the first ``config.confirm_rounds`` rounds when not a dry
957
- run. Termination is checked AFTER filing, from the round's own observed
958
- ``new_count``/cost, never inferred from "no exception was raised":
1065
+ ``skipped_lanes``/``skip_reasons`` — never silently dropped), findings
1066
+ are deduped via :func:`_dedupe_round_findings` against a FRESH fetch of
1067
+ open/closed issues MERGED with every issue THIS RUN has already filed
1068
+ (#3546: a finding filed earlier in the same run — this round or an
1069
+ earlier one — must be recognised by its real issue number, not just by
1070
+ whatever a fresh ``gh issue list`` happens to already reflect, and two
1071
+ lanes reporting the same bug in the SAME round must collapse to one
1072
+ filing too), and non-duplicates are filed via :func:`file_finding` —
1073
+ gated by *confirm* for the first ``config.confirm_rounds`` rounds when
1074
+ not a dry run. Termination is checked AFTER filing, from the round's own
1075
+ observed ``new_count``/cost, never inferred from "no exception was
1076
+ raised":
959
1077
 
960
1078
  - ``"zero_findings"`` — this round's non-duplicate finding count is 0,
961
- AND at least one explored lane actually completed its checklist
962
- (neither ``RoundReport.all_explored_lanes_failed`` nor
1079
+ AND at least one lane was actually explored this round (not every
1080
+ lane was skipped on its cost cap — ``RoundReport.all_lanes_skipped``
1081
+ is ``False``), AND that explored lane actually completed its
1082
+ checklist (neither ``RoundReport.all_explored_lanes_failed`` nor
963
1083
  ``RoundReport.all_explored_lanes_unavailable_or_failed`` is ``True``),
964
1084
  AND no lane reported a protocol error (``RoundReport
965
1085
  .protocol_error_lanes`` is empty) — a genuine observed clean pass.
@@ -979,13 +1099,16 @@ def run_bugbash(
979
1099
  .protocol_error_lanes`` for which lane and why.
980
1100
  - ``"lanes_unavailable"`` — this round's non-duplicate finding count is
981
1101
  ALSO 0, no lane came back a dispatch/poll/log failure or a protocol
982
- error, but every lane explored this round reported its GUI session/
983
- display unavailable (#3510: locked or absent, e.g. a locked dell64) —
984
- a different reason from ``"lane_failure"`` (the explorer DID run and
985
- DID get a verified answer, it's just "the host is locked", not "I
986
- don't know"), and still not a clean pass either, since nothing was
987
- actually exercised against the app. Check ``BugbashReport
988
- .rounds[-1].unavailable_lanes`` for which host needs unlocking.
1102
+ error, and either (a) every lane explored this round reported its GUI
1103
+ session/display unavailable (#3510: locked or absent, e.g. a locked
1104
+ dell64), or (b) EVERY configured lane was skipped on its cost cap and
1105
+ none was explored at all this round (#3546: a round that asked
1106
+ nothing must never read as a clean pass either) — a different reason
1107
+ from ``"lane_failure"`` (the explorer DID run and DID get a verified
1108
+ answer, or nothing was even asked), and still not a clean pass either,
1109
+ since nothing was actually exercised against the app. Check
1110
+ ``BugbashReport.rounds[-1].unavailable_lanes``/``skip_reasons`` for
1111
+ which host needs unlocking or budget needs raising.
989
1112
  - ``"cost_cap"`` — cumulative cost has reached ``cost_cap_total``.
990
1113
  - ``"round_cap"`` — ``config.max_rounds`` rounds ran without either of
991
1114
  the above firing.
@@ -995,6 +1118,17 @@ def run_bugbash(
995
1118
  total_cost = 0.0
996
1119
  rounds: list[RoundReport] = []
997
1120
  reason = "round_cap"
1121
+ # #3546: every issue THIS RUN has actually filed into config.repo,
1122
+ # across every round so far — consulted alongside each round's FRESH
1123
+ # open-issues fetch so a finding matching an issue this run itself
1124
+ # already created reads as a duplicate by NUMBER, never depending on a
1125
+ # `gh issue list` snapshot having caught up with this process's own
1126
+ # recent write. `run_filed_by_title` is the same data keyed for O(1)
1127
+ # resolution when a within-round duplicate (see
1128
+ # `_dedupe_round_findings`) needs its placeholder `matched_number=None`
1129
+ # upgraded to the sibling's real number once that sibling is filed.
1130
+ run_filed_issues: list[dict] = []
1131
+ run_filed_by_title: dict[str, int] = {}
998
1132
 
999
1133
  for round_num in range(1, config.max_rounds + 1):
1000
1134
  report = RoundReport(round_num=round_num)
@@ -1002,6 +1136,10 @@ def run_bugbash(
1002
1136
  for lane in config.lanes:
1003
1137
  if lane_cost[lane.platform] >= config.cost_cap_per_lane:
1004
1138
  report.skipped_lanes.append(lane.platform)
1139
+ report.skip_reasons[lane.platform] = (
1140
+ f"cumulative cost {lane_cost[lane.platform]:.2f} already "
1141
+ f">= per-lane cap {config.cost_cap_per_lane:.2f}"
1142
+ )
1005
1143
  continue
1006
1144
  outcome = explorer(lane, round_num)
1007
1145
  lane_cost[lane.platform] += outcome.cost
@@ -1032,15 +1170,21 @@ def run_bugbash(
1032
1170
  # finding disappear and pass the #3488 release gate).
1033
1171
  report.protocol_error_lanes[lane.platform] = outcome.protocol_error
1034
1172
 
1035
- open_issues = open_issues_fetcher(config.repo)
1173
+ # #3546: merge the fresh fetch with every issue THIS RUN has already
1174
+ # filed — a finding matching one of this run's own earlier filings
1175
+ # must be recognised by number even if the fresh fetch hasn't (yet)
1176
+ # caught up with this process's own recent write.
1177
+ open_issues = list(open_issues_fetcher(config.repo)) + run_filed_issues
1036
1178
  closed_issues = closed_issues_fetcher(config.repo)
1037
1179
 
1038
1180
  # Dedupe every finding exactly once (one question, one answer) —
1039
1181
  # everything below (the confirm gate's candidate list, new_count,
1040
1182
  # and the actual filing decision) reads off this SAME verdict per
1041
- # finding rather than re-asking dedupe_finding with a chance to
1042
- # disagree with itself.
1043
- dedupes = [dedupe_finding(f, open_issues, closed_issues) for f in report.findings]
1183
+ # finding rather than re-asking dedupe with a chance to disagree
1184
+ # with itself. `_dedupe_round_findings` also catches two lanes
1185
+ # reporting the same bug in THIS round against each other, not just
1186
+ # against issues that existed before the round started.
1187
+ dedupes = _dedupe_round_findings(report.findings, open_issues, closed_issues)
1044
1188
 
1045
1189
  require_confirm = (not config.dry_run) and round_num <= config.confirm_rounds
1046
1190
  candidates = [
@@ -1071,17 +1215,39 @@ def run_bugbash(
1071
1215
  )
1072
1216
  )
1073
1217
  continue
1218
+ if dedupe.verdict is DedupeVerdict.DUPLICATE and dedupe.matched_number is None:
1219
+ # #3546: a within-round duplicate from `_dedupe_round_findings`
1220
+ # — its sibling finding may have already been filed earlier
1221
+ # in THIS loop (in which case its real issue number is now in
1222
+ # `run_filed_by_title`). Resolve it so the report/CLI shows
1223
+ # the real number instead of a permanent "duplicate of
1224
+ # #None".
1225
+ resolved = run_filed_by_title.get(dedupe.matched_title or "")
1226
+ if resolved is not None:
1227
+ dedupe = DedupeResult(
1228
+ verdict=dedupe.verdict, matched_number=resolved,
1229
+ matched_title=dedupe.matched_title, score=dedupe.score,
1230
+ )
1074
1231
  # An unresolvable lane (finding.platform not in this run's
1075
1232
  # config.lanes) is only a problem when it would actually be
1076
1233
  # queued — file_finding raises in that case, never silently
1077
1234
  # drops the machine target (#2096: a gate must be able to fail).
1078
1235
  result = file_finding(finding, dedupe, lane, runner, dry_run=config.dry_run)
1079
1236
  report.filings.append(result)
1237
+ if result.filed and result.issue_number is not None:
1238
+ # Only track filings that landed in config.repo's own
1239
+ # namespace — a finding routed elsewhere via
1240
+ # `finding_target_repo` (#3546 requirement 2) dedupes
1241
+ # against THAT repo's issues, not this one's.
1242
+ if finding_target_repo(finding) == config.repo:
1243
+ filed_title = compose_finding_issue_title(finding)
1244
+ run_filed_issues.append({"number": result.issue_number, "title": filed_title})
1245
+ run_filed_by_title[filed_title] = result.issue_number
1080
1246
 
1081
1247
  rounds.append(report)
1082
1248
 
1083
1249
  if report.new_count == 0:
1084
- # #2096/#3517: "zero findings" is only a genuine clean-pass
1250
+ # #2096/#3517/#3546: "zero findings" is only a genuine clean-pass
1085
1251
  # verdict when at least one lane was actually verified to have
1086
1252
  # RUN THE CHECKLIST this round AND every lane that did complete
1087
1253
  # produced a trustworthy report. A round where every explored
@@ -1092,13 +1258,15 @@ def run_bugbash(
1092
1258
  # below since a bad answer is a stronger "don't trust this round"
1093
1259
  # signal than a lane simply being locked out; a round where every
1094
1260
  # explored lane instead reported its session/display unavailable
1095
- # (#3510 — locked or absent, never a dispatch failure) gets its
1096
- # own distinct "lanes_unavailable" reason last.
1261
+ # (#3510 — locked or absent, never a dispatch failure), OR every
1262
+ # configured lane was skipped on its cost cap with NONE explored
1263
+ # at all (#3546), gets the same "lanes_unavailable" reason —
1264
+ # neither is a verified clean pass.
1097
1265
  if report.all_explored_lanes_failed:
1098
1266
  reason = "lane_failure"
1099
1267
  elif report.protocol_error_lanes:
1100
1268
  reason = "protocol_error"
1101
- elif report.all_explored_lanes_unavailable_or_failed:
1269
+ elif report.all_explored_lanes_unavailable_or_failed or report.all_lanes_skipped:
1102
1270
  reason = "lanes_unavailable"
1103
1271
  else:
1104
1272
  reason = "zero_findings"
@@ -50,6 +50,7 @@ from coord.bugbash import (
50
50
  ExploreOutcome,
51
51
  build_exploration_briefing,
52
52
  discover_lanes,
53
+ finding_target_repo,
53
54
  parse_findings_block,
54
55
  run_bugbash,
55
56
  subprocess_coord_runner,
@@ -228,6 +229,11 @@ def _print_round(report: BugbashReport) -> None:
228
229
  f"{r.new_count} new/regression, {sum(1 for f in r.filings if f.filed)} filed"
229
230
  + (f" (lanes skipped: {', '.join(r.skipped_lanes)})" if r.skipped_lanes else "")
230
231
  )
232
+ # #3546: a skip must be as explainable as a lane failure/
233
+ # unavailability — never a bare platform name with no reason.
234
+ for platform in r.skipped_lanes:
235
+ reason = r.skip_reasons.get(platform, "no reason recorded")
236
+ click.secho(f" lane SKIPPED ({platform}): {reason}", fg="yellow")
231
237
  # #2096: a lane failure must be as visible as a filed finding — never
232
238
  # let a fleet-wide dispatch outage hide behind a quiet "0 finding(s)"
233
239
  # line that reads identically to a genuinely clean round.
@@ -241,12 +247,18 @@ def _print_round(report: BugbashReport) -> None:
241
247
  click.secho(f" lane PROTOCOL ERROR ({platform}): {note}", fg="red")
242
248
  for f in r.filings:
243
249
  incomplete = " [INCOMPLETE REPORT]" if f.finding.incomplete else ""
250
+ # #3546: a finding routed by `suspected_repo` away from the app
251
+ # repo this round explored must say so here — an operator
252
+ # scanning "filed+queued: #42" has no way to tell it landed in
253
+ # coord's own repo rather than the app's without this.
254
+ target_repo = finding_target_repo(f.finding)
255
+ routed = f" [{target_repo}]" if target_repo != f.finding.repo else ""
244
256
  if f.filed:
245
- click.echo(f" filed+queued: #{f.issue_number} — {f.finding.title}{incomplete}")
257
+ click.echo(f" filed+queued: #{f.issue_number}{routed} — {f.finding.title}{incomplete}")
246
258
  elif f.verdict.value == "duplicate":
247
- click.echo(f" duplicate of #{f.issue_number}: {f.finding.title}{incomplete}")
259
+ click.echo(f" duplicate of #{f.issue_number}{routed}: {f.finding.title}{incomplete}")
248
260
  elif f.preview_title is not None:
249
- click.echo(f" would file ({f.verdict.value}): {f.preview_title}{incomplete}")
261
+ click.echo(f" would file ({f.verdict.value}){routed}: {f.preview_title}{incomplete}")
250
262
 
251
263
 
252
264
  @click.command(
@@ -1108,8 +1108,14 @@ def run_issue_activity(
1108
1108
  # `(generated_at, generated_at)`. `drive_queue` has no `completed_at` and
1109
1109
  # `coord/drive_queue.py` emits no audit events, so there is no data source
1110
1110
  # for a queue *history* report — see this issue's "Out of scope".
1111
+ #
1112
+ # #1909: the rows are ordered by LIFECYCLE BAND, not by raw `position` — see
1113
+ # `_drive_queue_lifecycle_sort_key` below. `band` is a derived display column
1114
+ # (not a `drive_queue` row field) naming which of the three bands a row fell
1115
+ # into, so a client never has to infer it from `state` alone.
1111
1116
 
1112
1117
  DRIVE_QUEUE_STATUS_COLUMNS = [
1118
+ "band",
1113
1119
  "position",
1114
1120
  "repo",
1115
1121
  "issue",
@@ -1128,6 +1134,12 @@ DRIVE_QUEUE_STATUS_COLUMNS = [
1128
1134
 
1129
1135
  # One entry per DRIVE_QUEUE_STATUS_COLUMNS entry, same order (#1760).
1130
1136
  DRIVE_QUEUE_STATUS_COLUMN_META = [
1137
+ # #1909: the band an entry's row was sorted into — "terminal" (done and
1138
+ # the other states in `TERMINAL_QUEUE_STATES`), "running", or "pending"
1139
+ # (everything still waiting to launch). Named distinctly from `state`
1140
+ # because several raw states fold into one band (`done`/`merged-partial`/
1141
+ # `blocked`/`failed` all read `terminal`).
1142
+ ColumnMeta(id="band", label="Band", kind="enum"),
1131
1143
  ColumnMeta(id="position", label="Pos", kind="int", align="right"),
1132
1144
  ColumnMeta(id="repo", label="Repo", kind="text"),
1133
1145
  ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
@@ -1151,6 +1163,70 @@ DRIVE_QUEUE_STATUS_COLUMN_META = [
1151
1163
  # attempt is the thing an operator most wants shouted at them.
1152
1164
  _RETRIED_ATTEMPTS_THRESHOLD = 1
1153
1165
 
1166
+ # #1909: the three lifecycle bands, in display order. "terminal" (done and
1167
+ # the rest of `TERMINAL_QUEUE_STATES`) sorts first, then "running", then
1168
+ # "pending" — literally the order the issue names them in, not "what the
1169
+ # operator probably cares about most" (that question belongs to #1866's
1170
+ # live Queue panel, not this report).
1171
+ _LIFECYCLE_BAND_RANK = {"terminal": 0, "running": 1, "pending": 2}
1172
+
1173
+
1174
+ def _drive_queue_lifecycle_band(
1175
+ state: str, terminal_states: frozenset[str], running_state: str
1176
+ ) -> str:
1177
+ """The #1909 band label for one row's raw ``state``.
1178
+
1179
+ Always one of ``"terminal"``/``"running"``/``"pending"`` — never
1180
+ anything else — so a client can switch on it exhaustively without a
1181
+ fallback case. ``hold_state`` (a fired deploy gate) is deliberately NOT
1182
+ consulted here: it is orthogonal to ``state`` (see `coord/drive_queue.py`
1183
+ around `HOLD_FIRED`) — a held entry's `state` stays `waiting`, so it
1184
+ already lands in `pending` without any extra check, which is exactly
1185
+ the issue's "waiting (and any held)" wording.
1186
+ """
1187
+ if state == running_state:
1188
+ return "running"
1189
+ if state in terminal_states:
1190
+ return "terminal"
1191
+ return "pending"
1192
+
1193
+
1194
+ def _drive_queue_lifecycle_sort_key(row: Mapping[str, Any]) -> tuple[int, float, int]:
1195
+ """#1909's row ordering: ``(band rank, recency/0, position)``.
1196
+
1197
+ * **terminal** — most-recently-finished first. The recency proxy is
1198
+ whichever of ``reason_at`` / ``launched_at`` / ``enqueued_at`` is
1199
+ present, in that priority. ``reason_at`` is stamped by
1200
+ ``_update_drive_queue_entry_local`` on every ``last_reason`` write, and
1201
+ every call site in ``coord/drive_queue.py`` that flips a row terminal
1202
+ writes ``last_reason`` in the SAME update (e.g. every
1203
+ ``_merge_landed_state`` caller) — so ``reason_at`` reads as "when this
1204
+ row last changed", which for a terminal row IS when it finished.
1205
+ Negated so the largest (most recent) timestamp sorts first; a row
1206
+ with none of the three (predates the columns) falls back to ``0.0``,
1207
+ the oldest possible reading, and ties within that are broken by
1208
+ ``position`` descending (the more recently enqueued of two
1209
+ equally-undated rows is still the newer one).
1210
+ * **running** — no ordering requirement from the issue; broken by
1211
+ ``position`` ascending for determinism (typically a single row).
1212
+ * **pending** — ``position`` ascending, exactly the order
1213
+ ``plan_tick``'s launch walk (`_resolve_prereqs` in
1214
+ `coord/drive_queue.py`) will reach them. This is the band the issue
1215
+ calls "the important one".
1216
+ """
1217
+ band = row["band"]
1218
+ position = int(row["position"])
1219
+ if band == "terminal":
1220
+ recency = row.get("reason_at")
1221
+ if recency is None:
1222
+ recency = row.get("launched_at")
1223
+ if recency is None:
1224
+ recency = row.get("enqueued_at")
1225
+ if recency is None:
1226
+ recency = 0.0
1227
+ return (_LIFECYCLE_BAND_RANK[band], -float(recency), -position)
1228
+ return (_LIFECYCLE_BAND_RANK[band], 0.0, position)
1229
+
1154
1230
 
1155
1231
  def fold_drive_queue_status(
1156
1232
  entries: Iterable[Mapping[str, Any]],
@@ -1167,21 +1243,42 @@ def fold_drive_queue_status(
1167
1243
  caller's clock reading, reused verbatim for both ends of ``window`` since
1168
1244
  a live snapshot has no meaningful range.
1169
1245
 
1170
- ``entries`` arrives pre-ordered (``list_drive_queue`` is
1171
- ``ORDER BY position, id``) — this fold does not re-sort.
1246
+ ``entries`` arrives pre-ordered (``list_drive_queue`` is ``ORDER BY
1247
+ position, id``), but **this fold DOES re-sort** (#1909) — deliberately
1248
+ relaxing the "never re-sorts" contract this docstring used to state.
1249
+ Raw `position` order interleaves finished work with what hasn't run
1250
+ yet, which reads as noise (see the issue's own reproduction). Output
1251
+ rows are grouped into three lifecycle bands instead — terminal (done
1252
+ and the rest of `TERMINAL_QUEUE_STATES`, most-recently-finished first),
1253
+ running, then pending (everything else, ascending `position` — the
1254
+ exact order `plan_tick`'s launch walk, `_resolve_prereqs` in
1255
+ `coord/drive_queue.py`, will reach them). See
1256
+ :func:`_drive_queue_lifecycle_sort_key` for the exact key. Each row
1257
+ also carries a derived ``band`` column naming which band it landed in.
1172
1258
  """
1259
+ from coord.drive_queue import ( # noqa: PLC0415
1260
+ STATE_BLOCKED,
1261
+ STATE_DONE,
1262
+ STATE_FAILED,
1263
+ STATE_RUNNING,
1264
+ STATE_WAITING,
1265
+ TERMINAL_QUEUE_STATES,
1266
+ )
1267
+
1173
1268
  title_map = dict(titles or {})
1174
1269
  rows: list[dict[str, Any]] = []
1175
1270
  for entry in entries:
1176
1271
  repo = str(entry.get("repo_name") or "")
1177
1272
  issue = int(entry.get("issue_number") or 0)
1273
+ state = entry.get("state") or ""
1178
1274
  rows.append(
1179
1275
  {
1276
+ "band": _drive_queue_lifecycle_band(state, TERMINAL_QUEUE_STATES, STATE_RUNNING),
1180
1277
  "position": int(entry.get("position") or 0),
1181
1278
  "repo": repo,
1182
1279
  "issue": issue,
1183
1280
  "title": title_map.get((repo, issue)),
1184
- "state": entry.get("state") or "",
1281
+ "state": state,
1185
1282
  "machine": entry.get("machine") or "",
1186
1283
  "attempts": int(entry.get("attempts") or 0),
1187
1284
  "deferrals": int(entry.get("deferrals") or 0),
@@ -1207,19 +1304,16 @@ def fold_drive_queue_status(
1207
1304
  }
1208
1305
  )
1209
1306
 
1307
+ # #1909: lifecycle-band order, not the raw `position`/`id` order
1308
+ # `entries` arrived in — see `_drive_queue_lifecycle_sort_key`. `position`
1309
+ # is unique per entry, so the key never actually ties; `sort`'s stability
1310
+ # only matters if a future band grows a coarser key.
1311
+ rows.sort(key=_drive_queue_lifecycle_sort_key)
1312
+
1210
1313
  notes: list[str] = []
1211
1314
  if not rows:
1212
1315
  notes.append("The drive queue is empty.")
1213
1316
  else:
1214
- from coord.drive_queue import ( # noqa: PLC0415
1215
- STATE_BLOCKED,
1216
- STATE_DONE,
1217
- STATE_FAILED,
1218
- STATE_RUNNING,
1219
- STATE_WAITING,
1220
- TERMINAL_QUEUE_STATES,
1221
- )
1222
-
1223
1317
  counts: dict[str, int] = {}
1224
1318
  for r in rows:
1225
1319
  counts[r["state"]] = counts.get(r["state"], 0) + 1
@@ -4604,11 +4698,12 @@ DRIVE_QUEUE_STATUS = ReportDef(
4604
4698
  id="drive-queue-status",
4605
4699
  title="Drive Queue Status",
4606
4700
  description=(
4607
- "A live snapshot of the drive queue — one row per queued entry in "
4608
- "run order, with its state, machine pin, attempts/deferrals and the "
4609
- "tick's own last_reason. A snapshot, not a history: `drive_queue` "
4610
- "has no `completed_at`, so this shows what is queued now, not what "
4611
- "the queue has processed."
4701
+ "A live snapshot of the drive queue — one row per queued entry, "
4702
+ "grouped by lifecycle band (terminal, then running, then pending in "
4703
+ "the order it will actually run), with its state, machine pin, "
4704
+ "attempts/deferrals and the tick's own last_reason. A snapshot, not "
4705
+ "a history: `drive_queue` has no `completed_at`, so this shows what "
4706
+ "is queued now, not what the queue has processed."
4612
4707
  ),
4613
4708
  params=(
4614
4709
  ReportParam(