code-coordinator 0.5.572__tar.gz → 0.5.574__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.572 → code_coordinator-0.5.574}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/bugbash.py +196 -28
  5. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/bugbash.py +15 -3
  6. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/win_native_driver.py +77 -1
  7. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_bugbash.py +151 -0
  8. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_win_native_driver.py +190 -0
  9. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.github/workflows/test.yml +0 -0
  21. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/.gitignore +0 -0
  22. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/CLAUDE.md +0 -0
  23. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/GOAL.md +0 -0
  24. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/LICENSE +0 -0
  25. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/MANIFEST.in +0 -0
  26. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/README.md +0 -0
  27. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/SOURCES.txt +0 -0
  28. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/scm_file_list.json +0 -0
  32. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/backup.py +0 -0
  47. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/claude_setup_token.py +0 -0
  61. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/client.py +0 -0
  63. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/codegen.py +0 -0
  64. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/backup.py +0 -0
  70. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/ci.py +0 -0
  72. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/codegen.py +0 -0
  73. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/dr.py +0 -0
  76. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/machine.py +0 -0
  83. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/merge.py +0 -0
  84. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/milestone.py +0 -0
  85. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/plan_followup.py +0 -0
  86. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/plans.py +0 -0
  87. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/portal.py +0 -0
  88. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/pr.py +0 -0
  89. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/release.py +0 -0
  90. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/repo.py +0 -0
  91. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/report.py +0 -0
  92. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/review.py +0 -0
  93. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/scorecard.py +0 -0
  94. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/sessions.py +0 -0
  95. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/setup.py +0 -0
  96. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/status.py +0 -0
  97. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/store_migrate.py +0 -0
  98. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/config.py +0 -0
  103. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/confirm_test.py +0 -0
  105. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/conflict_fix.py +0 -0
  106. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dao.py +0 -0
  107. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/__init__.py +0 -0
  108. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/fixture.py +0 -0
  109. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/index.html +0 -0
  110. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/reports.html +0 -0
  111. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/db.py +0 -0
  114. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/events.py +0 -0
  155. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/gtk_native_driver.py +0 -0
  171. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/local_machine_identity.py +0 -0
  192. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/plan_usage.py +0 -0
  193. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/pr_churn.py +0 -0
  194. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/release_cordon.py +0 -0
  195. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/repo_state.py +0 -0
  196. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/spawned_coord.py +0 -0
  197. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/stalled_pipeline.py +0 -0
  198. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/timer_active.py +0 -0
  199. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/toolchain.py +0 -0
  200. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/unit_drift.py +0 -0
  201. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/unit_enablement.py +0 -0
  202. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/wedged_drive_queue.py +0 -0
  203. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/checks/worktrees.py +0 -0
  204. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/cli.py +0 -0
  205. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/context.py +0 -0
  206. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/fleet_snapshot.py +0 -0
  207. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/models.py +0 -0
  208. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/pypi.py +0 -0
  209. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/registry.py +0 -0
  210. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/render.py +0 -0
  211. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/health/units.py +0 -0
  212. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/hooks.py +0 -0
  213. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/housekeeping.py +0 -0
  214. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/interactive.py +0 -0
  215. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/invariant_alarms.py +0 -0
  216. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/issue_store.py +0 -0
  217. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/issues_sync_status.py +0 -0
  218. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/liveness_auditor.py +0 -0
  219. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/mac_native_driver.py +0 -0
  220. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/machine_fault.py +0 -0
  221. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/machine_metrics.py +0 -0
  222. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/machine_onboard.py +0 -0
  223. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/machine_pause.py +0 -0
  224. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/machine_stats.py +0 -0
  225. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/merge_queue.py +0 -0
  226. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/milestone_chat.py +0 -0
  227. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/milestone_dispatch.py +0 -0
  228. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/milestone_gate.py +0 -0
  229. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/milestone_order.py +0 -0
  230. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/mock_author.py +0 -0
  231. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/models.py +0 -0
  232. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/network.py +0 -0
  233. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/new_issue_chat.py +0 -0
  234. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/__init__.py +0 -0
  235. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/baseline.py +0 -0
  236. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/cli.py +0 -0
  237. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/collect.py +0 -0
  238. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/digest.py +0 -0
  239. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/models.py +0 -0
  240. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/predicate.py +0 -0
  241. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/service.py +0 -0
  242. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/store.py +0 -0
  243. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notifier/transport.py +0 -0
  244. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/notify.py +0 -0
  245. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/openapi.py +0 -0
  246. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/overlap_fence.py +0 -0
  247. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/overlap_predict.py +0 -0
  248. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/parentage.py +0 -0
  249. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/parentage_github.py +0 -0
  250. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/pipeline.py +0 -0
  251. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/plan_parser.py +0 -0
  252. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/plans.py +0 -0
  253. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/platform_paths.py +0 -0
  254. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/portal_bridge.py +0 -0
  255. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/portal_store.py +0 -0
  256. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/portal_sync.py +0 -0
  257. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/pr_body_lint.py +0 -0
  258. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/prereqs.py +0 -0
  259. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/progress.py +0 -0
  260. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/providers/__init__.py +0 -0
  261. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/providers/base.py +0 -0
  262. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/providers/claude.py +0 -0
  263. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/providers/claude_pty.py +0 -0
  264. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/providers/opencode.py +0 -0
  265. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/queue_diagnose.py +0 -0
  266. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/reconcile.py +0 -0
  267. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/reconcile_tick.py +0 -0
  268. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/refine_chat.py +0 -0
  269. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/release_cordon.py +0 -0
  270. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/release_gate.py +0 -0
  271. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/release_propagate.py +0 -0
  272. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/release_verify.py +0 -0
  273. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/release_window.py +0 -0
  274. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/repo_dormancy.py +0 -0
  275. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/repo_edit.py +0 -0
  276. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/repo_onboard.py +0 -0
  277. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/reports.py +0 -0
  278. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/rest_schema.py +0 -0
  279. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/restart_cmd.py +0 -0
  280. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/revalidate.py +0 -0
  281. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/review.py +0 -0
  282. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/scorecard.py +0 -0
  283. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/self_health.py +0 -0
  284. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/serve_app.py +0 -0
  285. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  286. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  287. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  288. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  290. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/portal-followup/SKILL.md +0 -0
  291. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/release-now/SKILL.md +0 -0
  292. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  293. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  294. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/skills/update-issue/SKILL.md +0 -0
  295. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/smoke.py +0 -0
  296. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/smoke_tags.py +0 -0
  297. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/spend_ceiling.py +0 -0
  298. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/split_work.py +0 -0
  299. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/sql.py +0 -0
  300. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/stage_projection.py +0 -0
  301. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/state.py +0 -0
  302. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/store_migrate.py +0 -0
  303. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/store_parity.py +0 -0
  304. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/templates/deploy-cloudflare.node.yml +0 -0
  305. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/test_author.py +0 -0
  306. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/test_chat.py +0 -0
  307. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/test_orchestrator.py +0 -0
  308. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/test_report.py +0 -0
  309. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/tui_pty_driver.py +0 -0
  310. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/tui_release.py +0 -0
  311. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/uat_checks.py +0 -0
  312. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/usage.py +0 -0
  313. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/usage_limits.py +0 -0
  314. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/usage_rollup.py +0 -0
  315. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/win_native_bridge.py +0 -0
  316. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coord/worker_events.py +0 -0
  317. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/coordinator.example.yml +0 -0
  318. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/setup.cfg +0 -0
  429. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_build_worker_image_env_update.py +0 -0
  518. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cargo_cache.py +0 -0
  519. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_check_gh_argv_containment.py +0 -0
  520. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_fix.py +0 -0
  522. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_github.py +0 -0
  523. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_gitlab.py +0 -0
  524. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_parity_2091.py +0 -0
  525. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_ci_store.py +0 -0
  526. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_claim.py +0 -0
  527. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_claude_md_budget.py +0 -0
  528. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_claude_setup_token.py +0 -0
  529. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_acceptance.py +0 -0
  530. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_assign.py +0 -0
  531. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  532. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_assign_interactive_remote.py +0 -0
  533. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_assign_provider.py +0 -0
  534. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  535. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_audit.py +0 -0
  536. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_chat_continue.py +0 -0
  537. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_ci.py +0 -0
  538. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_codegen.py +0 -0
  539. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_decide.py +0 -0
  540. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_capability_rules.py +0 -0
  541. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_config_provenance.py +0 -0
  542. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_forge_availability.py +0 -0
  543. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_graph.py +0 -0
  544. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_self.py +0 -0
  545. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_diagnose_test_coverage.py +0 -0
  546. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_doctor.py +0 -0
  547. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_doctor_config_free_1801.py +0 -0
  548. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  549. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  550. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_drive.py +0 -0
  551. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_drive_queue.py +0 -0
  552. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_escalate.py +0 -0
  553. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_fix_headless_review.py +0 -0
  554. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_gate_a.py +0 -0
  555. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_install_drift.py +0 -0
  556. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_install_skills.py +0 -0
  557. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_issue_comment.py +0 -0
  558. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_issue_create_label.py +0 -0
  559. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_issue_reopen.py +0 -0
  560. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_issue_view_list.py +0 -0
  561. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_issues.py +0 -0
  562. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_merge.py +0 -0
  563. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_assign.py +0 -0
  564. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_capture.py +0 -0
  565. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_chat_add_child.py +0 -0
  566. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_dispatch.py +0 -0
  567. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_gate_b.py +0 -0
  568. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_gate_c.py +0 -0
  569. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_order.py +0 -0
  570. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  571. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_milestone_ship.py +0 -0
  572. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_network.py +0 -0
  573. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_new_issue_chat.py +0 -0
  574. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_plans.py +0 -0
  575. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_portal.py +0 -0
  576. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_pr.py +0 -0
  577. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_pull_artifact.py +0 -0
  578. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_queue.py +0 -0
  579. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_reattach_sessions.py +0 -0
  580. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_refine_board.py +0 -0
  581. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_release_preflight.py +0 -0
  582. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_release_propagate.py +0 -0
  583. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_release_window.py +0 -0
  584. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_repo_2220.py +0 -0
  585. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  586. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_scorecard.py +0 -0
  587. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_serve_store_backend_3084.py +0 -0
  588. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_set_review_findings.py +0 -0
  589. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_advisory_terminal.py +0 -0
  590. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_contested_tag.py +0 -0
  591. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_invariant_alarms.py +0 -0
  592. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_machine_fault.py +0 -0
  593. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_merge_queue.py +0 -0
  594. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_provider.py +0 -0
  595. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_retried_3340.py +0 -0
  596. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_review_finalizing.py +0 -0
  597. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_supervisor_3366.py +0 -0
  598. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_test_failed_tag.py +0 -0
  599. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_status_usage_limit.py +0 -0
  600. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_sync_comments_873.py +0 -0
  601. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_test_plan.py +0 -0
  602. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_track.py +0 -0
  603. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_tui_update.py +0 -0
  604. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cli_wait.py +0 -0
  605. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_client.py +0 -0
  606. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_client_base_install.py +0 -0
  607. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_client_config_cache_atomic_3052.py +0 -0
  608. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_client_resource_migration_1946.py +0 -0
  609. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_commands_common.py +0 -0
  610. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_comments.py +0 -0
  611. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_completion_summary.py +0 -0
  612. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config.py +0 -0
  613. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_acceptance.py +0 -0
  614. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_audit.py +0 -0
  615. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_drift_check.py +0 -0
  616. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_effective.py +0 -0
  617. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_pricing.py +0 -0
  618. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  619. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_config_usage_gate.py +0 -0
  620. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_confirm_test.py +0 -0
  621. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_conflict_fix.py +0 -0
  622. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_conflict_fix_semantic.py +0 -0
  623. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  624. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test.py +0 -0
  625. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  626. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test_runner_baseline.py +0 -0
  627. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test_runner_populated_home.py +0 -0
  628. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test_runner_routing.py +0 -0
  629. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_test_runner_toolchain.py +0 -0
  630. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_uat.py +0 -0
  631. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coord_web_sse_restart_live.py +0 -0
  632. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_coordinator_machine.py +0 -0
  633. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_cross_platform_imports.py +0 -0
  634. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dao.py +0 -0
  635. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard.py +0 -0
  636. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_api.py +0 -0
  637. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_fixture.py +0 -0
  638. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_reports.py +0 -0
  639. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_server.py +0 -0
  640. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_terminal.py +0 -0
  641. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dashboard_terminal_live.py +0 -0
  642. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_db.py +0 -0
  643. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dead_end.py +0 -0
  644. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_decomposition_chat.py +0 -0
  645. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_coord_db_backup.py +0 -0
  646. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_coord_web_dist.py +0 -0
  647. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_coord_web_rollback.py +0 -0
  648. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_db_backup_unit.py +0 -0
  649. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_drive_queue_unit.py +0 -0
  650. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_failure_notify_unit.py +0 -0
  651. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_manifest.py +0 -0
  652. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_notify_unit.py +0 -0
  653. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_units_lane.py +0 -0
  654. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deploy_web_unit.py +0 -0
  655. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deprecation_telemetry.py +0 -0
  656. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_deps.py +0 -0
  657. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_diagnose.py +0 -0
  658. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dispatch.py +0 -0
  659. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dispatch_liveness.py +0 -0
  660. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dispatch_target_validation.py +0 -0
  661. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dispatch_workers.py +0 -0
  662. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dist_name.py +0 -0
  663. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_done_housekeeping.py +0 -0
  664. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dr_azure_scripts.py +0 -0
  665. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dr_promote.py +0 -0
  666. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_dr_verify.py +0 -0
  667. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive.py +0 -0
  668. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_machine_fault.py +0 -0
  669. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue.py +0 -0
  670. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_gtk_native_driver.py +0 -0
  711. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_handoff.py +0 -0
  712. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_checks.py +0 -0
  713. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_cli.py +0 -0
  714. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_cli_graph.py +0 -0
  715. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_config.py +0 -0
  716. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_context.py +0 -0
  717. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_coord_tui_ci_pin.py +0 -0
  718. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_coord_web_ci_pin.py +0 -0
  719. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_deploy_lane_facts.py +0 -0
  720. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_fix.py +0 -0
  721. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_incident_regression.py +0 -0
  722. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_issues_sync_staleness.py +0 -0
  723. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_pr_churn.py +0 -0
  724. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_pypi.py +0 -0
  725. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_registry.py +0 -0
  726. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_release_cordon_probe.py +0 -0
  727. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_timer_active.py +0 -0
  728. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_toolchain.py +0 -0
  729. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_unit_drift.py +0 -0
  730. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_unit_enablement.py +0 -0
  731. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_health_wedged_drive_queue.py +0 -0
  732. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_hooks.py +0 -0
  733. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_housekeeping.py +0 -0
  734. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_human_attended_437.py +0 -0
  735. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_init.py +0 -0
  736. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_install_agent_capabilities_3515.py +0 -0
  737. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_install_agent_venv_2911.py +0 -0
  738. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  739. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_integration.py +0 -0
  740. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive.py +0 -0
  741. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_briefing_echo.py +0 -0
  742. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_pane_log_2541.py +0 -0
  743. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_prefill_state.py +0 -0
  744. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_session_relaunch.py +0 -0
  745. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_test_verdict_backstop.py +0 -0
  746. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_token_attribution.py +0 -0
  747. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_interactive_worktree.py +0 -0
  748. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_invariant_alarms.py +0 -0
  749. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_issue_store_seam.py +0 -0
  750. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_issues_sync_status.py +0 -0
  751. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_liveness_auditor.py +0 -0
  752. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_liveness_notify.py +0 -0
  753. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_lock_contention_ratchet.py +0 -0
  754. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_mac_native_driver.py +0 -0
  755. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_machine_fault.py +0 -0
  756. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_machine_metrics.py +0 -0
  757. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_machine_onboard.py +0 -0
  758. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_machine_pause.py +0 -0
  759. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_machine_stats.py +0 -0
  760. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_merge_queue.py +0 -0
  761. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_merge_verify.py +0 -0
  762. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_milestone_chat.py +0 -0
  763. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_milestone_dispatch.py +0 -0
  764. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_milestone_gate.py +0 -0
  765. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_milestone_order.py +0 -0
  766. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_milestone_seam.py +0 -0
  767. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_mock_author.py +0 -0
  768. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_model_tiering.py +0 -0
  769. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_models.py +0 -0
  770. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_models_config_labels.py +0 -0
  771. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_needs_attention.py +0 -0
  772. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_network.py +0 -0
  773. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_new_issue_chat.py +0 -0
  774. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_next_release_tag.py +0 -0
  775. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_node_shim.py +0 -0
  776. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_baseline.py +0 -0
  777. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_cli.py +0 -0
  778. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_collect.py +0 -0
  779. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_config.py +0 -0
  780. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_drive_seam.py +0 -0
  781. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_isolation.py +0 -0
  782. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_predicate.py +0 -0
  783. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_quiet_hours.py +0 -0
  784. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notifier_service.py +0 -0
  785. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notify.py +0 -0
  786. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_notify_drain.py +0 -0
  787. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_openapi.py +0 -0
  788. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_operational_defaults.py +0 -0
  789. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_overlap_fence.py +0 -0
  790. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_overlap_predict.py +0 -0
  791. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_packaged_deploy_units.py +0 -0
  792. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_parentage.py +0 -0
  793. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_paste_landed.py +0 -0
  794. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  795. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_pipeline.py +0 -0
  796. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_plan_followup_approve_plan_command.py +0 -0
  797. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_plan_followup_pr_command.py +0 -0
  798. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_plan_followup_review_command.py +0 -0
  799. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_plan_only.py +0 -0
  800. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_plan_parser.py +0 -0
  801. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_platform_paths.py +0 -0
  802. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_portal_bridge.py +0 -0
  803. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_portal_config.py +0 -0
  804. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_portal_store.py +0 -0
  805. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_portal_sync.py +0 -0
  806. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_pr_body_lint.py +0 -0
  807. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_prereqs.py +0 -0
  808. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_production_db_guard.py +0 -0
  809. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_progress.py +0 -0
  810. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_provider_seam.py +0 -0
  811. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_providers.py +0 -0
  812. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_providers_config_labels.py +0 -0
  813. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_providers_pty.py +0 -0
  814. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_provision_core.py +0 -0
  815. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_provision_machine.py +0 -0
  816. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_py_rust_mirror_inventory.py +0 -0
  817. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_quiet_hours.py +0 -0
  818. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_quiet_hours_store_2146.py +0 -0
  819. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reap_merged_sessions.py +0 -0
  820. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reap_stale_interactive_tick.py +0 -0
  821. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile.py +0 -0
  822. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_branch.py +0 -0
  823. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_completions.py +0 -0
  824. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  825. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_merges.py +0 -0
  826. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_no_agent_record.py +0 -0
  827. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_tick.py +0 -0
  828. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reconcile_usage_limit_done.py +0 -0
  829. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_refine_chat.py +0 -0
  830. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_cordon_2101.py +0 -0
  831. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  832. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_cordon_deadlock_2240.py +0 -0
  833. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  834. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_cordon_stuck_2490.py +0 -0
  835. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_gate.py +0 -0
  836. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_propagate.py +0 -0
  837. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_propagate_threshold.py +0 -0
  838. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_roll_between_legs_2854.py +0 -0
  839. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_roll_window_handoff.py +0 -0
  840. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_unified_1242.py +0 -0
  841. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_verify.py +0 -0
  842. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_release_window.py +0 -0
  843. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_remote_auto_prune.py +0 -0
  844. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_remote_interactive_reaper.py +0 -0
  845. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_add.py +0 -0
  846. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_dormancy.py +0 -0
  847. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_edit_2220.py +0 -0
  848. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_graph_fleet_2237.py +0 -0
  849. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_max_parallel_3423.py +0 -0
  850. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_repo_onboard_2220.py +0 -0
  851. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_report_public_export.py +0 -0
  852. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_report_result_push.py +0 -0
  853. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_reports.py +0 -0
  854. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_restart_cmd.py +0 -0
  855. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_retry.py +0 -0
  856. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_retry_advisory_1606.py +0 -0
  857. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_retry_escalation_classify_3360.py +0 -0
  858. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_retry_type_1636.py +0 -0
  859. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_revalidate.py +0 -0
  860. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review.py +0 -0
  861. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_end_review_without_verdict.py +0 -0
  862. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_parse_failure_diagnostic.py +0 -0
  863. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_reaffirm.py +0 -0
  864. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_state.py +0 -0
  865. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_verdict_backstop.py +0 -0
  866. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_verdict_override_audit.py +0 -0
  867. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_verdict_relay.py +0 -0
  868. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_review_zero_commits.py +0 -0
  869. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_scoped_review_wiring.py +0 -0
  870. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_scorecard.py +0 -0
  871. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_self_health.py +0 -0
  872. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_serve.py +0 -0
  873. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_serve_app.py +0 -0
  874. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_serve_app_board_trim.py +0 -0
  875. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_serve_rest_routes.py +0 -0
  876. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_session.py +0 -0
  877. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_slice_issue_attribution.py +0 -0
  878. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_smoke.py +0 -0
  879. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  880. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_smoke_live_checkout_restore.py +0 -0
  881. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_smoke_workflow.py +0 -0
  882. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_spend_ceiling.py +0 -0
  883. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_spend_ceiling_coordinator.py +0 -0
  884. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_split.py +0 -0
  885. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_split_work.py +0 -0
  886. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_sql_dialect.py +0 -0
  887. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_sqlite_connect_ratchet.py +0 -0
  888. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stage_projection.py +0 -0
  889. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stale_busy_reviewer_697.py +0 -0
  890. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stalled_pipeline.py +0 -0
  891. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_state.py +0 -0
  892. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_state_review_findings_daemon.py +0 -0
  893. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_status_fleet_footer.py +0 -0
  894. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stop_1567.py +0 -0
  895. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_store_contract.py +0 -0
  896. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_store_migrate.py +0 -0
  897. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stuck.py +0 -0
  898. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  899. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_terminal_command.py +0 -0
  900. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_author.py +0 -0
  901. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_chat.py +0 -0
  902. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_orchestrator.py +0 -0
  903. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_report.py +0 -0
  904. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_verdict_parsing.py +0 -0
  905. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_test_verdict_transcript_floor.py +0 -0
  906. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_text_io_encoding_audit.py +0 -0
  907. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_thin_client_board_audit.py +0 -0
  908. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_thin_client_config_load_1080.py +0 -0
  909. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_thin_client_daemon_routing_906.py +0 -0
  910. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_throwaway_vm.py +0 -0
  911. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_tmux_host.py +0 -0
  912. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_tmux_session.py +0 -0
  913. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_transcript_floor.py +0 -0
  914. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_tui_pty_driver.py +0 -0
  915. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_uat_checks.py +0 -0
  916. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_usage.py +0 -0
  917. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_usage_limits.py +0 -0
  918. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_usage_rollup.py +0 -0
  919. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_venv_live_install_2121.py +0 -0
  920. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_version_single_source.py +0 -0
  921. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_watch.py +0 -0
  922. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_win_native_bridge.py +0 -0
  923. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  924. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worker_env_venv_isolation.py +0 -0
  925. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worker_events.py +0 -0
  926. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worker_image_pin_sync.py +0 -0
  927. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worker_safety.py +0 -0
  928. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worker_test_scoping.py +0 -0
  929. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worktree.py +0 -0
  930. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  931. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/tests/test_write_parity.py +0 -0
  932. {code_coordinator-0.5.572 → code_coordinator-0.5.574}/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.572
3
+ Version: 0.5.574
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.572
3
+ Version: 0.5.574
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.572",
2
+ "tag": "0.5.574",
3
3
  "distance": 0,
4
- "node": "g33ef2d84241ba2583d47d8288838f7d8729dce83",
4
+ "node": "g15888500b70e89c6ef17658b665ae3fb70f2b9e6",
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(
@@ -810,6 +810,79 @@ def _popen_command_and_cwd(command: str, cwd: str) -> tuple[str, str | None]:
810
810
  return command, (cwd or None)
811
811
 
812
812
 
813
+ #: #3544: every kwarg :meth:`Win32Calls.launch`/:meth:`~Win32Calls.launch_in_terminal`
814
+ #: must pass to ``subprocess.Popen`` so the launched ``cmd.exe`` (and whatever
815
+ #: GUI-subsystem grandchild it execs) never inherits this *process's own*
816
+ #: stdin/stdout/stderr handles.
817
+ #:
818
+ #: Without this, a plain ``subprocess.Popen(command, shell=True, cwd=...)``
819
+ #: (no ``stdin=``/``stdout=``/``stderr=``) hands the child Python's own
820
+ #: standard handles unchanged — on Windows that's an inheritance, not a
821
+ #: dup/close-on-exec situation. When this `Win32Calls` lives inside the
822
+ #: `win-native` bridge runner (:data:`coord.win_native_bridge._BRIDGE_RUNNER_SRC`,
823
+ #: a Windows-side ``python -c ...`` whose own stdout is a pipe the WSL-side
824
+ #: ``subprocess.run(capture_output=True)`` is reading), that pipe write-end
825
+ #: handle gets duplicated into the launched GUI exe. A GUI-subsystem process
826
+ #: (``vimcode.exe``) never exits on its own — a human closes the window, or a
827
+ #: spec step does — so it holds that handle open indefinitely. A pipe's
828
+ #: read end only sees EOF once *every* write-end handle is closed; with the
829
+ #: orphaned GUI exe still holding one, the WSL-side read blocks past the
830
+ #: whole bridge script's own completion, for the full
831
+ #: ``bridge_timeout``, even though the bridge runner itself finished and
832
+ #: exited normally. ``Get-Process`` then shows the launched exe still
833
+ #: running, orphaned, after the bridge has already timed out and raised.
834
+ #:
835
+ #: Redirecting all three standard streams to ``DEVNULL`` severs that
836
+ #: inheritance: the child gets its own private, already-closed-on-the-
837
+ #: parent-side handles, never a dup of this process's own pipe — nothing in
838
+ #: this driver ever reads a launched app's stdout/stderr (the whole point
839
+ #: of `win-native` is observing the real OS/window state, not console
840
+ #: text), so there is no output to lose.
841
+ #:
842
+ #: **Mechanism caveat (review finding on #3544, unresolved).** CPython's
843
+ #: own Windows ``subprocess._execute_child`` computes ``bInheritHandles``
844
+ #: as ``int(not close_fds)``, and ``close_fds`` defaults to ``True``
845
+ #: (Python 3.7+) and is never overridden anywhere in this module — so by
846
+ #: that code path alone, a bare ``Popen(command, shell=True, cwd=...)``
847
+ #: with no ``stdin=``/``stdout=``/``stderr=`` should *already* pass
848
+ #: ``bInheritHandles=False`` to ``CreateProcess``, meaning CPython's own
849
+ #: handle-inheritance bookkeeping is probably *not* the actual leak
850
+ #: mechanism. The hang itself is real and reproduced (``Get-Process``
851
+ #: showing the launched exe still running minutes after a timed-out bridge
852
+ #: call — see #3544's repro), but the likelier remaining culprit is
853
+ #: something outside CPython's control for this specific topology: the
854
+ #: bridge runner is itself started from WSL via ``wsl.exe``/interop, not a
855
+ #: plain native parent process, and WSL interop's own console/job-object
856
+ #: handling for the Windows-side process tree it creates can share or
857
+ #: re-parent handles differently than a same-OS parent/child pair would.
858
+ #:
859
+ #: This redirect is still the right thing to do regardless of which exact
860
+ #: mechanism turns out to be responsible: explicit ``DEVNULL`` handles are
861
+ #: a private pair nothing downstream can keep open, so it closes off every
862
+ #: plausible inheritance path at once rather than betting on one theory of
863
+ #: the leak being correct. Treat it as the best available fix, **not** a
864
+ #: hardware-confirmed root-cause diagnosis — it has not been re-run against
865
+ #: the issue's own two repro scripts on a real WSL<->Windows pairing
866
+ #: (dell64). ``tests/test_win_native_driver.py``'s
867
+ #: ``TestLaunchPipeInheritanceRealSubprocess`` is the closest reproduction
868
+ #: available without that hardware: a real (unmocked) OS pipe + subprocess
869
+ #: tree showing a long-lived grandchild can hold a parent's un-redirected
870
+ #: stdout pipe open past the parent's own exit, and that the real
871
+ #: ``Win32Calls.launch`` no longer does so once its grandchild's handles
872
+ #: are redirected.
873
+ #:
874
+ #: ``launch_in_terminal`` already passes ``creationflags=CREATE_NEW_CONSOLE``
875
+ #: for its spawned process, which per Windows' own docs already gives the
876
+ #: child its own console instead of sharing/inheriting the parent's — so
877
+ #: applying this redirect there too is defensive-in-depth, not evidence
878
+ #: that call site was equally exposed to the leak this fix targets.
879
+ _NO_HANDLE_INHERITANCE: dict = {
880
+ "stdin": subprocess.DEVNULL,
881
+ "stdout": subprocess.DEVNULL,
882
+ "stderr": subprocess.DEVNULL,
883
+ }
884
+
885
+
813
886
  class Win32Calls:
814
887
  """The real :class:`WinCalls` implementation — ``ctypes`` for window
815
888
  management, input injection, menu/hit-test probing and ``PrintWindow``;
@@ -838,7 +911,9 @@ class Win32Calls:
838
911
 
839
912
  def launch(self, command: str, cwd: str) -> int:
840
913
  full_command, popen_cwd = _popen_command_and_cwd(command, cwd)
841
- proc = subprocess.Popen(full_command, shell=True, cwd=popen_cwd)
914
+ proc = subprocess.Popen(
915
+ full_command, shell=True, cwd=popen_cwd, **_NO_HANDLE_INHERITANCE,
916
+ )
842
917
  return proc.pid
843
918
 
844
919
  def launch_in_terminal(self, command: str, cwd: str, terminal_app: str) -> int:
@@ -850,6 +925,7 @@ class Win32Calls:
850
925
  full_command, popen_cwd = _popen_command_and_cwd(full_command, cwd)
851
926
  proc = subprocess.Popen(
852
927
  full_command, shell=True, cwd=popen_cwd, creationflags=create_new_console,
928
+ **_NO_HANDLE_INHERITANCE,
853
929
  )
854
930
  return proc.pid
855
931