code-coordinator 0.5.642__tar.gz → 0.5.644__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 (980) hide show
  1. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.644/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent.py +116 -3
  5. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/diagnose.py +10 -1
  6. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/failure_class.py +39 -0
  7. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notify.py +9 -0
  8. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reconcile.py +73 -0
  9. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/state.py +45 -0
  10. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/COST_DISCIPLINE.md +9 -0
  11. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_base_checkout_restore.py +84 -0
  12. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_diagnose.py +66 -4
  13. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_failure_class.py +20 -0
  14. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notify.py +124 -16
  15. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke.py +75 -0
  16. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_state.py +29 -0
  17. code_coordinator-0.5.642/code_coordinator.egg-info/scm_version.json +0 -8
  18. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.gitignore +0 -0
  31. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/GOAL.md +0 -0
  33. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/LICENSE +0 -0
  34. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/README.md +0 -0
  36. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/SOURCES.txt +0 -0
  37. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/scm_file_list.json +0 -0
  41. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/top_level.txt +0 -0
  42. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/__init__.py +0 -0
  43. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/_board_mapping.py +0 -0
  44. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/acceptance.py +0 -0
  45. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/app_drive.py +0 -0
  52. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/app_drive_daemon.py +0 -0
  53. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/approved_work.py +0 -0
  54. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/backup.py +0 -0
  57. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/block_log.py +0 -0
  58. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_schema.py +0 -0
  59. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_service.py +0 -0
  60. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_wire.py +0 -0
  61. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/brain.py +0 -0
  62. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/branch_model.py +0 -0
  63. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/briefing_lessons.py +0 -0
  64. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/bugbash.py +0 -0
  66. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_fix.py +0 -0
  68. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_gitlab.py +0 -0
  70. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/claude_setup_token.py +0 -0
  73. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/cli.py +0 -0
  74. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/client.py +0 -0
  75. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/codegen.py +0 -0
  76. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/__init__.py +0 -0
  77. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/_common.py +0 -0
  78. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/acceptance.py +0 -0
  79. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/agent_ops.py +0 -0
  80. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/app_drive.py +0 -0
  81. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/audit.py +0 -0
  82. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/backup.py +0 -0
  83. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/bugbash.py +0 -0
  84. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/chat.py +0 -0
  85. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/ci.py +0 -0
  86. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/codegen.py +0 -0
  87. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dispatch.py +0 -0
  88. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dispatch_workers.py +0 -0
  89. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dr.py +0 -0
  90. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/drive.py +0 -0
  91. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/drive_queue.py +0 -0
  92. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/gate_a.py +0 -0
  93. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/gates.py +0 -0
  94. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/issues.py +0 -0
  95. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/lifecycle.py +0 -0
  96. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/machine.py +0 -0
  97. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/merge.py +0 -0
  98. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/milestone.py +0 -0
  99. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/plan_followup.py +0 -0
  100. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/plans.py +0 -0
  101. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/portal.py +0 -0
  102. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/pr.py +0 -0
  103. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/release.py +0 -0
  104. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/repo.py +0 -0
  105. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/report.py +0 -0
  106. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/review.py +0 -0
  107. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/scorecard.py +0 -0
  108. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/sessions.py +0 -0
  109. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/setup.py +0 -0
  110. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/smoke.py +0 -0
  111. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/status.py +0 -0
  112. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/store_migrate.py +0 -0
  113. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/terminal.py +0 -0
  114. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/test_gate.py +0 -0
  115. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/tui.py +0 -0
  116. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/comments.py +0 -0
  117. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/config.py +0 -0
  118. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/config_reload.py +0 -0
  119. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/confirm_test.py +0 -0
  120. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/conflict_fix.py +0 -0
  121. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dao.py +0 -0
  122. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/__init__.py +0 -0
  123. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/fixture.py +0 -0
  124. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/index.html +0 -0
  125. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/reports.html +0 -0
  126. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/server.py +0 -0
  127. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/terminal.py +0 -0
  128. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/db.py +0 -0
  129. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dead_end.py +0 -0
  130. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/decomposition_chat.py +0 -0
  131. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/README.md +0 -0
  132. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-agent.service +0 -0
  133. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-backup.service +0 -0
  134. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-backup.timer +0 -0
  135. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.service +0 -0
  136. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.sh +0 -0
  137. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.timer +0 -0
  138. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.service +0 -0
  139. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.timer +0 -0
  140. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.service +0 -0
  141. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.timer +0 -0
  142. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-failure-notify.service +0 -0
  143. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.service +0 -0
  144. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  145. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.service +0 -0
  146. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.timer +0 -0
  147. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-notify.service +0 -0
  148. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-notify.timer +0 -0
  149. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.service +0 -0
  150. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.timer +0 -0
  151. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.service +0 -0
  152. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.timer +0 -0
  153. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-serve.service +0 -0
  154. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.service +0 -0
  155. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.timer +0 -0
  156. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web.service +0 -0
  157. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy_manifest.py +0 -0
  158. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy_units.py +0 -0
  159. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deprecation_telemetry.py +0 -0
  160. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deps.py +0 -0
  161. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dirlink.py +0 -0
  162. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dispatch.py +0 -0
  163. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dispatch_liveness.py +0 -0
  164. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dist_name.py +0 -0
  165. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dr_promote.py +0 -0
  166. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dr_verify.py +0 -0
  167. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive.py +0 -0
  168. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_queue.py +0 -0
  169. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_sessions_snapshot.py +0 -0
  170. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_state.py +0 -0
  171. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/events.py +0 -0
  172. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/failure_classifier.py +0 -0
  173. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/filelock.py +0 -0
  174. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/fleet_config_health.py +0 -0
  175. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/forge_availability.py +0 -0
  176. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/freshness.py +0 -0
  177. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_a.py +0 -0
  178. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_b.py +0 -0
  179. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_snapshot.py +0 -0
  180. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gates.py +0 -0
  181. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gen_board_fixture.py +0 -0
  182. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/github_ops.py +0 -0
  183. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/github_throttle.py +0 -0
  184. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/goal.py +0 -0
  185. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/graph_health.py +0 -0
  186. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gtk_native_driver.py +0 -0
  187. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/__init__.py +0 -0
  188. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/aggregate.py +0 -0
  189. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/__init__.py +0 -0
  190. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/_ci_pin.py +0 -0
  191. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/agent_install.py +0 -0
  192. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/cargo_targets.py +0 -0
  193. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/claude_binary.py +0 -0
  194. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/config_drift.py +0 -0
  195. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  196. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/coord_web_ci_pin.py +0 -0
  197. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/deploy_lane_facts.py +0 -0
  198. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/disk.py +0 -0
  199. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_board.py +0 -0
  200. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  201. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_phantom.py +0 -0
  202. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_unit_drift.py +0 -0
  203. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/graph.py +0 -0
  204. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/graphify_cli.py +0 -0
  205. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/gui_lane_preflight.py +0 -0
  206. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/index_lock.py +0 -0
  207. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/issues_sync_staleness.py +0 -0
  208. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/local_machine_identity.py +0 -0
  209. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/plan_usage.py +0 -0
  210. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/pr_churn.py +0 -0
  211. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/release_cordon.py +0 -0
  212. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/repo_state.py +0 -0
  213. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/spawned_coord.py +0 -0
  214. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/stalled_pipeline.py +0 -0
  215. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/timer_active.py +0 -0
  216. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/toolchain.py +0 -0
  217. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/unit_drift.py +0 -0
  218. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/unit_enablement.py +0 -0
  219. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/wedged_drive_queue.py +0 -0
  220. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/worktrees.py +0 -0
  221. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/cli.py +0 -0
  222. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/context.py +0 -0
  223. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/fleet_snapshot.py +0 -0
  224. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/models.py +0 -0
  225. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/pypi.py +0 -0
  226. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/registry.py +0 -0
  227. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/render.py +0 -0
  228. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/units.py +0 -0
  229. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/hooks.py +0 -0
  230. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/housekeeping.py +0 -0
  231. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/interactive.py +0 -0
  232. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/invariant_alarms.py +0 -0
  233. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/issue_store.py +0 -0
  234. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/issues_sync_status.py +0 -0
  235. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/key_spec.py +0 -0
  236. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/liveness_auditor.py +0 -0
  237. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/mac_native_driver.py +0 -0
  238. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_fault.py +0 -0
  239. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_metrics.py +0 -0
  240. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_onboard.py +0 -0
  241. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_pause.py +0 -0
  242. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_stats.py +0 -0
  243. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/merge_queue.py +0 -0
  244. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_chat.py +0 -0
  245. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_dispatch.py +0 -0
  246. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_gate.py +0 -0
  247. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_order.py +0 -0
  248. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/mock_author.py +0 -0
  249. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/models.py +0 -0
  250. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/native_fs_wait.py +0 -0
  251. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/native_pixels.py +0 -0
  252. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/network.py +0 -0
  253. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/new_issue_chat.py +0 -0
  254. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_runner.py +0 -0
  255. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_smoke.py +0 -0
  256. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_status.py +0 -0
  257. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_store.py +0 -0
  258. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/__init__.py +0 -0
  259. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/baseline.py +0 -0
  260. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/cli.py +0 -0
  261. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/collect.py +0 -0
  262. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/digest.py +0 -0
  263. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/models.py +0 -0
  264. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/predicate.py +0 -0
  265. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/service.py +0 -0
  266. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/store.py +0 -0
  267. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/transport.py +0 -0
  268. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/openapi.py +0 -0
  269. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/overlap_fence.py +0 -0
  270. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/overlap_predict.py +0 -0
  271. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/parentage.py +0 -0
  272. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/parentage_github.py +0 -0
  273. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/pipeline.py +0 -0
  274. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/plan_parser.py +0 -0
  275. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/plans.py +0 -0
  276. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/platform_paths.py +0 -0
  277. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_bridge.py +0 -0
  278. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_store.py +0 -0
  279. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_sync.py +0 -0
  280. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/pr_body_lint.py +0 -0
  281. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/prereqs.py +0 -0
  282. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/prereview_gate.py +0 -0
  283. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/progress.py +0 -0
  284. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/__init__.py +0 -0
  285. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/base.py +0 -0
  286. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/claude.py +0 -0
  287. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/claude_pty.py +0 -0
  288. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/opencode.py +0 -0
  289. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/queue_diagnose.py +0 -0
  290. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reconcile_tick.py +0 -0
  291. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/refine_chat.py +0 -0
  292. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_cordon.py +0 -0
  293. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_gate.py +0 -0
  294. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_propagate.py +0 -0
  295. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_verify.py +0 -0
  296. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_window.py +0 -0
  297. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_dormancy.py +0 -0
  298. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_edit.py +0 -0
  299. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_onboard.py +0 -0
  300. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reports.py +0 -0
  301. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/rest_schema.py +0 -0
  302. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/restart_cmd.py +0 -0
  303. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/revalidate.py +0 -0
  304. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/review.py +0 -0
  305. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/scorecard.py +0 -0
  306. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/self_health.py +0 -0
  307. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/serve_app.py +0 -0
  308. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/shell_exec_wrap.py +0 -0
  309. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  310. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  311. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  312. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  313. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  314. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/portal-followup/SKILL.md +0 -0
  315. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/release-now/SKILL.md +0 -0
  316. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  317. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  318. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/update-issue/SKILL.md +0 -0
  319. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/smoke.py +0 -0
  320. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/smoke_tags.py +0 -0
  321. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/spend_ceiling.py +0 -0
  322. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/split_work.py +0 -0
  323. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/sql.py +0 -0
  324. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/stage_projection.py +0 -0
  325. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/store_migrate.py +0 -0
  326. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/store_parity.py +0 -0
  327. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/templates/deploy-cloudflare.node.yml +0 -0
  328. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_author.py +0 -0
  329. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_chat.py +0 -0
  330. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_orchestrator.py +0 -0
  331. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_report.py +0 -0
  332. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/tui_pty_driver.py +0 -0
  333. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/tui_release.py +0 -0
  334. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/uat_checks.py +0 -0
  335. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/upstream_gaps.py +0 -0
  336. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage.py +0 -0
  337. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage_limits.py +0 -0
  338. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage_rollup.py +0 -0
  339. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/win_native_bridge.py +0 -0
  340. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/win_native_driver.py +0 -0
  341. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/worker_events.py +0 -0
  342. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coordinator.example.yml +0 -0
  343. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-agent.service +0 -0
  344. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-backup.service +0 -0
  345. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-backup.timer +0 -0
  346. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.service +0 -0
  347. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.sh +0 -0
  348. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.timer +0 -0
  349. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-dr-verify.service +0 -0
  350. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-dr-verify.timer +0 -0
  351. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-drive-queue.service +0 -0
  352. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-drive-queue.timer +0 -0
  353. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-failure-notify.service +0 -0
  354. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-failure-notify.sh +0 -0
  355. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.service +0 -0
  356. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.timer +0 -0
  357. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.service +0 -0
  358. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.timer +0 -0
  359. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-notify.service +0 -0
  360. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-notify.timer +0 -0
  361. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-propagate.service +0 -0
  362. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-propagate.timer +0 -0
  363. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-window.service +0 -0
  364. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-window.timer +0 -0
  365. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-serve.service +0 -0
  366. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.service +0 -0
  367. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.sh +0 -0
  368. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.timer +0 -0
  369. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-rollback.sh +0 -0
  370. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web.service +0 -0
  371. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/node-shim.sh +0 -0
  372. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_TUI_CI.md +0 -0
  373. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  374. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_CI.md +0 -0
  375. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_DIST.md +0 -0
  376. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  377. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/AGENT_OPERATIONS.md +0 -0
  378. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ARCHITECTURE.md +0 -0
  379. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ARCH_SECURITY_GATES.md +0 -0
  380. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/COCKPIT.md +0 -0
  381. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CONTROL_CENTER.md +0 -0
  382. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CROSS_PLATFORM.md +0 -0
  383. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CUSTOMER_FACING_APPS.md +0 -0
  384. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CUSTOMER_PORTAL.md +0 -0
  385. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DATA_STORE_SELECTION.md +0 -0
  386. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DISASTER_RECOVERY.md +0 -0
  387. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DRIVE_QUEUE.md +0 -0
  388. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/EPHEMERAL_WORKERS.md +0 -0
  389. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/FORGE_MIGRATION.md +0 -0
  390. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/GRAPHIFY_SETUP.md +0 -0
  391. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ISSUE_GUIDANCE.md +0 -0
  392. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/MAC_MINI.md +0 -0
  393. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  394. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/NOTIFIER.md +0 -0
  395. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPENCODE_VERIFICATION.md +0 -0
  396. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPERATING_GOTCHAS.md +0 -0
  397. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPERATOR_GUIDES.md +0 -0
  398. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ORACLE_LOOP.md +0 -0
  399. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PHONE_WEBAPP.md +0 -0
  400. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PIPELINE_V2.md +0 -0
  401. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PLATFORM_EVOLUTION.md +0 -0
  402. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/SECOND_BACKEND.md +0 -0
  403. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/STORE_SERVICE.md +0 -0
  404. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  405. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/WEB_CONTROL_CENTER.md +0 -0
  406. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/WSL_WINDOWS_WORKER.md +0 -0
  407. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/README.md +0 -0
  408. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/_tokens.css +0 -0
  409. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/issue-detail.html +0 -0
  410. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-narrow.html +0 -0
  411. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-wide.html +0 -0
  412. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/graphify-out/.gitignore +0 -0
  413. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/install-agent.sh +0 -0
  414. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/pyproject.toml +0 -0
  415. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/audit_review_verdict_overrides.py +0 -0
  416. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  417. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/build-worker-image.sh +0 -0
  418. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/coordinator-machine.py +0 -0
  419. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/dr-down.sh +0 -0
  420. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/dr-up.sh +0 -0
  421. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/epic-down.sh +0 -0
  422. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/epic-up.sh +0 -0
  423. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/preflight.sh +0 -0
  424. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/provision-server.sh +0 -0
  425. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/provision-worker.sh +0 -0
  426. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  427. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  428. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/throwaway-vm.sh +0 -0
  429. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/verify-github-token.sh +0 -0
  430. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/check_gh_argv_containment.py +0 -0
  431. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/codegen.py +0 -0
  432. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/comment_cruft.py +0 -0
  433. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-test-runner.sh +0 -0
  434. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  435. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  436. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  437. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  438. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-venv-rollback.sh +0 -0
  439. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/drive-batch.sh +0 -0
  440. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/extract-coord-tui.sh +0 -0
  441. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/fleet_watchdog.py +0 -0
  442. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/gen_board_fixture.py +0 -0
  443. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/gen_mock_index.py +0 -0
  444. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/lib/provision-core.sh +0 -0
  445. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/next_release_tag.py +0 -0
  446. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/provision-machine.sh +0 -0
  447. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/run_tests_in_populated_home.sh +0 -0
  448. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/run_tests_without_gh.sh +0 -0
  449. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/setup-macmini.sh +0 -0
  450. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/smoke_437_interactive.py +0 -0
  451. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify-provision-noble.sh +0 -0
  452. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_878_review_capture.py +0 -0
  453. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_release_published.py +0 -0
  454. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_release_wheel.py +0 -0
  455. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/setup.cfg +0 -0
  456. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/SMOKE_SET.md +0 -0
  457. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/__init__.py +0 -0
  458. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/conftest.py +0 -0
  459. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/contract.md +0 -0
  460. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/manifest.yml +0 -0
  461. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  462. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  463. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/contract.md +0 -0
  464. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  465. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  466. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/manifest.yml +0 -0
  467. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  468. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/tsconfig.json +0 -0
  469. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/backends.py +0 -0
  471. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/conftest.py +0 -0
  472. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-basic.json +0 -0
  473. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  474. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  475. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  476. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  477. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/all_pass.json +0 -0
  478. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  479. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/mixed_fail.json +0 -0
  480. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  481. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  482. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/skip.json +0 -0
  483. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/truncated.json +0 -0
  484. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  485. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  486. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  487. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  488. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  489. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  490. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  491. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  492. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  493. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_acceptance.py +0 -0
  494. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_acceptance_drivers.py +0 -0
  495. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent.py +0 -0
  496. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_api_error.py +0 -0
  497. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_app.py +0 -0
  498. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_branch_base.py +0 -0
  499. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_branch_capture.py +0 -0
  500. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_config_free_1712.py +0 -0
  501. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_deploy_units_endpoint.py +0 -0
  502. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_dirty_worktree.py +0 -0
  503. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  504. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_graph_refresh.py +0 -0
  505. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_graph_self_heal.py +0 -0
  506. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_health_h3.py +0 -0
  507. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_idle_restart.py +0 -0
  508. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_push_failure.py +0 -0
  509. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_reap.py +0 -0
  510. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_repos_and_pull.py +0 -0
  511. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_restart_services_endpoint.py +0 -0
  512. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_skills_self_heal.py +0 -0
  513. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_startup_diagnostics.py +0 -0
  514. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_update.py +0 -0
  515. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_update_bluegreen.py +0 -0
  516. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_usage_limit.py +0 -0
  517. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_zero_commit.py +0 -0
  518. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ambient_home_isolation.py +0 -0
  519. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_app_drive.py +0 -0
  520. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_capability_reroute_3241.py +0 -0
  521. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_dependency_busy_2804.py +0 -0
  522. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_reject_plan.py +0 -0
  523. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_usage_gate.py +0 -0
  524. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approved_work_2532.py +0 -0
  525. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approved_work_2996.py +0 -0
  526. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_assignment_already_recorded_daemon.py +0 -0
  527. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_log.py +0 -0
  528. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_outcome.py +0 -0
  529. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_query.py +0 -0
  530. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_auto_loop.py +0 -0
  531. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_auto_release_publish_2035.py +0 -0
  532. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_backend_selection.py +0 -0
  533. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_backup.py +0 -0
  534. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_block_log.py +0 -0
  535. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_cap_762.py +0 -0
  536. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_fixture.py +0 -0
  537. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_nightly_status.py +0 -0
  538. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_read_path.py +0 -0
  539. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_schema.py +0 -0
  540. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_service.py +0 -0
  541. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_state.py +0 -0
  542. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_wire.py +0 -0
  543. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_brain.py +0 -0
  544. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_branch_model.py +0 -0
  545. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_briefing_lessons.py +0 -0
  546. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_bug_intake.py +0 -0
  547. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_bugbash.py +0 -0
  548. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_build_worker_image_env_update.py +0 -0
  549. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cargo_cache.py +0 -0
  550. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_check_gh_argv_containment.py +0 -0
  551. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_acceptance_gate_1950.py +0 -0
  552. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_fix.py +0 -0
  553. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_github.py +0 -0
  554. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_gitlab.py +0 -0
  555. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_parity_2091.py +0 -0
  556. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_store.py +0 -0
  557. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claim.py +0 -0
  558. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claude_md_budget.py +0 -0
  559. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claude_setup_token.py +0 -0
  560. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_acceptance.py +0 -0
  561. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign.py +0 -0
  562. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  563. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_remote.py +0 -0
  564. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_provider.py +0 -0
  565. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  566. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_audit.py +0 -0
  567. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_chat_continue.py +0 -0
  568. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_ci.py +0 -0
  569. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_codegen.py +0 -0
  570. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_decide.py +0 -0
  571. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_capability_rules.py +0 -0
  572. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_config_provenance.py +0 -0
  573. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_forge_availability.py +0 -0
  574. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_graph.py +0 -0
  575. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_self.py +0 -0
  576. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_test_coverage.py +0 -0
  577. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor.py +0 -0
  578. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_free_1801.py +0 -0
  579. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  580. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  581. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_drive.py +0 -0
  582. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_drive_queue.py +0 -0
  583. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_escalate.py +0 -0
  584. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_fix_headless_review.py +0 -0
  585. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_gate_a.py +0 -0
  586. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_inject_board_less.py +0 -0
  587. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_install_drift.py +0 -0
  588. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_install_skills.py +0 -0
  589. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_comment.py +0 -0
  590. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_create_label.py +0 -0
  591. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_reopen.py +0 -0
  592. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_view_list.py +0 -0
  593. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issues.py +0 -0
  594. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_merge.py +0 -0
  595. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_assign.py +0 -0
  596. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_capture.py +0 -0
  597. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_chat_add_child.py +0 -0
  598. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_dispatch.py +0 -0
  599. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_b.py +0 -0
  600. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_c.py +0 -0
  601. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_order.py +0 -0
  602. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  603. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_ship.py +0 -0
  604. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_network.py +0 -0
  605. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_new_issue_chat.py +0 -0
  606. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_plans.py +0 -0
  607. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_portal.py +0 -0
  608. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_pr.py +0 -0
  609. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_pull_artifact.py +0 -0
  610. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_queue.py +0 -0
  611. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_reattach_sessions.py +0 -0
  612. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_refine_board.py +0 -0
  613. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_preflight.py +0 -0
  614. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_propagate.py +0 -0
  615. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_window.py +0 -0
  616. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_repo_2220.py +0 -0
  617. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  618. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_scorecard.py +0 -0
  619. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_serve_store_backend_3084.py +0 -0
  620. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_set_review_findings.py +0 -0
  621. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly.py +0 -0
  622. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly_sweep.py +0 -0
  623. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_advisory_terminal.py +0 -0
  624. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_contested_tag.py +0 -0
  625. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_invariant_alarms.py +0 -0
  626. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_machine_fault.py +0 -0
  627. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_merge_queue.py +0 -0
  628. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_nightly.py +0 -0
  629. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_provider.py +0 -0
  630. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_retried_3340.py +0 -0
  631. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_review_finalizing.py +0 -0
  632. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_supervisor_3366.py +0 -0
  633. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_test_failed_tag.py +0 -0
  634. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_usage_limit.py +0 -0
  635. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_sync_comments_873.py +0 -0
  636. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_test_plan.py +0 -0
  637. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_track.py +0 -0
  638. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_tui_update.py +0 -0
  639. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_wait.py +0 -0
  640. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client.py +0 -0
  641. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_base_install.py +0 -0
  642. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_config_cache_atomic_3052.py +0 -0
  643. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_resource_migration_1946.py +0 -0
  644. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_commands_common.py +0 -0
  645. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_comment_cruft.py +0 -0
  646. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_comments.py +0 -0
  647. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_completion_summary.py +0 -0
  648. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config.py +0 -0
  649. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_acceptance.py +0 -0
  650. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_audit.py +0 -0
  651. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_drift_check.py +0 -0
  652. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_effective.py +0 -0
  653. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_prereview_gate.py +0 -0
  654. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_pricing.py +0 -0
  655. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  656. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_usage_gate.py +0 -0
  657. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_confirm_test.py +0 -0
  658. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_conflict_fix.py +0 -0
  659. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_conflict_fix_semantic.py +0 -0
  660. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  661. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test.py +0 -0
  662. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  663. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_baseline.py +0 -0
  664. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_populated_home.py +0 -0
  665. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_routing.py +0 -0
  666. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_toolchain.py +0 -0
  667. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_uat.py +0 -0
  668. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_web_sse_restart_live.py +0 -0
  669. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coordinator_machine.py +0 -0
  670. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cross_platform_imports.py +0 -0
  671. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dao.py +0 -0
  672. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard.py +0 -0
  673. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_api.py +0 -0
  674. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_fixture.py +0 -0
  675. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_reports.py +0 -0
  676. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_server.py +0 -0
  677. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_terminal.py +0 -0
  678. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_terminal_live.py +0 -0
  679. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_db.py +0 -0
  680. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dead_end.py +0 -0
  681. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_decomposition_chat.py +0 -0
  682. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_db_backup.py +0 -0
  683. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_dist.py +0 -0
  684. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_rollback.py +0 -0
  685. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_db_backup_unit.py +0 -0
  686. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_drive_queue_unit.py +0 -0
  687. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_failure_notify_unit.py +0 -0
  688. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_manifest.py +0 -0
  689. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_notify_unit.py +0 -0
  690. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_units_lane.py +0 -0
  691. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_web_unit.py +0 -0
  692. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deprecation_telemetry.py +0 -0
  693. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deps.py +0 -0
  694. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dirlink.py +0 -0
  695. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch.py +0 -0
  696. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_liveness.py +0 -0
  697. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_target_validation.py +0 -0
  698. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_workers.py +0 -0
  699. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dist_name.py +0 -0
  700. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_done_housekeeping.py +0 -0
  701. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_azure_scripts.py +0 -0
  702. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_promote.py +0 -0
  703. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_verify.py +0 -0
  704. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive.py +0 -0
  705. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_machine_fault.py +0 -0
  706. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue.py +0 -0
  707. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_blocked_rendering.py +0 -0
  708. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_launch_argv.py +0 -0
  709. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_config.py +0 -0
  710. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  711. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_roll_pending.py +0 -0
  712. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  713. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_sessions_snapshot.py +0 -0
  714. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_state.py +0 -0
  715. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_tmux.py +0 -0
  716. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_capability_detection.py +0 -0
  717. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  718. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_image_provenance.py +0 -0
  719. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_errors.py +0 -0
  720. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_events.py +0 -0
  721. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_failure_classifier.py +0 -0
  722. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_filelock.py +0 -0
  723. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  724. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fix_escalation_classifier.py +0 -0
  725. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fix_of_force_override.py +0 -0
  726. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_config_health.py +0 -0
  727. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_health_probes.py +0 -0
  728. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_health_snapshot.py +0 -0
  729. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_watchdog.py +0 -0
  730. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_forge_availability.py +0 -0
  731. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_freshness.py +0 -0
  732. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_a.py +0 -0
  733. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_b.py +0 -0
  734. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_snapshot_staleness.py +0 -0
  735. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gates.py +0 -0
  736. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  737. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gen_mock_index.py +0 -0
  738. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_rust_fixture.py +0 -0
  739. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_rust_requests.py +0 -0
  740. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_types_fixture.py +0 -0
  741. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_github_ops.py +0 -0
  742. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_github_throttle.py +0 -0
  743. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_goal.py +0 -0
  744. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_graph_health.py +0 -0
  745. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_graph_selfheal_absent_2237.py +0 -0
  746. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gtk_native_driver.py +0 -0
  747. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_handoff.py +0 -0
  748. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_checks.py +0 -0
  749. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_cli.py +0 -0
  750. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_cli_graph.py +0 -0
  751. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_config.py +0 -0
  752. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_context.py +0 -0
  753. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_coord_tui_ci_pin.py +0 -0
  754. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_coord_web_ci_pin.py +0 -0
  755. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_deploy_lane_facts.py +0 -0
  756. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_fix.py +0 -0
  757. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_incident_regression.py +0 -0
  758. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_issues_sync_staleness.py +0 -0
  759. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_pr_churn.py +0 -0
  760. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_pypi.py +0 -0
  761. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_registry.py +0 -0
  762. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_release_cordon_probe.py +0 -0
  763. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_timer_active.py +0 -0
  764. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_toolchain.py +0 -0
  765. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_unit_drift.py +0 -0
  766. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_unit_enablement.py +0 -0
  767. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_wedged_drive_queue.py +0 -0
  768. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_hooks.py +0 -0
  769. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_housekeeping.py +0 -0
  770. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_human_attended_437.py +0 -0
  771. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_init.py +0 -0
  772. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_capabilities_3515.py +0 -0
  773. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_venv_2911.py +0 -0
  774. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  775. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_integration.py +0 -0
  776. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive.py +0 -0
  777. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_briefing_echo.py +0 -0
  778. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_pane_log_2541.py +0 -0
  779. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_prefill_state.py +0 -0
  780. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_session_relaunch.py +0 -0
  781. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_test_verdict_backstop.py +0 -0
  782. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_token_attribution.py +0 -0
  783. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_worktree.py +0 -0
  784. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_invariant_alarms.py +0 -0
  785. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_issue_store_seam.py +0 -0
  786. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_issues_sync_status.py +0 -0
  787. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_key_spec.py +0 -0
  788. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_liveness_auditor.py +0 -0
  789. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_liveness_notify.py +0 -0
  790. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_lock_contention_ratchet.py +0 -0
  791. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_mac_native_driver.py +0 -0
  792. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_fault.py +0 -0
  793. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_metrics.py +0 -0
  794. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_onboard.py +0 -0
  795. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_pause.py +0 -0
  796. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_stats.py +0 -0
  797. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_queue.py +0 -0
  798. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_verification.py +0 -0
  799. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_verify.py +0 -0
  800. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_chat.py +0 -0
  801. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_dispatch.py +0 -0
  802. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_gate.py +0 -0
  803. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_order.py +0 -0
  804. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_seam.py +0 -0
  805. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_mock_author.py +0 -0
  806. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_model_tiering.py +0 -0
  807. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models.py +0 -0
  808. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models_config_labels.py +0 -0
  809. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models_pinned_1650.py +0 -0
  810. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_native_fs_wait.py +0 -0
  811. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_native_pixels.py +0 -0
  812. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_needs_attention.py +0 -0
  813. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_network.py +0 -0
  814. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_new_issue_chat.py +0 -0
  815. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_next_release_tag.py +0 -0
  816. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_runner.py +0 -0
  817. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_smoke.py +0 -0
  818. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_status.py +0 -0
  819. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_store.py +0 -0
  820. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_no_eligible_host_3600.py +0 -0
  821. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_node_shim.py +0 -0
  822. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_baseline.py +0 -0
  823. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_cli.py +0 -0
  824. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_collect.py +0 -0
  825. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_config.py +0 -0
  826. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_drive_seam.py +0 -0
  827. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_isolation.py +0 -0
  828. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_predicate.py +0 -0
  829. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_quiet_hours.py +0 -0
  830. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_service.py +0 -0
  831. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notify_drain.py +0 -0
  832. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_openapi.py +0 -0
  833. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_operational_defaults.py +0 -0
  834. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_overlap_fence.py +0 -0
  835. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_overlap_predict.py +0 -0
  836. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_packaged_deploy_units.py +0 -0
  837. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_parentage.py +0 -0
  838. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_paste_landed.py +0 -0
  839. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  840. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_pipeline.py +0 -0
  841. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plain_runner_smoke_3673.py +0 -0
  842. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_approve_plan_command.py +0 -0
  843. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_pr_command.py +0 -0
  844. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_review_command.py +0 -0
  845. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_only.py +0 -0
  846. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_parser.py +0 -0
  847. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_platform_paths.py +0 -0
  848. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_bridge.py +0 -0
  849. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_config.py +0 -0
  850. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_store.py +0 -0
  851. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_sync.py +0 -0
  852. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_pr_body_lint.py +0 -0
  853. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_prereqs.py +0 -0
  854. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_prereview_gate.py +0 -0
  855. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_production_db_guard.py +0 -0
  856. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_progress.py +0 -0
  857. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provider_seam.py +0 -0
  858. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers.py +0 -0
  859. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers_config_labels.py +0 -0
  860. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers_pty.py +0 -0
  861. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provision_core.py +0 -0
  862. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provision_machine.py +0 -0
  863. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_py_rust_mirror_inventory.py +0 -0
  864. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_quiet_hours.py +0 -0
  865. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_quiet_hours_store_2146.py +0 -0
  866. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reap_merged_sessions.py +0 -0
  867. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reap_stale_interactive_tick.py +0 -0
  868. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile.py +0 -0
  869. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_branch.py +0 -0
  870. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_completions.py +0 -0
  871. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  872. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_merges.py +0 -0
  873. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_no_agent_record.py +0 -0
  874. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_tick.py +0 -0
  875. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_usage_limit_done.py +0 -0
  876. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_refine_chat.py +0 -0
  877. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_2101.py +0 -0
  878. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  879. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_deadlock_2240.py +0 -0
  880. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  881. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_stuck_2490.py +0 -0
  882. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_gate.py +0 -0
  883. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_propagate.py +0 -0
  884. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_propagate_threshold.py +0 -0
  885. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_roll_between_legs_2854.py +0 -0
  886. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_roll_window_handoff.py +0 -0
  887. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_unified_1242.py +0 -0
  888. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_verify.py +0 -0
  889. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_window.py +0 -0
  890. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_remote_auto_prune.py +0 -0
  891. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_remote_interactive_reaper.py +0 -0
  892. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_add.py +0 -0
  893. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_dormancy.py +0 -0
  894. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_edit_2220.py +0 -0
  895. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_graph_fleet_2237.py +0 -0
  896. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_max_parallel_3423.py +0 -0
  897. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_onboard_2220.py +0 -0
  898. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_report_public_export.py +0 -0
  899. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_report_result_push.py +0 -0
  900. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reports.py +0 -0
  901. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_restart_cmd.py +0 -0
  902. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry.py +0 -0
  903. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_advisory_1606.py +0 -0
  904. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_escalation_classify_3360.py +0 -0
  905. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_type_1636.py +0 -0
  906. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_revalidate.py +0 -0
  907. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review.py +0 -0
  908. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_end_review_without_verdict.py +0 -0
  909. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_parse_failure_diagnostic.py +0 -0
  910. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_reaffirm.py +0 -0
  911. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_state.py +0 -0
  912. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_backstop.py +0 -0
  913. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_override_audit.py +0 -0
  914. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_relay.py +0 -0
  915. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_zero_commits.py +0 -0
  916. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_scoped_review_wiring.py +0 -0
  917. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_scorecard.py +0 -0
  918. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_self_health.py +0 -0
  919. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve.py +0 -0
  920. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_app.py +0 -0
  921. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_app_board_trim.py +0 -0
  922. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_rest_routes.py +0 -0
  923. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_session.py +0 -0
  924. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_slice_issue_attribution.py +0 -0
  925. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  926. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_live_checkout_restore.py +0 -0
  927. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_plain_runner_3673.py +0 -0
  928. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_workflow.py +0 -0
  929. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_spend_ceiling.py +0 -0
  930. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_spend_ceiling_coordinator.py +0 -0
  931. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_split.py +0 -0
  932. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_split_work.py +0 -0
  933. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_sql_dialect.py +0 -0
  934. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_sqlite_connect_ratchet.py +0 -0
  935. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stage_projection.py +0 -0
  936. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stale_busy_reviewer_697.py +0 -0
  937. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stalled_pipeline.py +0 -0
  938. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_state_review_findings_daemon.py +0 -0
  939. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_status_fleet_footer.py +0 -0
  940. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stop_1567.py +0 -0
  941. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_store_contract.py +0 -0
  942. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_store_migrate.py +0 -0
  943. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stuck.py +0 -0
  944. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  945. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_terminal_command.py +0 -0
  946. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_author.py +0 -0
  947. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_chat.py +0 -0
  948. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_orchestrator.py +0 -0
  949. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_report.py +0 -0
  950. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_verdict_parsing.py +0 -0
  951. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_verdict_transcript_floor.py +0 -0
  952. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_text_io_encoding_audit.py +0 -0
  953. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_board_audit.py +0 -0
  954. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_config_load_1080.py +0 -0
  955. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_daemon_routing_906.py +0 -0
  956. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_throwaway_vm.py +0 -0
  957. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tmux_host.py +0 -0
  958. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tmux_session.py +0 -0
  959. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_transcript_floor.py +0 -0
  960. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tui_pty_driver.py +0 -0
  961. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_uat_checks.py +0 -0
  962. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_upstream_gaps.py +0 -0
  963. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage.py +0 -0
  964. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage_limits.py +0 -0
  965. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage_rollup.py +0 -0
  966. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_venv_live_install_2121.py +0 -0
  967. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_version_single_source.py +0 -0
  968. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_watch.py +0 -0
  969. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_win_native_bridge.py +0 -0
  970. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_win_native_driver.py +0 -0
  971. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  972. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_env_venv_isolation.py +0 -0
  973. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_events.py +0 -0
  974. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_image_pin_sync.py +0 -0
  975. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_safety.py +0 -0
  976. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_test_scoping.py +0 -0
  977. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worktree.py +0 -0
  978. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  979. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_write_parity.py +0 -0
  980. {code_coordinator-0.5.642 → code_coordinator-0.5.644}/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.642
3
+ Version: 0.5.644
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.642
3
+ Version: 0.5.644
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.644",
3
+ "distance": 0,
4
+ "node": "g634dd923ef760cbdf3bb66239d0470e25f7af742",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-16"
8
+ }
@@ -2137,6 +2137,18 @@ def _sanitize_branch(branch: str) -> str:
2137
2137
  # worktree. The captured group is the conflicting worktree's path.
2138
2138
  _WT_COLLISION_RE = re.compile(r"already used by worktree at '([^']+)'")
2139
2139
 
2140
+ # #3704: the *other* shape git raises for a branch-name collision — "fatal: a
2141
+ # branch named '<branch>' already exists". `git worktree add -b <branch> ...`
2142
+ # raises this whenever the branch ref exists at all, whether or not it is
2143
+ # currently checked out anywhere — unlike `_WT_COLLISION_RE` above, which only
2144
+ # fires when something has it checked out. A retried smoke-fix/test-fix
2145
+ # dispatch picks the same deterministic branch name as its failed predecessor;
2146
+ # if that predecessor's worktree was torn down without the branch itself being
2147
+ # deleted (`git worktree remove` never deletes the branch), the retry hits
2148
+ # this exact message and — before this fix — crashed instead of recovering.
2149
+ # The captured group is the branch name, not a path.
2150
+ _WT_BRANCH_EXISTS_RE = re.compile(r"a branch named '([^']+)' already exists")
2151
+
2140
2152
  # Build-intermediate file suffixes that are never useful stash artifacts.
2141
2153
  # Cargo produces dozens of *.rcgu.o incremental-codegen objects per build
2142
2154
  # (e.g. `tui_selection-<hash>.<unit>.rcgu.o`) — Path.suffix on these returns
@@ -2765,6 +2777,29 @@ def _parse_worktree_porcelain(output: str) -> list[dict[str, str]]:
2765
2777
  return worktrees
2766
2778
 
2767
2779
 
2780
+ def _worktree_path_for_branch(repo_path: Path, branch_name: str) -> str | None:
2781
+ """Path of the worktree currently holding *branch_name*, or ``None`` (#3704).
2782
+
2783
+ Git's "a branch named '<branch>' already exists" error (matched by
2784
+ :data:`_WT_BRANCH_EXISTS_RE`) names the *branch*, not a worktree path —
2785
+ unlike :data:`_WT_COLLISION_RE`'s "already used by worktree at '<path>'",
2786
+ which hands :func:`_git_worktree_add` the path directly. This resolves the
2787
+ same thing by scanning ``git worktree list --porcelain`` for an entry
2788
+ whose branch matches. ``None`` means the branch ref exists but nothing has
2789
+ it checked out anywhere — the common case for a retried dispatch whose
2790
+ prior attempt's worktree was already cleaned up without the branch itself
2791
+ being deleted.
2792
+ """
2793
+ try:
2794
+ output = _git(repo_path, "worktree", "list", "--porcelain")
2795
+ except _GitError:
2796
+ return None
2797
+ for wt in _parse_worktree_porcelain(output):
2798
+ if wt.get("branch", "") == branch_name:
2799
+ return wt.get("worktree")
2800
+ return None
2801
+
2802
+
2768
2803
  def _is_same_path(candidate: str, resolved_target: Path) -> bool:
2769
2804
  """True when *candidate* points at the same directory as *resolved_target*.
2770
2805
 
@@ -3443,15 +3478,83 @@ def _git_worktree_add(
3443
3478
  *default_branch* is deliberately optional and the remedy is skipped
3444
3479
  without it: the helper has to know where to put the base, and a caller
3445
3480
  that cannot say keeps #1693's behaviour unchanged (refuse and re-raise).
3481
+
3482
+ #3704: git raises a *second* message shape for a branch-name collision —
3483
+ "a branch named '<branch>' already exists" — whenever the ``-b <branch>``
3484
+ form is used and the branch ref exists at all, checked out anywhere or
3485
+ not. A retried smoke-fix/test-fix dispatch deterministically picks the
3486
+ same branch name as its failed predecessor, so if that predecessor's
3487
+ worktree was already torn down (leaving a stale branch ref behind — ``git
3488
+ worktree remove`` never deletes the branch), the retry hits this exact
3489
+ message. It is resolved the same way: look up where the branch is
3490
+ checked out (if anywhere) via :func:`_worktree_path_for_branch` and fall
3491
+ into the identical main-checkout-restore / linked-worktree-evict logic
3492
+ below. Nothing checked out anywhere is the common case — the stale ref
3493
+ is just deleted and the add is retried once.
3446
3494
  """
3495
+ # #3704: set only when the failure was "a branch named '<branch>' already
3496
+ # exists" — the ``-b`` form's signal that it wants a brand-new branch at
3497
+ # this name, never that it wants to reuse the existing one. Whatever
3498
+ # clears the collision below (restoring the base checkout, evicting a
3499
+ # linked worktree) only moves things *off* the branch; it never deletes
3500
+ # the ref, so without this the retry would hit the identical error again.
3501
+ pending_branch_delete: str | None = None
3502
+
3503
+ def _delete_pending_branch() -> None:
3504
+ """Delete *pending_branch_delete*, if set, once its checkout is clear.
3505
+
3506
+ Best-effort: a failure here just means the retry below hits the same
3507
+ "already exists" error and surfaces it as a real ``_GitError`` —
3508
+ exactly like every other irrecoverable case in this function.
3509
+ """
3510
+ if pending_branch_delete is None:
3511
+ return
3512
+ try:
3513
+ _git(repo_path, "branch", "-D", pending_branch_delete)
3514
+ except _GitError:
3515
+ pass
3516
+
3447
3517
  try:
3448
3518
  _git(repo_path, "worktree", "add", *add_args)
3449
3519
  return
3450
3520
  except _GitError as exc:
3451
3521
  m = _WT_COLLISION_RE.search(str(exc))
3452
- if not m:
3453
- raise # unrelated error — propagate unchanged
3454
- conflicting_path = m.group(1)
3522
+ if m:
3523
+ conflicting_path = m.group(1)
3524
+ else:
3525
+ m = _WT_BRANCH_EXISTS_RE.search(str(exc))
3526
+ if not m:
3527
+ raise # unrelated error — propagate unchanged
3528
+ branch_name = m.group(1)
3529
+ conflicting_path = _worktree_path_for_branch(repo_path, branch_name)
3530
+ if conflicting_path is None:
3531
+ # #3704: the branch ref exists but nothing has it checked out
3532
+ # — e.g. a prior attempt's worktree was already cleaned up
3533
+ # without deleting the branch itself. Safe to delete the
3534
+ # stale ref outright and retry once.
3535
+ if log_path:
3536
+ _append_log_line(
3537
+ log_path,
3538
+ f"# worktree-add: branch {branch_name!r} already "
3539
+ f"exists but is not checked out in any worktree "
3540
+ f"(#3704) — deleting the stale ref and retrying\n",
3541
+ )
3542
+ try:
3543
+ _git(repo_path, "branch", "-D", branch_name)
3544
+ except _GitError as delete_exc:
3545
+ raise _GitError(
3546
+ f"cannot create a worktree for branch "
3547
+ f"{branch_name!r}: it already exists and could not "
3548
+ f"be deleted ({delete_exc})"
3549
+ ) from exc
3550
+ # One retry only — raises if it fails again.
3551
+ _git(repo_path, "worktree", "add", *add_args)
3552
+ return
3553
+ # Checked out somewhere — fall into the main-checkout-restore /
3554
+ # linked-worktree-evict logic below, which clears the *checkout*.
3555
+ # The branch ref itself still needs deleting once that's done,
3556
+ # since the whole point of `-b` is a fresh branch (#3704).
3557
+ pending_branch_delete = branch_name
3455
3558
  original = exc
3456
3559
 
3457
3560
  # #1693: refuse before removing. The base checkout is not a recoverable
@@ -3485,6 +3588,12 @@ def _git_worktree_add(
3485
3588
  f"collision (#1694). Nothing was deleted. "
3486
3589
  f"Retrying the add once.\n",
3487
3590
  )
3591
+ # #3704: if the original error was "branch already
3592
+ # exists" (not the older "already used by worktree"),
3593
+ # the branch ref itself is still there even though the
3594
+ # base checkout just moved off it — delete it now that
3595
+ # nothing has it checked out.
3596
+ _delete_pending_branch()
3488
3597
  # One retry only — raises if it fails again.
3489
3598
  _git(repo_path, "worktree", "add", *add_args)
3490
3599
  return
@@ -3519,6 +3628,10 @@ def _git_worktree_add(
3519
3628
  # to be removable here. Anything else is refused and the retry below
3520
3629
  # raises the real error.
3521
3630
  )
3631
+ # #3704: as above — a "branch already exists" origin means the branch
3632
+ # ref outlives the worktree that just got evicted, and needs its own
3633
+ # deletion before the retry can succeed.
3634
+ _delete_pending_branch()
3522
3635
  # One retry only — raises if it fails again.
3523
3636
  _git(repo_path, "worktree", "add", *add_args)
3524
3637
 
@@ -1441,10 +1441,19 @@ def _recover_test(
1441
1441
  from coord.reconcile import ( # noqa: PLC0415
1442
1442
  propagate_smoke_terminal_failure,
1443
1443
  )
1444
-
1444
+ from coord.state import load_assignment_exit_code # noqa: PLC0415
1445
+
1446
+ # #3705: the board projection carries no `exit_code`, so read the
1447
+ # smoke child's recorded exit status directly — without it every
1448
+ # reason-less failure would reclassify as a silent #1605 death and
1449
+ # earn a bounded retry instead of a work failure. A `cancelled`
1450
+ # row is the operator's own `coord stop`, whose exit status is the
1451
+ # kill signal rather than a verdict on the code under test.
1445
1452
  propagate_smoke_terminal_failure(
1446
1453
  parent_assignment_id=latest.assignment_id,
1447
1454
  failure_reason=smoke.failure_reason,
1455
+ operator_cancelled=(smoke.status or "") == "cancelled",
1456
+ exit_code=load_assignment_exit_code(smoke.assignment_id),
1448
1457
  )
1449
1458
  res.actions_taken.append(
1450
1459
  f"resolved stuck test_state='running' from smoke child "
@@ -98,6 +98,11 @@ KIND_NETWORK = "network"
98
98
  #: diagnosis of a lost Test-stage leg, never a verdict about the code
99
99
  #: under test.
100
100
  KIND_INFRA = "infra"
101
+ #: #3705: a Test-stage worker died with literally no `failure_reason` to
102
+ #: classify — not "classified as work because the text didn't match any
103
+ #: environmental pattern" (that case has real diagnostic text and stays
104
+ #: `KIND_WORK`), but zero evidence at all. See :func:`silent_test_death`.
105
+ KIND_SILENT = "silent"
101
106
  KIND_WORK = "work"
102
107
 
103
108
  #: HTTP statuses from the Claude API that mean "the provider, not the work".
@@ -353,6 +358,40 @@ def _usage_limit(reset_at_raw: str | None, signal: str) -> FailureClassification
353
358
  )
354
359
 
355
360
 
361
+ def silent_test_death() -> FailureClassification:
362
+ """#3705: classification for a Test-stage worker that died reporting
363
+ literally nothing — no usage-limit/API/network/infra signal and no
364
+ ``failure_reason`` text at all for :func:`classify_failure` to have
365
+ scanned in the first place (a dead agent, a killed process group, a
366
+ terminal API error with the summary itself lost — the #1605 class).
367
+
368
+ Deliberately **not** a branch inside :func:`classify_failure`: that
369
+ function's "everything else is WORK, including no evidence" rule is
370
+ correct for a failure that has *some* terminal text which simply didn't
371
+ match an environmental pattern (that IS a real, if unrecognized, work
372
+ failure with diagnostic content worth handing a fix worker). This is
373
+ the narrower case of *zero* content — nothing to classify, let alone
374
+ hand to a fix worker — which only
375
+ :func:`coord.reconcile.propagate_smoke_terminal_failure` can tell apart
376
+ from the ordinary case (it alone sees whether ``failure_reason`` itself
377
+ was ever populated). Classified ``ENVIRONMENTAL`` so it gets the same
378
+ bounded clear-and-retry-then-park treatment as a usage limit or network
379
+ drop — a silent death is no more evidence of a code defect than either
380
+ of those, and parking (never a blind ``coord fix``) is the correct
381
+ escalation once the shared retry budget is exhausted.
382
+ """
383
+ return FailureClassification(
384
+ failure_class=ENVIRONMENTAL,
385
+ kind=KIND_SILENT,
386
+ reason=(
387
+ "environmental (silent #1605 death): the Test-stage worker "
388
+ "died without recording any reason — no usage-limit, API, "
389
+ "network, or infra signal, and no terminal output at all"
390
+ ),
391
+ signal=None,
392
+ )
393
+
394
+
356
395
  def _reset_at_from_reason(reason: str | None) -> str | None:
357
396
  """Pull the raw reset string back out of a stamped ``failure_reason``."""
358
397
  if not is_usage_limit_reason(reason):
@@ -4623,17 +4623,26 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4623
4623
  # can protect a still-live/already-passed sibling partition
4624
4624
  # from a false aggregate failure instead of folding this
4625
4625
  # leg's cancellation straight into the parent's verdict.
4626
+ # #3705: `exit_code` is the deciding evidence for the
4627
+ # silent-death branch — a leg that actually ran and exited
4628
+ # non-zero is a genuine work failure even with no classified
4629
+ # reason text, while a leg whose process left no exit status
4630
+ # at all is the #1605 class that gets a bounded retry. Same
4631
+ # forwarding as `coord.reconcile`'s own call site, so both
4632
+ # surfaces answer "silent or genuine?" identically.
4626
4633
  propagate_smoke_terminal_failure(
4627
4634
  parent_assignment_id=transition.assignment_id,
4628
4635
  failure_reason=_failure_reason,
4629
4636
  fanout_parent_id=parent_id,
4630
4637
  operator_cancelled=entry.get("status") == "cancelled",
4638
+ exit_code=transition.exit_code,
4631
4639
  )
4632
4640
  finalize_smoke_fanout(parent_id)
4633
4641
  else:
4634
4642
  propagate_smoke_terminal_failure(
4635
4643
  parent_assignment_id=parent_id,
4636
4644
  failure_reason=_failure_reason,
4645
+ exit_code=transition.exit_code,
4637
4646
  )
4638
4647
  elif transition.event == EVENT_COMPLETION:
4639
4648
  # #2188: a `deliverable:analysis` issue that legitimately ended with
@@ -590,6 +590,7 @@ def reconcile_completed_assignments(
590
590
  propagate_smoke_terminal_failure(
591
591
  parent_assignment_id=a.review_of_assignment_id,
592
592
  failure_reason=_failure_reason,
593
+ exit_code=entry.get("exit_code"),
593
594
  )
594
595
 
595
596
  # #666 Gap A: best-effort cost/token capture from the agent completed
@@ -940,9 +941,14 @@ def _environmental_cause_phrase(classification: "FailureClassification") -> str:
940
941
  KIND_API_ERROR,
941
942
  KIND_INFRA,
942
943
  KIND_NETWORK,
944
+ KIND_SILENT,
943
945
  KIND_USAGE_LIMIT,
944
946
  )
945
947
 
948
+ if classification.kind == KIND_SILENT:
949
+ # #3705: a Test-stage worker that died reporting nothing at all —
950
+ # not a provider signal, just no diagnostic to hand anyone.
951
+ return "a Test-stage worker repeatedly dying with no reason recorded (#1605)"
946
952
  if classification.kind == KIND_USAGE_LIMIT:
947
953
  return "an exhausted account usage limit"
948
954
  if classification.kind == KIND_API_ERROR:
@@ -969,6 +975,7 @@ def propagate_smoke_terminal_failure(
969
975
  environmental: bool | None = None,
970
976
  fanout_parent_id: str | None = None,
971
977
  operator_cancelled: bool = False,
978
+ exit_code: int | None = None,
972
979
  ) -> None:
973
980
  """#1605: resolve a work row's ``test_state`` when its Test-stage
974
981
  (``type="smoke"``) child dies without ever reporting pass/fail.
@@ -1036,6 +1043,30 @@ def propagate_smoke_terminal_failure(
1036
1043
  ``test_state="failed"`` exactly like a normal non-zero-exit smoke
1037
1044
  completion already does (`coord/notify.py`'s completion handler), so
1038
1045
  the existing bounded `coord fix` loop picks it up from there.
1046
+ * **silent** (#3705: *failure_reason* itself is empty — no usage-limit,
1047
+ API, network, or infra token to classify, because there is no text at
1048
+ all) — this is the #1605 class the module docstring above describes,
1049
+ and it is treated like **environmental**, not **work**: there is
1050
+ nothing for a `coord fix` worker to act on, so dispatching one only
1051
+ adds a full Work→Test→Review cycle onto a row whose original Work may
1052
+ already be approved, for zero actionable content. Reclassified via
1053
+ :func:`coord.failure_class.silent_test_death` and folded into the same
1054
+ bounded clear-and-retry-then-park machinery as a genuine environmental
1055
+ death, sharing its budget and tally. Deliberately distinct from
1056
+ **work**'s "no RECOGNIZED signal" case, which still has real
1057
+ diagnostic text worth a fix worker's time and keeps its current
1058
+ ``test_state="failed"`` handling unchanged.
1059
+
1060
+ *exit_code* (#3705) is the deciding evidence for that **silent** branch,
1061
+ and every automatic caller must forward it: the dying worker's own
1062
+ process exit status, when the agent recorded one. A non-zero exit means
1063
+ the worker ran and returned an error — real evidence of a work failure,
1064
+ even with no reason text — so only ``exit_code in {0, None}`` reclassifies
1065
+ as silent. *operator_cancelled* overrides this, since a `coord stop`
1066
+ kills the process group and its exit status reflects the operator's
1067
+ signal rather than the code under test. Leaving *exit_code* unset means
1068
+ "no exit status is known", which is itself the #1605 shape, so a caller
1069
+ that CAN see one and omits it would reclassify genuine failures as silent.
1039
1070
 
1040
1071
  *environmental* (#2275) overrides that classification when the CALLER
1041
1072
  already knows the answer. Default ``None`` means "classify from
@@ -1134,6 +1165,48 @@ def propagate_smoke_terminal_failure(
1134
1165
  if environmental is None:
1135
1166
  is_environmental = classification.is_environmental
1136
1167
  cause = classification.reason
1168
+ if (
1169
+ not is_environmental
1170
+ and not (failure_reason or "").strip()
1171
+ and (operator_cancelled or exit_code in (0, None))
1172
+ ):
1173
+ # #3705: `classify_failure` correctly calls this WORK — its own
1174
+ # "no evidence at all defaults to WORK" rule — but that rule is
1175
+ # about an UNRECOGNIZED signal, not an ABSENT one. There is a
1176
+ # real difference between "the worker's own terminal text didn't
1177
+ # match any environmental pattern" (real diagnostic content, a
1178
+ # genuine work failure worth a fix worker's time) and "there is
1179
+ # no `failure_reason` text at all" (a dead agent, a killed
1180
+ # process group — the #1605 class this function exists for,
1181
+ # with nothing for a fix worker to act on). Only this caller can
1182
+ # tell the two apart, since only it sees whether
1183
+ # *failure_reason* itself was ever populated.
1184
+ #
1185
+ # The additional *exit_code* guard keeps a non-zero exit code
1186
+ # (e.g. exit_code=1: the `claude -p` process actually ran and
1187
+ # returned an error) as a genuine WORK failure even when the
1188
+ # agent captured no classified reason text — a non-zero exit IS
1189
+ # a signal, just one without a human-readable reason string.
1190
+ # Only `exit_code in {0, None}` qualifies as truly silent.
1191
+ #
1192
+ # *operator_cancelled* overrides that guard: a `coord stop` kills
1193
+ # the worker's process group, so its exit status reports the
1194
+ # OPERATOR'S signal, not a verdict on the code under test. Every
1195
+ # cancellation is therefore silent by construction, whatever exit
1196
+ # code the kill happened to leave behind — the same reasoning as
1197
+ # the sibling-protection branch above, applied to a solo leg that
1198
+ # has no live sibling left to protect.
1199
+ # Treat all of the above like an environmental death: bounded
1200
+ # clear-and-retry of the Test stage, parking (never a blind
1201
+ # `coord fix`) once the shared #3315 budget is exhausted —
1202
+ # instead of ever recording a `test_state="failed"` work verdict
1203
+ # with a synthetic placeholder reason and no actual failure
1204
+ # behind it.
1205
+ from coord.failure_class import silent_test_death # noqa: PLC0415
1206
+
1207
+ classification = silent_test_death()
1208
+ is_environmental = True
1209
+ cause = classification.reason
1137
1210
  else:
1138
1211
  is_environmental = bool(environmental)
1139
1212
  cause = failure_reason or classification.reason
@@ -4587,6 +4587,51 @@ def load_assignment_test_reason(assignment_id: str) -> str | None:
4587
4587
  return row["test_reason"] if hasattr(row, "keys") else row[0]
4588
4588
 
4589
4589
 
4590
+ def load_assignment_exit_code(assignment_id: str) -> int | None:
4591
+ """#3705: the recorded process ``exit_code`` for one assignment.
4592
+
4593
+ The single-row read that lets a caller holding only an
4594
+ :class:`coord.models.Assignment` (whose projection carries no
4595
+ ``exit_code``) answer "did this worker actually run and return an error?"
4596
+ — the deciding evidence
4597
+ :func:`coord.reconcile.propagate_smoke_terminal_failure` needs to tell a
4598
+ genuine work failure from a silent #1605 death.
4599
+
4600
+ Same daemon-first, local-fallback routing as
4601
+ :func:`load_assignment_test_reason`. Returns ``None`` when the row is
4602
+ absent, the column is NULL (the agent recorded no exit status), or a
4603
+ remote read failed — all three mean "no exit status I can see", which is
4604
+ itself the silent shape, so callers must treat it as absence of evidence
4605
+ rather than as a successful exit.
4606
+ """
4607
+ if not assignment_id:
4608
+ return None
4609
+ svc = _board_service()
4610
+ if svc is not None:
4611
+ try:
4612
+ from coord.client import fetch_assignment # noqa: PLC0415
4613
+
4614
+ row = fetch_assignment(svc, assignment_id)
4615
+ if row is not None:
4616
+ code = row.get("exit_code")
4617
+ return int(code) if code is not None else None
4618
+ return None
4619
+ except Exception: # noqa: BLE001 — degraded fallback, never blocking
4620
+ return None
4621
+ try:
4622
+ conn = get_connection()
4623
+ row = sql.execute(conn,
4624
+ "SELECT exit_code FROM assignments WHERE assignment_id=?",
4625
+ (assignment_id,),
4626
+ ).fetchone()
4627
+ except Exception: # noqa: BLE001
4628
+ return None
4629
+ if row is None:
4630
+ return None
4631
+ code = row["exit_code"] if hasattr(row, "keys") else row[0]
4632
+ return int(code) if code is not None else None
4633
+
4634
+
4590
4635
  def load_assignment_test_state(assignment_id: str) -> str | None:
4591
4636
  """#2244: the current ``test_state`` for one assignment.
4592
4637
 
@@ -41,6 +41,15 @@ Minimize direct code work in the coordinator — instead, write a good briefing
41
41
  - **Catch platform violations at review time.** The adversarial reviewer should check for
42
42
  platform-specific code in shared/cross-platform paths. Catching after merge costs an entire
43
43
  round-trip.
44
+ - **One backend per issue for multi-backend repos (quadraui, vimcode).** A cross-backend
45
+ feature becomes a **seam issue** (shared trait methods + one headless backend, typically TUI)
46
+ plus **one issue per backend** (GTK, macOS, Windows). The seam issue touches only
47
+ `backend.rs`, `testing/`, the TUI painter, and `todo!()`-style stubs in the other backends
48
+ — never real painters for GTK/macOS/win. Each backend issue is verified only on its own
49
+ host. Filing a single issue that spans all backends triggers the full smoke fanout matrix,
50
+ balloons scope past 6 files, and has burned 3+ fix rounds without landing (quadraui#1539,
51
+ 2026-10-14; quadraui#1476, 2026-10-10). **Check the target repo's CLAUDE.md before filing**
52
+ — quadraui's encodes this rule.
44
53
 
45
54
  ## Operator sessions: dispatch, don't do
46
55
 
@@ -308,6 +308,90 @@ def test_the_collision_retry_for_a_real_linked_worktree_still_works(
308
308
  assert _current_branch(base) == "main", "the base was moved for no reason"
309
309
 
310
310
 
311
+ # ── #3704: git's *other* collision message — "a branch named '<branch>' ──────
312
+ # already exists" — raised by the plain ``-b`` form whenever the branch ref
313
+ # exists at all, checked out anywhere or not. A retried smoke-fix/test-fix
314
+ # dispatch picks the same branch name as its failed predecessor, so if that
315
+ # predecessor's worktree was already torn down (which never deletes the
316
+ # branch), the retry hits this exact message instead of "already used by
317
+ # worktree at ...". All three sub-cases below funnel into the identical
318
+ # recovery machinery above; the branch ref is deleted once nothing has it
319
+ # checked out, since `-b` always means "I want a fresh branch here".
320
+
321
+
322
+ def test_branch_exists_but_checked_out_nowhere_is_freed_and_retried(
323
+ repo_with_remote: Path, tmp_path: Path
324
+ ) -> None:
325
+ """The common case: a prior attempt's worktree was cleaned up, but `git
326
+ worktree remove` never deletes the branch it held — so the stale ref is
327
+ all that is left to collide with the retry."""
328
+ base = repo_with_remote
329
+ stale = tmp_path / "stale"
330
+ _run(base, "worktree", "add", "-b", "issue-3704-stale", str(stale))
331
+ _run(base, "worktree", "remove", str(stale))
332
+ assert _run(base, "branch", "--list", "issue-3704-stale"), "branch should linger"
333
+
334
+ log = tmp_path / "worker.log"
335
+ log.write_text("")
336
+ new_wt = tmp_path / "new-wt"
337
+ _git_worktree_add(
338
+ base,
339
+ ["-b", "issue-3704-stale", str(new_wt)],
340
+ log_path=str(log),
341
+ )
342
+
343
+ assert new_wt.exists(), "the worktree add did not succeed after the remedy"
344
+ assert _current_branch(new_wt) == "issue-3704-stale"
345
+ assert "not checked out in any worktree" in log.read_text()
346
+
347
+
348
+ def test_branch_exists_in_a_linked_worktree_is_evicted_and_retried(
349
+ repo_with_remote: Path, tmp_path: Path
350
+ ) -> None:
351
+ """The branch is live in a linked worktree — evict it, same as #460/#1693,
352
+ then delete the now-unchecked-out ref so the `-b` retry can recreate it."""
353
+ base = repo_with_remote
354
+ linked = tmp_path / "linked"
355
+ _run(base, "worktree", "add", "-b", "issue-3704-linked", str(linked))
356
+
357
+ new_wt = tmp_path / "new-wt"
358
+ _git_worktree_add(
359
+ base,
360
+ ["-b", "issue-3704-linked", str(new_wt)],
361
+ )
362
+
363
+ assert new_wt.exists(), "the worktree add did not succeed after the remedy"
364
+ assert not linked.exists(), "the stale linked worktree should have been evicted"
365
+ assert _current_branch(new_wt) == "issue-3704-linked"
366
+
367
+
368
+ def test_branch_exists_in_the_base_checkout_is_restored_and_retried(
369
+ repo_with_remote: Path, tmp_path: Path
370
+ ) -> None:
371
+ """The branch is checked out in the *base* checkout itself — move the base
372
+ off it non-destructively (#1694), then delete the ref it leaves behind so
373
+ the `-b` retry can recreate it fresh."""
374
+ base = repo_with_remote
375
+ _park(base, "issue-3704-parked")
376
+ log = tmp_path / "worker.log"
377
+ log.write_text("")
378
+
379
+ new_wt = tmp_path / "new-wt"
380
+ _git_worktree_add(
381
+ base,
382
+ ["-b", "issue-3704-parked", str(new_wt)],
383
+ log_path=str(log),
384
+ default_branch="main",
385
+ )
386
+
387
+ assert new_wt.exists(), "the worktree add did not succeed after the remedy"
388
+ assert _current_branch(base) == "main", "base was not moved to the default branch"
389
+ assert _current_branch(new_wt) == "issue-3704-parked"
390
+ text = log.read_text()
391
+ assert "base checkout was parked on 'issue-3704-parked'" in text, text
392
+ assert "moved it to main" in text, text
393
+
394
+
311
395
  # ── The helper's own contract ───────────────────────────────────────────────
312
396
 
313
397
 
@@ -1712,10 +1712,9 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
1712
1712
  calls: list[dict] = []
1713
1713
  monkeypatch.setattr(
1714
1714
  "coord.reconcile.propagate_smoke_terminal_failure",
1715
- lambda *, parent_assignment_id, failure_reason: calls.append(
1716
- {"parent_assignment_id": parent_assignment_id, "failure_reason": failure_reason}
1717
- ),
1715
+ lambda **kw: calls.append(kw),
1718
1716
  )
1717
+ monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: None)
1719
1718
  work = _assign(aid="w1", typ="work", status="done")
1720
1719
  work.test_state = "running"
1721
1720
  smoke = _assign(
@@ -1728,12 +1727,75 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
1728
1727
 
1729
1728
  assert any("test_state='running'" in f and "s1" in f for f in res.findings)
1730
1729
  assert calls == [
1731
- {"parent_assignment_id": "w1", "failure_reason": "api_error: aborted_streaming"}
1730
+ {
1731
+ "parent_assignment_id": "w1",
1732
+ "failure_reason": "api_error: aborted_streaming",
1733
+ "operator_cancelled": False,
1734
+ "exit_code": None,
1735
+ }
1732
1736
  ]
1733
1737
  assert any("resolved stuck test_state" in a for a in res.actions_taken)
1734
1738
  assert res.recovered is True
1735
1739
 
1736
1740
 
1741
+ def test_stuck_test_state_forwards_the_smoke_child_exit_code(monkeypatch, config) -> None:
1742
+ """#3705: a smoke child that ran and exited non-zero is a genuine work
1743
+ failure even with no reason text recorded, so the repair must forward the
1744
+ child's own exit status — the board projection does not carry it, and
1745
+ omitting it would reclassify the failure as a silent #1605 death and earn
1746
+ it a bounded Test-stage retry instead."""
1747
+ _stub(monkeypatch, session="dead")
1748
+ calls: list[dict] = []
1749
+ monkeypatch.setattr(
1750
+ "coord.reconcile.propagate_smoke_terminal_failure",
1751
+ lambda **kw: calls.append(kw),
1752
+ )
1753
+ monkeypatch.setattr(
1754
+ "coord.state.load_assignment_exit_code",
1755
+ lambda aid: 1 if aid == "s1" else None,
1756
+ )
1757
+ work = _assign(aid="w1", typ="work", status="done")
1758
+ work.test_state = "running"
1759
+ smoke = _assign(aid="s1", typ="smoke", status="failed", review_of="w1")
1760
+ board = Board(completed=[work, smoke])
1761
+
1762
+ diagnose.diagnose_stage(board, config, "api", 42, "test")
1763
+
1764
+ assert calls and calls[0]["exit_code"] == 1, (
1765
+ "the smoke child's recorded exit status must reach "
1766
+ f"propagate_smoke_terminal_failure — got {calls!r}"
1767
+ )
1768
+ assert calls[0]["operator_cancelled"] is False
1769
+
1770
+
1771
+ def test_stuck_test_state_marks_a_cancelled_smoke_child_operator_cancelled(
1772
+ monkeypatch, config
1773
+ ) -> None:
1774
+ """#3705/#3333: an operator `coord stop` leaves the smoke row `cancelled`
1775
+ and its exit status is the kill signal, not a verdict on the code under
1776
+ test — so the repair must flag the cancellation and keep the clear-and-retry
1777
+ treatment rather than letting the signal's exit code read as a work
1778
+ failure."""
1779
+ _stub(monkeypatch, session="dead")
1780
+ calls: list[dict] = []
1781
+ monkeypatch.setattr(
1782
+ "coord.reconcile.propagate_smoke_terminal_failure",
1783
+ lambda **kw: calls.append(kw),
1784
+ )
1785
+ monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: -15)
1786
+ work = _assign(aid="w1", typ="work", status="done")
1787
+ work.test_state = "running"
1788
+ smoke = _assign(aid="s1", typ="smoke", status="cancelled", review_of="w1")
1789
+ board = Board(completed=[work, smoke])
1790
+
1791
+ diagnose.diagnose_stage(board, config, "api", 42, "test")
1792
+
1793
+ assert calls and calls[0]["operator_cancelled"] is True, (
1794
+ f"a cancelled smoke child must be reported as operator-cancelled — got {calls!r}"
1795
+ )
1796
+ assert calls[0]["exit_code"] == -15
1797
+
1798
+
1737
1799
  def test_stuck_test_state_dry_run_reports_without_writing(monkeypatch, config) -> None:
1738
1800
  _stub(monkeypatch, session="dead")
1739
1801