code-coordinator 0.5.655__tar.gz → 0.5.657__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 (981) hide show
  1. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agent.py +72 -21
  5. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dead_end.py +26 -2
  6. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/diagnose.py +32 -7
  7. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notify.py +67 -0
  8. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/review.py +91 -0
  9. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/smoke.py +92 -2
  10. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/state.py +23 -6
  11. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dead_end.py +31 -0
  12. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_diagnose.py +25 -0
  13. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notify.py +140 -0
  14. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plain_runner_smoke_3673.py +82 -8
  15. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_smoke.py +40 -0
  16. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_state.py +30 -0
  17. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_verdict_parsing.py +82 -1
  18. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/.gitignore +0 -0
  31. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/GOAL.md +0 -0
  33. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/LICENSE +0 -0
  34. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/README.md +0 -0
  36. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/SOURCES.txt +0 -0
  37. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/scm_file_list.json +0 -0
  41. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/code_coordinator.egg-info/top_level.txt +0 -0
  42. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/__init__.py +0 -0
  43. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/_board_mapping.py +0 -0
  44. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/acceptance.py +0 -0
  45. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/app_drive.py +0 -0
  52. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/app_drive_daemon.py +0 -0
  53. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/approved_work.py +0 -0
  54. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/backup.py +0 -0
  57. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/block_log.py +0 -0
  58. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/board_schema.py +0 -0
  59. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/board_service.py +0 -0
  60. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/board_wire.py +0 -0
  61. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/brain.py +0 -0
  62. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/branch_model.py +0 -0
  63. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/briefing_lessons.py +0 -0
  64. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/bugbash.py +0 -0
  66. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/ci_fix.py +0 -0
  68. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/ci_gitlab.py +0 -0
  70. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/claude_setup_token.py +0 -0
  73. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/cli.py +0 -0
  74. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/client.py +0 -0
  75. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/codegen.py +0 -0
  76. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/__init__.py +0 -0
  77. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/_common.py +0 -0
  78. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/acceptance.py +0 -0
  79. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/agent_ops.py +0 -0
  80. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/app_drive.py +0 -0
  81. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/audit.py +0 -0
  82. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/backup.py +0 -0
  83. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/bugbash.py +0 -0
  84. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/chat.py +0 -0
  85. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/ci.py +0 -0
  86. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/codegen.py +0 -0
  87. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/dispatch.py +0 -0
  88. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/dispatch_workers.py +0 -0
  89. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/dr.py +0 -0
  90. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/drive.py +0 -0
  91. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/drive_queue.py +0 -0
  92. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/gate_a.py +0 -0
  93. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/gates.py +0 -0
  94. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/issues.py +0 -0
  95. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/lifecycle.py +0 -0
  96. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/machine.py +0 -0
  97. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/merge.py +0 -0
  98. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/milestone.py +0 -0
  99. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/plan_followup.py +0 -0
  100. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/plans.py +0 -0
  101. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/portal.py +0 -0
  102. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/pr.py +0 -0
  103. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/release.py +0 -0
  104. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/repo.py +0 -0
  105. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/report.py +0 -0
  106. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/review.py +0 -0
  107. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/scorecard.py +0 -0
  108. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/sessions.py +0 -0
  109. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/setup.py +0 -0
  110. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/smoke.py +0 -0
  111. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/status.py +0 -0
  112. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/store_migrate.py +0 -0
  113. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/terminal.py +0 -0
  114. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/test_gate.py +0 -0
  115. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/commands/tui.py +0 -0
  116. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/comments.py +0 -0
  117. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/config.py +0 -0
  118. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/config_reload.py +0 -0
  119. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/confirm_test.py +0 -0
  120. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/conflict_fix.py +0 -0
  121. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dao.py +0 -0
  122. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/__init__.py +0 -0
  123. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/fixture.py +0 -0
  124. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/index.html +0 -0
  125. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/reports.html +0 -0
  126. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/server.py +0 -0
  127. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dashboard/terminal.py +0 -0
  128. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/db.py +0 -0
  129. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/decomposition_chat.py +0 -0
  130. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/README.md +0 -0
  131. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-agent.service +0 -0
  132. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-backup.service +0 -0
  133. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-backup.timer +0 -0
  134. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-db-backup.service +0 -0
  135. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-db-backup.sh +0 -0
  136. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-db-backup.timer +0 -0
  137. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-dr-verify.service +0 -0
  138. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-dr-verify.timer +0 -0
  139. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-drive-queue.service +0 -0
  140. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-drive-queue.timer +0 -0
  141. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-failure-notify.service +0 -0
  142. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-fleet-watchdog.service +0 -0
  143. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  144. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-nightly-smoke.service +0 -0
  145. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-nightly-smoke.timer +0 -0
  146. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-notify.service +0 -0
  147. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-notify.timer +0 -0
  148. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-release-propagate.service +0 -0
  149. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-release-propagate.timer +0 -0
  150. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-release-window.service +0 -0
  151. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-release-window.timer +0 -0
  152. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-serve.service +0 -0
  153. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-web-dist-build.service +0 -0
  154. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-web-dist-build.timer +0 -0
  155. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy/coord-web.service +0 -0
  156. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy_manifest.py +0 -0
  157. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deploy_units.py +0 -0
  158. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deprecation_telemetry.py +0 -0
  159. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/deps.py +0 -0
  160. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dirlink.py +0 -0
  161. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dispatch.py +0 -0
  162. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dispatch_liveness.py +0 -0
  163. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dist_name.py +0 -0
  164. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dr_promote.py +0 -0
  165. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/dr_verify.py +0 -0
  166. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/drive.py +0 -0
  167. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/drive_queue.py +0 -0
  168. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/drive_sessions_snapshot.py +0 -0
  169. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/drive_state.py +0 -0
  170. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/events.py +0 -0
  171. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/failure_class.py +0 -0
  172. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/failure_classifier.py +0 -0
  173. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/filelock.py +0 -0
  174. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/fleet_config_health.py +0 -0
  175. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/forge_availability.py +0 -0
  176. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/freshness.py +0 -0
  177. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gate_a.py +0 -0
  178. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gate_b.py +0 -0
  179. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gate_snapshot.py +0 -0
  180. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gates.py +0 -0
  181. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gen_board_fixture.py +0 -0
  182. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/github_ops.py +0 -0
  183. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/github_throttle.py +0 -0
  184. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/goal.py +0 -0
  185. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/graph_health.py +0 -0
  186. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/gtk_native_driver.py +0 -0
  187. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/__init__.py +0 -0
  188. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/aggregate.py +0 -0
  189. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/__init__.py +0 -0
  190. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/_ci_pin.py +0 -0
  191. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/agent_install.py +0 -0
  192. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/cargo_targets.py +0 -0
  193. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/claude_binary.py +0 -0
  194. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/config_drift.py +0 -0
  195. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  196. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/coord_web_ci_pin.py +0 -0
  197. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/deploy_lane_facts.py +0 -0
  198. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/disk.py +0 -0
  199. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/fleet_board.py +0 -0
  200. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  201. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/fleet_phantom.py +0 -0
  202. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/fleet_unit_drift.py +0 -0
  203. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/graph.py +0 -0
  204. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/graphify_cli.py +0 -0
  205. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/gui_lane_preflight.py +0 -0
  206. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/index_lock.py +0 -0
  207. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/issues_sync_staleness.py +0 -0
  208. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/local_machine_identity.py +0 -0
  209. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/plan_usage.py +0 -0
  210. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/pr_churn.py +0 -0
  211. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/release_cordon.py +0 -0
  212. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/repo_state.py +0 -0
  213. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/spawned_coord.py +0 -0
  214. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/stalled_pipeline.py +0 -0
  215. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/timer_active.py +0 -0
  216. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/toolchain.py +0 -0
  217. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/unit_drift.py +0 -0
  218. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/unit_enablement.py +0 -0
  219. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/wedged_drive_queue.py +0 -0
  220. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/checks/worktrees.py +0 -0
  221. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/cli.py +0 -0
  222. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/context.py +0 -0
  223. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/fleet_snapshot.py +0 -0
  224. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/models.py +0 -0
  225. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/pypi.py +0 -0
  226. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/registry.py +0 -0
  227. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/render.py +0 -0
  228. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/health/units.py +0 -0
  229. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/hooks.py +0 -0
  230. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/housekeeping.py +0 -0
  231. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/interactive.py +0 -0
  232. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/invariant_alarms.py +0 -0
  233. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/issue_store.py +0 -0
  234. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/issues_sync_status.py +0 -0
  235. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/key_spec.py +0 -0
  236. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/liveness_auditor.py +0 -0
  237. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/mac_native_driver.py +0 -0
  238. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/machine_fault.py +0 -0
  239. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/machine_metrics.py +0 -0
  240. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/machine_onboard.py +0 -0
  241. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/machine_pause.py +0 -0
  242. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/machine_stats.py +0 -0
  243. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/merge_queue.py +0 -0
  244. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/milestone_chat.py +0 -0
  245. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/milestone_dispatch.py +0 -0
  246. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/milestone_gate.py +0 -0
  247. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/milestone_order.py +0 -0
  248. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/mock_author.py +0 -0
  249. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/models.py +0 -0
  250. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/native_fs_wait.py +0 -0
  251. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/native_pixels.py +0 -0
  252. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/network.py +0 -0
  253. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/new_issue_chat.py +0 -0
  254. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/nightly_runner.py +0 -0
  255. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/nightly_smoke.py +0 -0
  256. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/nightly_status.py +0 -0
  257. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/nightly_store.py +0 -0
  258. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/__init__.py +0 -0
  259. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/baseline.py +0 -0
  260. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/cli.py +0 -0
  261. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/collect.py +0 -0
  262. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/digest.py +0 -0
  263. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/models.py +0 -0
  264. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/predicate.py +0 -0
  265. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/service.py +0 -0
  266. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/store.py +0 -0
  267. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/notifier/transport.py +0 -0
  268. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/openapi.py +0 -0
  269. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/overlap_fence.py +0 -0
  270. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/overlap_predict.py +0 -0
  271. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/parentage.py +0 -0
  272. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/parentage_github.py +0 -0
  273. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/pipeline.py +0 -0
  274. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/plan_parser.py +0 -0
  275. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/plans.py +0 -0
  276. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/platform_paths.py +0 -0
  277. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/portal_bridge.py +0 -0
  278. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/portal_store.py +0 -0
  279. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/portal_sync.py +0 -0
  280. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/pr_body_lint.py +0 -0
  281. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/prereqs.py +0 -0
  282. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/prereview_gate.py +0 -0
  283. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/progress.py +0 -0
  284. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/providers/__init__.py +0 -0
  285. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/providers/base.py +0 -0
  286. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/providers/claude.py +0 -0
  287. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/providers/claude_pty.py +0 -0
  288. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/providers/opencode.py +0 -0
  289. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/queue_diagnose.py +0 -0
  290. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/reconcile.py +0 -0
  291. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/reconcile_tick.py +0 -0
  292. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/refine_chat.py +0 -0
  293. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/release_cordon.py +0 -0
  294. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/release_gate.py +0 -0
  295. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/release_propagate.py +0 -0
  296. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/release_verify.py +0 -0
  297. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/release_window.py +0 -0
  298. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/repo_dormancy.py +0 -0
  299. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/repo_edit.py +0 -0
  300. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/repo_onboard.py +0 -0
  301. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/reports.py +0 -0
  302. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/rest_schema.py +0 -0
  303. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/restart_cmd.py +0 -0
  304. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/revalidate.py +0 -0
  305. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/scorecard.py +0 -0
  306. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/self_health.py +0 -0
  307. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/serve_app.py +0 -0
  308. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/shell_exec_wrap.py +0 -0
  309. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  310. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  311. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  312. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  313. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  314. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/portal-followup/SKILL.md +0 -0
  315. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/release-now/SKILL.md +0 -0
  316. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  317. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  318. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/skills/update-issue/SKILL.md +0 -0
  319. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/smoke_tags.py +0 -0
  320. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/spend_ceiling.py +0 -0
  321. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/split_work.py +0 -0
  322. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/sql.py +0 -0
  323. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/stage_projection.py +0 -0
  324. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/store_migrate.py +0 -0
  325. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/store_parity.py +0 -0
  326. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/templates/deploy-cloudflare.node.yml +0 -0
  327. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/test_author.py +0 -0
  328. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/test_chat.py +0 -0
  329. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/test_orchestrator.py +0 -0
  330. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/test_report.py +0 -0
  331. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/tui_pty_driver.py +0 -0
  332. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/tui_release.py +0 -0
  333. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/uat_checks.py +0 -0
  334. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/upstream_gaps.py +0 -0
  335. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/usage.py +0 -0
  336. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/usage_limits.py +0 -0
  337. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/usage_rollup.py +0 -0
  338. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/win_native_bridge.py +0 -0
  339. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/win_native_driver.py +0 -0
  340. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coord/worker_events.py +0 -0
  341. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/coordinator.example.yml +0 -0
  342. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-agent.service +0 -0
  343. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-backup.service +0 -0
  344. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-backup.timer +0 -0
  345. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-db-backup.service +0 -0
  346. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-db-backup.sh +0 -0
  347. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-db-backup.timer +0 -0
  348. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-dr-verify.service +0 -0
  349. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-dr-verify.timer +0 -0
  350. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-drive-queue.service +0 -0
  351. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-drive-queue.timer +0 -0
  352. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-failure-notify.service +0 -0
  353. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-failure-notify.sh +0 -0
  354. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-fleet-watchdog.service +0 -0
  355. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-fleet-watchdog.timer +0 -0
  356. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-nightly-smoke.service +0 -0
  357. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-nightly-smoke.timer +0 -0
  358. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-notify.service +0 -0
  359. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-notify.timer +0 -0
  360. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-release-propagate.service +0 -0
  361. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-release-propagate.timer +0 -0
  362. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-release-window.service +0 -0
  363. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-release-window.timer +0 -0
  364. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-serve.service +0 -0
  365. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-web-dist-build.service +0 -0
  366. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-web-dist-build.sh +0 -0
  367. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-web-dist-build.timer +0 -0
  368. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-web-rollback.sh +0 -0
  369. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/coord-web.service +0 -0
  370. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/deploy/node-shim.sh +0 -0
  371. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ADR_COORD_TUI_CI.md +0 -0
  372. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  373. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ADR_COORD_WEB_CI.md +0 -0
  374. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ADR_COORD_WEB_DIST.md +0 -0
  375. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  376. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/AGENT_OPERATIONS.md +0 -0
  377. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ARCHITECTURE.md +0 -0
  378. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ARCH_SECURITY_GATES.md +0 -0
  379. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/COCKPIT.md +0 -0
  380. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/CONTROL_CENTER.md +0 -0
  381. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/COST_DISCIPLINE.md +0 -0
  382. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/CROSS_PLATFORM.md +0 -0
  383. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/CUSTOMER_FACING_APPS.md +0 -0
  384. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/CUSTOMER_PORTAL.md +0 -0
  385. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/DATA_STORE_SELECTION.md +0 -0
  386. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/DISASTER_RECOVERY.md +0 -0
  387. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/DRIVE_QUEUE.md +0 -0
  388. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/EPHEMERAL_WORKERS.md +0 -0
  389. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/FORGE_MIGRATION.md +0 -0
  390. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/GRAPHIFY_SETUP.md +0 -0
  391. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ISSUE_GUIDANCE.md +0 -0
  392. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/MAC_MINI.md +0 -0
  393. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  394. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/NOTIFIER.md +0 -0
  395. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/OPENCODE_VERIFICATION.md +0 -0
  396. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/OPERATING_GOTCHAS.md +0 -0
  397. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/OPERATOR_GUIDES.md +0 -0
  398. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/ORACLE_LOOP.md +0 -0
  399. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/PHONE_WEBAPP.md +0 -0
  400. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/PIPELINE_V2.md +0 -0
  401. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/PLATFORM_EVOLUTION.md +0 -0
  402. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/SECOND_BACKEND.md +0 -0
  403. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/STORE_SERVICE.md +0 -0
  404. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  405. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/WEB_CONTROL_CENTER.md +0 -0
  406. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/WSL_WINDOWS_WORKER.md +0 -0
  407. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/mocks/web/README.md +0 -0
  408. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/mocks/web/_tokens.css +0 -0
  409. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/mocks/web/issue-detail.html +0 -0
  410. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/mocks/web/pipeline-narrow.html +0 -0
  411. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/docs/mocks/web/pipeline-wide.html +0 -0
  412. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/graphify-out/.gitignore +0 -0
  413. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/install-agent.sh +0 -0
  414. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/pyproject.toml +0 -0
  415. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/audit_review_verdict_overrides.py +0 -0
  416. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  417. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/build-worker-image.sh +0 -0
  418. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/coordinator-machine.py +0 -0
  419. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/dr-down.sh +0 -0
  420. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/dr-up.sh +0 -0
  421. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/epic-down.sh +0 -0
  422. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/epic-up.sh +0 -0
  423. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/preflight.sh +0 -0
  424. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/provision-server.sh +0 -0
  425. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/provision-worker.sh +0 -0
  426. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  427. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  428. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/throwaway-vm.sh +0 -0
  429. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/azure-workers/verify-github-token.sh +0 -0
  430. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/check_gh_argv_containment.py +0 -0
  431. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/codegen.py +0 -0
  432. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/comment_cruft.py +0 -0
  433. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-test-runner.sh +0 -0
  434. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  435. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  436. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  437. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  438. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/coord-venv-rollback.sh +0 -0
  439. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/drive-batch.sh +0 -0
  440. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/extract-coord-tui.sh +0 -0
  441. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/fleet_watchdog.py +0 -0
  442. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/gen_board_fixture.py +0 -0
  443. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/gen_mock_index.py +0 -0
  444. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/lib/provision-core.sh +0 -0
  445. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/next_release_tag.py +0 -0
  446. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/provision-machine.sh +0 -0
  447. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/run_tests_in_populated_home.sh +0 -0
  448. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/run_tests_without_gh.sh +0 -0
  449. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/setup-macmini.sh +0 -0
  450. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/smoke_437_interactive.py +0 -0
  451. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/verify-provision-noble.sh +0 -0
  452. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/verify_878_review_capture.py +0 -0
  453. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/verify_release_published.py +0 -0
  454. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/scripts/verify_release_wheel.py +0 -0
  455. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/setup.cfg +0 -0
  456. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/SMOKE_SET.md +0 -0
  457. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/__init__.py +0 -0
  458. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-37/conftest.py +0 -0
  459. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-37/contract.md +0 -0
  460. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-37/manifest.yml +0 -0
  461. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  462. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  463. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/contract.md +0 -0
  464. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  465. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  466. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/manifest.yml +0 -0
  467. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  468. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-51/tsconfig.json +0 -0
  469. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/backends.py +0 -0
  471. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/conftest.py +0 -0
  472. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/board-pipeline-basic.json +0 -0
  473. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  474. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  475. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  476. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  477. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/all_pass.json +0 -0
  478. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  479. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/mixed_fail.json +0 -0
  480. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  481. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  482. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/skip.json +0 -0
  483. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/playwright/truncated.json +0 -0
  484. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  485. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  486. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  487. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  488. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  489. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  490. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  491. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  492. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  493. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_acceptance.py +0 -0
  494. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_acceptance_drivers.py +0 -0
  495. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent.py +0 -0
  496. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_api_error.py +0 -0
  497. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_app.py +0 -0
  498. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_branch_base.py +0 -0
  499. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_branch_capture.py +0 -0
  500. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_config_free_1712.py +0 -0
  501. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_deploy_units_endpoint.py +0 -0
  502. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_dirty_worktree.py +0 -0
  503. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  504. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_graceful_shutdown_3649.py +0 -0
  505. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_graph_refresh.py +0 -0
  506. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_graph_self_heal.py +0 -0
  507. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_health_h3.py +0 -0
  508. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_idle_restart.py +0 -0
  509. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_push_failure.py +0 -0
  510. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_reap.py +0 -0
  511. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_repos_and_pull.py +0 -0
  512. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_restart_services_endpoint.py +0 -0
  513. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_skills_self_heal.py +0 -0
  514. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_startup_diagnostics.py +0 -0
  515. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_update.py +0 -0
  516. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_update_bluegreen.py +0 -0
  517. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_usage_limit.py +0 -0
  518. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_agent_zero_commit.py +0 -0
  519. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ambient_home_isolation.py +0 -0
  520. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_app_drive.py +0 -0
  521. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approve_capability_reroute_3241.py +0 -0
  522. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approve_dependency_busy_2804.py +0 -0
  523. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approve_reject_plan.py +0 -0
  524. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approve_usage_gate.py +0 -0
  525. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approved_work_2532.py +0 -0
  526. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_approved_work_2996.py +0 -0
  527. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_assignment_already_recorded_daemon.py +0 -0
  528. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_audit_log.py +0 -0
  529. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_audit_outcome.py +0 -0
  530. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_audit_query.py +0 -0
  531. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_auto_loop.py +0 -0
  532. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_auto_release_publish_2035.py +0 -0
  533. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_backend_selection.py +0 -0
  534. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_backup.py +0 -0
  535. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_base_checkout_restore.py +0 -0
  536. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_block_log.py +0 -0
  537. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_cap_762.py +0 -0
  538. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_fixture.py +0 -0
  539. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_nightly_status.py +0 -0
  540. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_read_path.py +0 -0
  541. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_schema.py +0 -0
  542. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_service.py +0 -0
  543. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_state.py +0 -0
  544. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_board_wire.py +0 -0
  545. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_brain.py +0 -0
  546. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_branch_model.py +0 -0
  547. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_briefing_lessons.py +0 -0
  548. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_bug_intake.py +0 -0
  549. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_bugbash.py +0 -0
  550. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_build_worker_image_env_update.py +0 -0
  551. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cargo_cache.py +0 -0
  552. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_check_gh_argv_containment.py +0 -0
  553. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_acceptance_gate_1950.py +0 -0
  554. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_fix.py +0 -0
  555. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_github.py +0 -0
  556. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_gitlab.py +0 -0
  557. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_parity_2091.py +0 -0
  558. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_ci_store.py +0 -0
  559. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_claim.py +0 -0
  560. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_claude_md_budget.py +0 -0
  561. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_claude_setup_token.py +0 -0
  562. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_acceptance.py +0 -0
  563. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_assign.py +0 -0
  564. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  565. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_assign_interactive_remote.py +0 -0
  566. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_assign_provider.py +0 -0
  567. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  568. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_audit.py +0 -0
  569. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_chat_continue.py +0 -0
  570. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_ci.py +0 -0
  571. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_codegen.py +0 -0
  572. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_decide.py +0 -0
  573. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_capability_rules.py +0 -0
  574. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_config_provenance.py +0 -0
  575. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_forge_availability.py +0 -0
  576. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_graph.py +0 -0
  577. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_self.py +0 -0
  578. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_diagnose_test_coverage.py +0 -0
  579. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_doctor.py +0 -0
  580. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_doctor_config_free_1801.py +0 -0
  581. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  582. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  583. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_drive.py +0 -0
  584. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_drive_queue.py +0 -0
  585. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_escalate.py +0 -0
  586. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_fix_headless_review.py +0 -0
  587. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_gate_a.py +0 -0
  588. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_inject_board_less.py +0 -0
  589. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_install_drift.py +0 -0
  590. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_install_skills.py +0 -0
  591. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issue_close_wrong_repo.py +0 -0
  592. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issue_comment.py +0 -0
  593. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issue_create_label.py +0 -0
  594. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issue_reopen.py +0 -0
  595. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issue_view_list.py +0 -0
  596. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_issues.py +0 -0
  597. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_merge.py +0 -0
  598. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_assign.py +0 -0
  599. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_capture.py +0 -0
  600. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_chat_add_child.py +0 -0
  601. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_dispatch.py +0 -0
  602. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_gate_b.py +0 -0
  603. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_gate_c.py +0 -0
  604. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_order.py +0 -0
  605. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  606. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_milestone_ship.py +0 -0
  607. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_network.py +0 -0
  608. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_new_issue_chat.py +0 -0
  609. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_plans.py +0 -0
  610. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_portal.py +0 -0
  611. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_pr.py +0 -0
  612. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_pull_artifact.py +0 -0
  613. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_queue.py +0 -0
  614. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_reattach_sessions.py +0 -0
  615. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_refine_board.py +0 -0
  616. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_release_preflight.py +0 -0
  617. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_release_propagate.py +0 -0
  618. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_release_window.py +0 -0
  619. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_repo_2220.py +0 -0
  620. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  621. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_scorecard.py +0 -0
  622. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_serve_store_backend_3084.py +0 -0
  623. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_set_review_findings.py +0 -0
  624. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_smoke_nightly.py +0 -0
  625. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_smoke_nightly_sweep.py +0 -0
  626. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_advisory_terminal.py +0 -0
  627. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_contested_tag.py +0 -0
  628. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_invariant_alarms.py +0 -0
  629. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_machine_fault.py +0 -0
  630. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_merge_queue.py +0 -0
  631. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_nightly.py +0 -0
  632. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_provider.py +0 -0
  633. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_retried_3340.py +0 -0
  634. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_review_finalizing.py +0 -0
  635. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_supervisor_3366.py +0 -0
  636. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_test_failed_tag.py +0 -0
  637. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_status_usage_limit.py +0 -0
  638. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_sync_comments_873.py +0 -0
  639. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_test_plan.py +0 -0
  640. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_track.py +0 -0
  641. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_tui_update.py +0 -0
  642. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cli_wait.py +0 -0
  643. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_client.py +0 -0
  644. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_client_base_install.py +0 -0
  645. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_client_config_cache_atomic_3052.py +0 -0
  646. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_client_resource_migration_1946.py +0 -0
  647. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_commands_common.py +0 -0
  648. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_comment_cruft.py +0 -0
  649. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_comments.py +0 -0
  650. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_completion_summary.py +0 -0
  651. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config.py +0 -0
  652. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_acceptance.py +0 -0
  653. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_audit.py +0 -0
  654. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_drift_check.py +0 -0
  655. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_effective.py +0 -0
  656. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_prereview_gate.py +0 -0
  657. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_pricing.py +0 -0
  658. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  659. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_config_usage_gate.py +0 -0
  660. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_confirm_test.py +0 -0
  661. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_conflict_fix.py +0 -0
  662. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_conflict_fix_semantic.py +0 -0
  663. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  664. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test.py +0 -0
  665. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  666. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test_runner_baseline.py +0 -0
  667. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test_runner_populated_home.py +0 -0
  668. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test_runner_routing.py +0 -0
  669. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_test_runner_toolchain.py +0 -0
  670. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_uat.py +0 -0
  671. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coord_web_sse_restart_live.py +0 -0
  672. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_coordinator_machine.py +0 -0
  673. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_cross_platform_imports.py +0 -0
  674. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dao.py +0 -0
  675. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard.py +0 -0
  676. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_api.py +0 -0
  677. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_fixture.py +0 -0
  678. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_reports.py +0 -0
  679. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_server.py +0 -0
  680. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_terminal.py +0 -0
  681. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dashboard_terminal_live.py +0 -0
  682. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_db.py +0 -0
  683. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_decomposition_chat.py +0 -0
  684. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_coord_db_backup.py +0 -0
  685. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_coord_web_dist.py +0 -0
  686. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_coord_web_rollback.py +0 -0
  687. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_db_backup_unit.py +0 -0
  688. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_drive_queue_unit.py +0 -0
  689. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_failure_notify_unit.py +0 -0
  690. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_manifest.py +0 -0
  691. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_notify_unit.py +0 -0
  692. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_units_lane.py +0 -0
  693. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deploy_web_unit.py +0 -0
  694. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deprecation_telemetry.py +0 -0
  695. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_deps.py +0 -0
  696. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dirlink.py +0 -0
  697. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dispatch.py +0 -0
  698. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dispatch_liveness.py +0 -0
  699. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dispatch_target_validation.py +0 -0
  700. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dispatch_workers.py +0 -0
  701. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dist_name.py +0 -0
  702. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_done_housekeeping.py +0 -0
  703. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dr_azure_scripts.py +0 -0
  704. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dr_promote.py +0 -0
  705. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_dr_verify.py +0 -0
  706. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive.py +0 -0
  707. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_machine_fault.py +0 -0
  708. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue.py +0 -0
  709. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_blocked_rendering.py +0 -0
  710. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_launch_argv.py +0 -0
  711. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_max_parallel_config.py +0 -0
  712. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  713. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_roll_pending.py +0 -0
  714. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  715. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_sessions_snapshot.py +0 -0
  716. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_state.py +0 -0
  717. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_drive_tmux.py +0 -0
  718. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_epic_up_capability_detection.py +0 -0
  719. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  720. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_epic_up_image_provenance.py +0 -0
  721. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_errors.py +0 -0
  722. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_events.py +0 -0
  723. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_failure_class.py +0 -0
  724. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_failure_classifier.py +0 -0
  725. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_filelock.py +0 -0
  726. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  727. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fix_escalation_classifier.py +0 -0
  728. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fix_of_force_override.py +0 -0
  729. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fleet_config_health.py +0 -0
  730. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fleet_health_probes.py +0 -0
  731. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fleet_health_snapshot.py +0 -0
  732. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_fleet_watchdog.py +0 -0
  733. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_forge_availability.py +0 -0
  734. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_freshness.py +0 -0
  735. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gate_a.py +0 -0
  736. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gate_b.py +0 -0
  737. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gate_snapshot_staleness.py +0 -0
  738. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gates.py +0 -0
  739. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  740. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gen_mock_index.py +0 -0
  741. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_generated_rust_fixture.py +0 -0
  742. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_generated_rust_requests.py +0 -0
  743. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_generated_types_fixture.py +0 -0
  744. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_github_ops.py +0 -0
  745. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_github_throttle.py +0 -0
  746. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_goal.py +0 -0
  747. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_graph_health.py +0 -0
  748. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_graph_selfheal_absent_2237.py +0 -0
  749. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_gtk_native_driver.py +0 -0
  750. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_handoff.py +0 -0
  751. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_checks.py +0 -0
  752. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_cli.py +0 -0
  753. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_cli_graph.py +0 -0
  754. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_config.py +0 -0
  755. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_context.py +0 -0
  756. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_coord_tui_ci_pin.py +0 -0
  757. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_coord_web_ci_pin.py +0 -0
  758. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_deploy_lane_facts.py +0 -0
  759. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_fix.py +0 -0
  760. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_incident_regression.py +0 -0
  761. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_issues_sync_staleness.py +0 -0
  762. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_pr_churn.py +0 -0
  763. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_pypi.py +0 -0
  764. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_registry.py +0 -0
  765. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_release_cordon_probe.py +0 -0
  766. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_timer_active.py +0 -0
  767. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_toolchain.py +0 -0
  768. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_unit_drift.py +0 -0
  769. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_unit_enablement.py +0 -0
  770. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_health_wedged_drive_queue.py +0 -0
  771. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_hooks.py +0 -0
  772. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_housekeeping.py +0 -0
  773. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_human_attended_437.py +0 -0
  774. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_init.py +0 -0
  775. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_install_agent_capabilities_3515.py +0 -0
  776. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_install_agent_venv_2911.py +0 -0
  777. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  778. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_integration.py +0 -0
  779. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive.py +0 -0
  780. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_briefing_echo.py +0 -0
  781. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_pane_log_2541.py +0 -0
  782. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_prefill_state.py +0 -0
  783. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_session_relaunch.py +0 -0
  784. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_test_verdict_backstop.py +0 -0
  785. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_token_attribution.py +0 -0
  786. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_interactive_worktree.py +0 -0
  787. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_invariant_alarms.py +0 -0
  788. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_issue_store_seam.py +0 -0
  789. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_issues_sync_status.py +0 -0
  790. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_key_spec.py +0 -0
  791. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_liveness_auditor.py +0 -0
  792. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_liveness_notify.py +0 -0
  793. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_lock_contention_ratchet.py +0 -0
  794. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_mac_native_driver.py +0 -0
  795. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_machine_fault.py +0 -0
  796. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_machine_metrics.py +0 -0
  797. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_machine_onboard.py +0 -0
  798. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_machine_pause.py +0 -0
  799. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_machine_stats.py +0 -0
  800. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_merge_queue.py +0 -0
  801. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_merge_verification.py +0 -0
  802. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_merge_verify.py +0 -0
  803. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_milestone_chat.py +0 -0
  804. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_milestone_dispatch.py +0 -0
  805. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_milestone_gate.py +0 -0
  806. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_milestone_order.py +0 -0
  807. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_milestone_seam.py +0 -0
  808. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_mock_author.py +0 -0
  809. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_model_tiering.py +0 -0
  810. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_models.py +0 -0
  811. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_models_config_labels.py +0 -0
  812. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_models_pinned_1650.py +0 -0
  813. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_native_fs_wait.py +0 -0
  814. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_native_pixels.py +0 -0
  815. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_needs_attention.py +0 -0
  816. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_network.py +0 -0
  817. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_new_issue_chat.py +0 -0
  818. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_next_release_tag.py +0 -0
  819. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_nightly_runner.py +0 -0
  820. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_nightly_smoke.py +0 -0
  821. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_nightly_status.py +0 -0
  822. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_nightly_store.py +0 -0
  823. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_no_eligible_host_3600.py +0 -0
  824. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_node_shim.py +0 -0
  825. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_baseline.py +0 -0
  826. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_cli.py +0 -0
  827. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_collect.py +0 -0
  828. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_config.py +0 -0
  829. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_drive_seam.py +0 -0
  830. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_isolation.py +0 -0
  831. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_predicate.py +0 -0
  832. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_quiet_hours.py +0 -0
  833. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notifier_service.py +0 -0
  834. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_notify_drain.py +0 -0
  835. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_openapi.py +0 -0
  836. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_operational_defaults.py +0 -0
  837. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_overlap_fence.py +0 -0
  838. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_overlap_predict.py +0 -0
  839. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_packaged_deploy_units.py +0 -0
  840. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_parentage.py +0 -0
  841. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_paste_landed.py +0 -0
  842. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  843. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_pipeline.py +0 -0
  844. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plan_followup_approve_plan_command.py +0 -0
  845. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plan_followup_pr_command.py +0 -0
  846. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plan_followup_review_command.py +0 -0
  847. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plan_only.py +0 -0
  848. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_plan_parser.py +0 -0
  849. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_platform_paths.py +0 -0
  850. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_portal_bridge.py +0 -0
  851. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_portal_config.py +0 -0
  852. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_portal_store.py +0 -0
  853. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_portal_sync.py +0 -0
  854. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_pr_body_lint.py +0 -0
  855. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_prereqs.py +0 -0
  856. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_prereview_gate.py +0 -0
  857. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_production_db_guard.py +0 -0
  858. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_progress.py +0 -0
  859. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_provider_seam.py +0 -0
  860. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_providers.py +0 -0
  861. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_providers_config_labels.py +0 -0
  862. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_providers_pty.py +0 -0
  863. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_provision_core.py +0 -0
  864. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_provision_machine.py +0 -0
  865. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_py_rust_mirror_inventory.py +0 -0
  866. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_quiet_hours.py +0 -0
  867. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_quiet_hours_store_2146.py +0 -0
  868. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reap_merged_sessions.py +0 -0
  869. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reap_stale_interactive_tick.py +0 -0
  870. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile.py +0 -0
  871. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_branch.py +0 -0
  872. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_completions.py +0 -0
  873. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  874. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_merges.py +0 -0
  875. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_no_agent_record.py +0 -0
  876. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_tick.py +0 -0
  877. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reconcile_usage_limit_done.py +0 -0
  878. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_refine_chat.py +0 -0
  879. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_cordon_2101.py +0 -0
  880. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  881. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_cordon_deadlock_2240.py +0 -0
  882. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  883. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_cordon_stuck_2490.py +0 -0
  884. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_gate.py +0 -0
  885. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_propagate.py +0 -0
  886. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_propagate_threshold.py +0 -0
  887. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_roll_between_legs_2854.py +0 -0
  888. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_roll_window_handoff.py +0 -0
  889. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_unified_1242.py +0 -0
  890. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_verify.py +0 -0
  891. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_release_window.py +0 -0
  892. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_remote_auto_prune.py +0 -0
  893. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_remote_interactive_reaper.py +0 -0
  894. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_add.py +0 -0
  895. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_dormancy.py +0 -0
  896. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_edit_2220.py +0 -0
  897. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_graph_fleet_2237.py +0 -0
  898. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_max_parallel_3423.py +0 -0
  899. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_repo_onboard_2220.py +0 -0
  900. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_report_public_export.py +0 -0
  901. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_report_result_push.py +0 -0
  902. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_reports.py +0 -0
  903. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_restart_cmd.py +0 -0
  904. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_retry.py +0 -0
  905. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_retry_advisory_1606.py +0 -0
  906. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_retry_escalation_classify_3360.py +0 -0
  907. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_retry_type_1636.py +0 -0
  908. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_revalidate.py +0 -0
  909. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review.py +0 -0
  910. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_end_review_without_verdict.py +0 -0
  911. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_parse_failure_diagnostic.py +0 -0
  912. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_reaffirm.py +0 -0
  913. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_state.py +0 -0
  914. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_verdict_backstop.py +0 -0
  915. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_verdict_override_audit.py +0 -0
  916. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_verdict_relay.py +0 -0
  917. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_review_zero_commits.py +0 -0
  918. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_scoped_review_wiring.py +0 -0
  919. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_scorecard.py +0 -0
  920. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_self_health.py +0 -0
  921. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_serve.py +0 -0
  922. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_serve_app.py +0 -0
  923. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_serve_app_board_trim.py +0 -0
  924. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_serve_rest_routes.py +0 -0
  925. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_session.py +0 -0
  926. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_slice_issue_attribution.py +0 -0
  927. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  928. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_smoke_live_checkout_restore.py +0 -0
  929. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_smoke_plain_runner_3673.py +0 -0
  930. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_smoke_workflow.py +0 -0
  931. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_spend_ceiling.py +0 -0
  932. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_spend_ceiling_coordinator.py +0 -0
  933. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_split.py +0 -0
  934. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_split_work.py +0 -0
  935. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_sql_dialect.py +0 -0
  936. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_sqlite_connect_ratchet.py +0 -0
  937. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stage_projection.py +0 -0
  938. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stale_busy_reviewer_697.py +0 -0
  939. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stalled_pipeline.py +0 -0
  940. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_state_review_findings_daemon.py +0 -0
  941. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_status_fleet_footer.py +0 -0
  942. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stop_1567.py +0 -0
  943. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_store_contract.py +0 -0
  944. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_store_migrate.py +0 -0
  945. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stuck.py +0 -0
  946. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  947. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_terminal_command.py +0 -0
  948. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_author.py +0 -0
  949. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_chat.py +0 -0
  950. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_orchestrator.py +0 -0
  951. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_report.py +0 -0
  952. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_test_verdict_transcript_floor.py +0 -0
  953. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_text_io_encoding_audit.py +0 -0
  954. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_thin_client_board_audit.py +0 -0
  955. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_thin_client_config_load_1080.py +0 -0
  956. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_thin_client_daemon_routing_906.py +0 -0
  957. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_throwaway_vm.py +0 -0
  958. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_tmux_host.py +0 -0
  959. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_tmux_session.py +0 -0
  960. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_transcript_floor.py +0 -0
  961. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_tui_pty_driver.py +0 -0
  962. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_uat_checks.py +0 -0
  963. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_upstream_gaps.py +0 -0
  964. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_usage.py +0 -0
  965. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_usage_limits.py +0 -0
  966. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_usage_rollup.py +0 -0
  967. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_venv_live_install_2121.py +0 -0
  968. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_version_single_source.py +0 -0
  969. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_watch.py +0 -0
  970. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_win_native_bridge.py +0 -0
  971. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_win_native_driver.py +0 -0
  972. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  973. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worker_env_venv_isolation.py +0 -0
  974. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worker_events.py +0 -0
  975. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worker_image_pin_sync.py +0 -0
  976. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worker_safety.py +0 -0
  977. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worker_test_scoping.py +0 -0
  978. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worktree.py +0 -0
  979. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  980. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/tests/test_write_parity.py +0 -0
  981. {code_coordinator-0.5.655 → code_coordinator-0.5.657}/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.655
3
+ Version: 0.5.657
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.655
3
+ Version: 0.5.657
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.655",
2
+ "tag": "0.5.657",
3
3
  "distance": 0,
4
- "node": "g8f314f82888f9fbb19e3afbb2d2715b02cc648a0",
4
+ "node": "gf275c3f61cfa7748dc86e4d8adec06eac343ac8d",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-19"
@@ -1165,11 +1165,11 @@ class AssignmentSpec:
1165
1165
  # agent reason (docs/EPHEMERAL_WORKERS.md).
1166
1166
  runtime_ceiling_s: float | None = None
1167
1167
  # #3673: "make the Test stage a plain runner by default" — when True AND
1168
- # ``type == "smoke"`` AND ``smoke_needs_judgement`` is False AND
1169
- # ``smoke_command`` is set, ``_spawn`` runs ``smoke_command`` directly as
1170
- # a subprocess (:func:`run_plain_runner_command`) instead of spawning a
1171
- # ``claude -p`` session, and derives the Test-stage verdict from its exit
1172
- # code alone — an LLM session is spawned only to SUMMARISE a failure
1168
+ # ``type == "smoke"`` AND ``smoke_command`` is set, ``_spawn`` runs
1169
+ # ``smoke_command`` directly as a subprocess
1170
+ # (:func:`run_plain_runner_command`) instead of spawning a ``claude -p``
1171
+ # session, and derives the Test-stage verdict from its exit code alone —
1172
+ # an LLM session is spawned only to SUMMARISE a failure
1173
1173
  # (:func:`AgentServer._spawn_plain_runner_failure_summary`), never to
1174
1174
  # decide pass/fail. Defaults to ``False`` — the same "unrecognized kwarg
1175
1175
  # 400s a config-free/older agent" discipline every other optional field
@@ -1178,6 +1178,10 @@ class AssignmentSpec:
1178
1178
  # actual default-on policy) opts a leg into this path; every other
1179
1179
  # assignment type, and any caller that predates this field, is
1180
1180
  # completely unaffected.
1181
+ #
1182
+ # #3736: ``smoke_needs_judgement`` is no longer a second gate on this —
1183
+ # see that field's own docstring below for why every plain-runner leg,
1184
+ # judgement-needing or not, now takes this subprocess path.
1181
1185
  plain_runner: bool = False
1182
1186
  # #3673: the resolved shell command a plain-runner leg executes
1183
1187
  # (``coord.smoke.resolve_smoke_command``'s result, carried structurally
@@ -1199,10 +1203,17 @@ class AssignmentSpec:
1199
1203
  smoke_timeout_s: float | None = None
1200
1204
  # #3673: True when this leg's required capabilities need genuine
1201
1205
  # judgement rather than a bare exit code (GUI/real-host drivers — see
1202
- # ``coord.smoke.smoke_needs_judgement``). ``_spawn`` falls through to
1203
- # the ordinary ``claude -p`` chat path whenever this is True, even if
1204
- # ``plain_runner`` is also True — the opt-out, not a second on/off
1205
- # switch of its own.
1206
+ # ``coord.smoke.smoke_needs_judgement``). Still carried on the wire and
1207
+ # still read by ``coord.smoke``'s own dispatch bookkeeping, but #3736
1208
+ # removed its use as a SECOND gate in ``_spawn``: it no longer routes a
1209
+ # leg to the ordinary ``claude -p`` chat path on its own.
1210
+ # ``SMOKE_SYSTEM_PROMPT`` (``coord.smoke``) has no actual GUI/real-host
1211
+ # judgement logic beyond polling the same command and reading its exit
1212
+ # code, so a judgement-needing leg gains nothing from that path that the
1213
+ # plain-runner subprocess doesn't already do — while losing the Bash
1214
+ # tool's 600s ceiling, which a long judgement-needing build (e.g. a cold
1215
+ # Windows cross-compile) can exceed and get backgrounded-and-abandoned
1216
+ # into a #2244 no-verdict park (see ``_spawn``'s own comment for detail).
1206
1217
  smoke_needs_judgement: bool = False
1207
1218
  # #3681: opts a ``type="work"`` leg into running as a Claude Code
1208
1219
  # *workflow* — multiple agents (implement → adversarial review → fix)
@@ -6462,8 +6473,10 @@ def _user_message_line(text: str) -> bytes:
6462
6473
  # session) and derives the verdict from the exit code alone. An LLM session
6463
6474
  # is spawned only to SUMMARISE a failure for a human-readable report — never
6464
6475
  # to decide pass/fail — via `AgentServer._spawn_plain_runner_failure_summary`.
6465
- # `coord.smoke.smoke_needs_judgement` is the opt-out for GUI/real-host-driver
6466
- # specs that genuinely need more than an exit code.
6476
+ # #3736: every `plain_runner` leg takes this path, including one
6477
+ # `coord.smoke.smoke_needs_judgement` flags as GUI/real-host-driver — see
6478
+ # `AgentServer._spawn`'s routing comment for why that stopped being a
6479
+ # second gate.
6467
6480
 
6468
6481
  #: How much of a plain-runner command's combined stdout+stderr survives into
6469
6482
  #: the leg's log (and, on failure, the summary request) — generous enough to
@@ -10439,6 +10452,25 @@ class AgentServer:
10439
10452
  _log.exception(
10440
10453
  "plain-runner smoke %s: execute_plain_runner_smoke raised", assignment.id,
10441
10454
  )
10455
+ # #3736: write the SAME `SMOKE:` marker vocabulary the normal
10456
+ # path writes, even on this crash branch — `_fail` alone sets
10457
+ # the assignment FAILED but writes nothing to the log, which
10458
+ # left `coord.progress.parse_smoke_verdict_from_log` (read via
10459
+ # `coord.notify._smoke_worker_verdict`) with no marker to find
10460
+ # and the leg parked as a #2244 no-verdict rather than recorded
10461
+ # as a failure a human can act on. `_SMOKE_VERDICT_RE` is a
10462
+ # line-anchored `^SMOKE:\s*(pass|fail|baseline-red)\b\s*(.*)$`
10463
+ # match, so the free-text reason after `fail` here is read back
10464
+ # as the verdict's `reason` exactly like a `claude -p` worker's
10465
+ # own `SMOKE: fail <reason>` line.
10466
+ try:
10467
+ with open(assignment.log_path, "a", encoding="utf-8") as fh:
10468
+ fh.write(f"\nSMOKE: fail plain-runner smoke crashed: {exc}\n")
10469
+ except OSError:
10470
+ _log.exception(
10471
+ "plain-runner smoke %s: failed to write crash marker to log %s",
10472
+ assignment.id, assignment.log_path,
10473
+ )
10442
10474
  self._fail(assignment, f"plain-runner smoke crashed: {exc}")
10443
10475
  return
10444
10476
 
@@ -10544,16 +10576,35 @@ class AgentServer:
10544
10576
  # `_spawn` is ever reached.
10545
10577
  spec = assignment.spec
10546
10578
 
10547
- # #3673: the plain-runner path — a smoke leg this policy applies to
10548
- # never spawns `claude -p` for its verdict at all, so it must be
10549
- # checked before any provider resolution/argv-building below, which
10550
- # exists purely to build THAT spawn.
10551
- if (
10552
- spec.type == "smoke"
10553
- and spec.plain_runner
10554
- and not spec.smoke_needs_judgement
10555
- and spec.smoke_command
10556
- ):
10579
+ # #3673/#3736: the plain-runner path — a smoke leg this policy
10580
+ # applies to never spawns `claude -p` for its verdict at all, so it
10581
+ # must be checked before any provider resolution/argv-building below,
10582
+ # which exists purely to build THAT spawn.
10583
+ #
10584
+ # #3736: `smoke_needs_judgement` no longer excludes a leg from this
10585
+ # path. It used to (the `and not spec.smoke_needs_judgement` clause
10586
+ # that lived here routed a "judgement-needing" leg — in practice,
10587
+ # every default-config `windows` capability leg, e.g. quadraui's
10588
+ # win-msvc cross-compile smoke — through the ordinary `claude -p`
10589
+ # chat session instead). That session runs `SMOKE_SYSTEM_PROMPT`
10590
+ # (coord/smoke.py), which has no visual/interactive judgement logic
10591
+ # of its own: it polls the SAME command this subprocess path runs and
10592
+ # derives the SAME pass/fail from its exit code, just inside a
10593
+ # `claude -p` turn bounded by the Bash tool's 600s ceiling — long
10594
+ # enough for a cold cross-build that a worker then backgrounds and
10595
+ # abandons when it ends its (one-shot, non-resumable) turn to "wait
10596
+ # for a notification" that never arrives. The result was a #2244
10597
+ # no-verdict park with no `SMOKE:` marker ever written (quadraui#1616)
10598
+ # — exactly the failure mode `run_plain_runner_command`'s own
10599
+ # `subprocess.run(..., timeout=...)` call cannot have, since it never
10600
+ # runs inside a Claude Code tool call at all. This also closes the
10601
+ # #2085 split-brain with `coord.notify._is_plain_runner_leg`, which
10602
+ # already classified every leg here as plain-runner (`plain_runner`
10603
+ # rides the wire unconditionally True, per `coord.smoke.
10604
+ # _walk_candidates_and_dispatch`'s docstring) — that classification
10605
+ # now matches how the leg actually executes, for every leg, with no
10606
+ # change needed on the `coord.notify` side.
10607
+ if spec.type == "smoke" and spec.plain_runner and spec.smoke_command:
10557
10608
  self._run_plain_runner_smoke(assignment, repo_path)
10558
10609
  return
10559
10610
 
@@ -250,10 +250,34 @@ def detect_dead_end(state, *, can_waive_test_gate: bool = False) -> DeadEnd | No
250
250
  # symptom-not-cause failure #2235 exists to measure, and it is one
251
251
  # `mute_smoke_legs` call away from being avoided.
252
252
  if state.work_test_state == TEST_STATE_BLOCKED:
253
- from coord.smoke import mute_smoke_legs # noqa: PLC0415
253
+ from coord.smoke import ( # noqa: PLC0415
254
+ abandoned_background_smoke_legs,
255
+ mute_smoke_legs,
256
+ )
254
257
 
258
+ # #3737: a THIRD, unrelated cause parks the same value — N Test-stage
259
+ # legs in a row ended their one-shot turn with the smoke command
260
+ # still running in the background (no verdict marker, because the
261
+ # worker never came back to print one). Checked before the plain
262
+ # mute-leg tally since the two markers never co-occur in the same
263
+ # `test_reason`, but keeping the order explicit avoids depending on
264
+ # that.
265
+ abandoned_legs = abandoned_background_smoke_legs(state.work_test_reason)
255
266
  mute_legs = mute_smoke_legs(state.work_test_reason)
256
- if mute_legs:
267
+ if abandoned_legs:
268
+ cause = (
269
+ f"{abandoned_legs} Test-stage leg(s) in a row ended their "
270
+ "turn with the smoke command still running in the "
271
+ "background instead of to completion, exhausting the "
272
+ "#3737 retry budget (a separate budget from #2272's mute-"
273
+ "leg one, so this is not a report of a mute suite). Nothing "
274
+ "is known to be wrong with the BRANCH or the suite's "
275
+ "result — the worker backgrounded the smoke command past "
276
+ "its own turn and never reported an outcome. Re-dispatch "
277
+ "with an instruction to run the smoke command "
278
+ "SYNCHRONOUSLY to completion rather than backgrounding it."
279
+ )
280
+ elif mute_legs:
257
281
  cause = (
258
282
  f"{mute_legs} Test-stage leg(s) in a row finished without "
259
283
  "printing a `SMOKE:` verdict marker, exhausting the retry "
@@ -1363,19 +1363,44 @@ def _recover_test(
1363
1363
  ``coord diagnose --stage test`` is a separate entry point an operator
1364
1364
  runs by hand, and it must not disagree with the driver about whether the
1365
1365
  same row is wedged.
1366
+
1367
+ #3737: ``coord.dead_end`` shape 2 has a THIRD cause for the same
1368
+ ``blocked`` value — N Test-stage legs in a row ended their one-shot turn
1369
+ with the smoke command still running in the background, never printing a
1370
+ verdict marker — checked here too, in the same order, so this entry
1371
+ point never disagrees with the driver about why a row is wedged (#2096
1372
+ "one question, one answer").
1366
1373
  """
1367
1374
  from coord.smoke import TEST_STATE_BLOCKED # noqa: PLC0415
1368
1375
 
1369
1376
  if latest.test_state == TEST_STATE_BLOCKED:
1370
- from coord.smoke import mute_smoke_legs # noqa: PLC0415
1377
+ from coord.smoke import ( # noqa: PLC0415
1378
+ abandoned_background_smoke_legs,
1379
+ mute_smoke_legs,
1380
+ )
1371
1381
 
1372
- # Same predicate `coord.dead_end`'s shape 2 uses to tell #1672
1373
- # (unroutable fleet) apart from #2272 (mute Test-stage legs) — #2235
1374
- # exists to keep those two REASONS from blurring together, so this
1375
- # reuses the identical function rather than re-deriving the split
1376
- # (#2096 "one question, one answer").
1382
+ # Same predicates `coord.dead_end`'s shape 2 uses to tell #1672
1383
+ # (unroutable fleet) apart from #2272 (mute Test-stage legs) and
1384
+ # #3737 (abandoned-background legs) — #2235 exists to keep those
1385
+ # REASONS from blurring together, so this reuses the identical
1386
+ # functions, in the identical order, rather than re-deriving the
1387
+ # split (#2096 "one question, one answer").
1388
+ abandoned_legs = abandoned_background_smoke_legs(latest.test_reason)
1377
1389
  mute_legs = mute_smoke_legs(latest.test_reason)
1378
- if mute_legs:
1390
+ if abandoned_legs:
1391
+ cause = (
1392
+ f"{abandoned_legs} Test-stage leg(s) in a row ended their "
1393
+ "turn with the smoke command still running in the "
1394
+ "background instead of to completion, exhausting the "
1395
+ "#3737 retry budget (a separate budget from #2272's mute-"
1396
+ "leg one, so this is not a report of a mute suite). Nothing "
1397
+ "is known to be wrong with the BRANCH or the suite's "
1398
+ "result — the worker backgrounded the smoke command past "
1399
+ "its own turn and never reported an outcome. Re-dispatch "
1400
+ "with an instruction to run the smoke command SYNCHRONOUSLY "
1401
+ "to completion rather than backgrounding it."
1402
+ )
1403
+ elif mute_legs:
1379
1404
  cause = (
1380
1405
  f"{mute_legs} Test-stage leg(s) in a row finished without "
1381
1406
  "printing a `SMOKE:` verdict marker, exhausting the retry "
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import logging
6
+ import re
6
7
  import time
7
8
  from dataclasses import dataclass, field
8
9
  from pathlib import Path
@@ -66,6 +67,9 @@ from coord.progress import parse_progress
66
67
  from coord.smoke import MUTE_SMOKE_LEG_BUDGET, TEST_STATE_BLOCKED
67
68
  from coord.smoke import NO_SMOKE_VERDICT_MARKER as _NO_SMOKE_VERDICT_MARKER
68
69
  from coord.smoke import (
70
+ ABANDONED_BACKGROUND_SMOKE_BUDGET,
71
+ abandoned_background_smoke_legs,
72
+ abandoned_background_smoke_tally,
69
73
  finalize_smoke_fanout,
70
74
  mute_smoke_legs,
71
75
  mute_smoke_tally,
@@ -3343,6 +3347,69 @@ def _record_smoke_verdict(
3343
3347
  )
3344
3348
  return
3345
3349
 
3350
+ # #3737: a leg that ended its turn with the smoke command still running
3351
+ # in the background is an infra abort — the worker backgrounded a build
3352
+ # past its own turn and never came back to report it — not a genuinely
3353
+ # mute suite, so don't let it eat the #2272 budget meant for the latter.
3354
+ # `_is_plain_runner_leg` (#3693) legs have no `claude -p` session
3355
+ # narrating a hand-off at all, so they are excluded rather than risk a
3356
+ # false match against raw subprocess stdout.
3357
+ smoke_log_path = entry.get("log_path")
3358
+ if smoke_log_path and not _is_plain_runner_leg(entry):
3359
+ from coord.review import detect_abandoned_background_leg # noqa: PLC0415
3360
+
3361
+ if detect_abandoned_background_leg(smoke_log_path):
3362
+ previous_reason = load_assignment_test_reason(parent_id) or ""
3363
+ abandoned_legs = abandoned_background_smoke_legs(previous_reason) + 1
3364
+ if abandoned_legs >= ABANDONED_BACKGROUND_SMOKE_BUDGET:
3365
+ record_test_verdict(
3366
+ assignment_id=parent_id,
3367
+ test_state=TEST_STATE_BLOCKED,
3368
+ test_reason=(
3369
+ f"{abandoned_background_smoke_tally(abandoned_legs)}: "
3370
+ f"{abandoned_legs} Test-stage legs in a row ended "
3371
+ "their turn with the smoke command still running in "
3372
+ "the background instead of to completion — the "
3373
+ f"retry budget ({ABANDONED_BACKGROUND_SMOKE_BUDGET}) "
3374
+ "for that is exhausted, so the row is parked instead "
3375
+ "of re-dispatched (#3737). This is not a suite "
3376
+ "failure: the smoke command itself needs to finish "
3377
+ "inside the worker's one-shot turn (no backgrounding, "
3378
+ "no `run_in_background`). Recover with `coord "
3379
+ "diagnose <repo> <issue> --stage test --reset`, or "
3380
+ "record the verdict by hand with `coord test "
3381
+ f"--passed|--fail {parent_id}`."
3382
+ ),
3383
+ )
3384
+ log.warning(
3385
+ "smoke %s: #3737 abandoned-background retry budget "
3386
+ "(%d) exhausted for %s — parked %s.",
3387
+ transition.assignment_id, ABANDONED_BACKGROUND_SMOKE_BUDGET,
3388
+ parent_id, TEST_STATE_BLOCKED,
3389
+ )
3390
+ return
3391
+ record_test_verdict(
3392
+ assignment_id=parent_id,
3393
+ test_state=None,
3394
+ test_reason=(
3395
+ f"{abandoned_background_smoke_tally(abandoned_legs)}: the "
3396
+ f"Test-stage worker {transition.assignment_id} ended its "
3397
+ "turn with the smoke command still running in the "
3398
+ "background instead of to completion — an infra abort, "
3399
+ "not a verdict (#3737). Cleared for an automatic "
3400
+ "Test-stage re-dispatch; run the smoke command "
3401
+ "SYNCHRONOUSLY to completion this time rather than "
3402
+ "backgrounding it."
3403
+ ),
3404
+ )
3405
+ log.info(
3406
+ "smoke %s: #3737 abandoned-background leg %d/%d — cleared "
3407
+ "for re-dispatch, not counted against the #2272 mute budget.",
3408
+ transition.assignment_id, abandoned_legs,
3409
+ ABANDONED_BACKGROUND_SMOKE_BUDGET,
3410
+ )
3411
+ return
3412
+
3346
3413
  # #2272: count the legs, don't just test for the marker's presence. The
3347
3414
  # tally lives at the FRONT of `test_reason` so a bounded `/board` preview
3348
3415
  # still carries it, and `dispatch_smoke` re-states it across the `running`
@@ -1040,6 +1040,97 @@ def parse_test_verdict_from_log(log_path: str | Path) -> TestVerdictFindings | N
1040
1040
  return _parse_test_verdict_from_lines(text.splitlines(), stream_json=False)
1041
1041
 
1042
1042
 
1043
+ # ── Abandoned-background Test-stage legs (#3737) ────────────────────────────
1044
+ #
1045
+ # A Test-stage leg that ends its one-shot turn with the smoke command still
1046
+ # running in the background — session terminated, no `SMOKE:`/
1047
+ # `TEST_VERDICT:` marker printed — is an infra abort (the worker backgrounded
1048
+ # a run past its own turn and never came back to report it), not a genuine
1049
+ # "the suite won't speak". Left undetected it is indistinguishable from the
1050
+ # latter and charges the same #2272 mute-leg retry budget, so two
1051
+ # backgrounded legs in a row park a branch that was never actually silent.
1052
+ #
1053
+ # The signature is the worker's own hand-off sentence, which is always the
1054
+ # LAST assistant turn of a session that ends this way (quadraui#1616: "Smoke
1055
+ # suite is running in the background; I'll continue once the background
1056
+ # watcher notifies me", "still running in the background, will continue
1057
+ # when notified"). Scanning only the final turn — mirrors
1058
+ # :func:`coord.worker_events.detect_usage_limit_kill`'s "last meaningful
1059
+ # turn/line only" discipline — avoids false-positiving on a worker that
1060
+ # merely discusses backgrounding mid-session before going on to print a
1061
+ # real verdict later in the same transcript.
1062
+ #
1063
+ # Plain-text logs have no structured turn boundary to scan exactly, so
1064
+ # `detect_abandoned_background_leg` approximates "the final turn" with the
1065
+ # last `_ABANDONED_BACKGROUND_TAIL_LINES` non-blank, non-comment lines
1066
+ # instead (below) — wide enough to hold a multi-sentence hand-off without
1067
+ # reaching back far enough to catch an earlier, unrelated mention of
1068
+ # backgrounding. Stream-json logs (the common case) use the real turn
1069
+ # boundary via `coord.worker_events.latest_assistant_turn_text`.
1070
+ #
1071
+ # Deliberately narrow: this matches only the specific "running in the
1072
+ # background ... continue/notify/watcher/wait" hand-off shape quadraui#1616
1073
+ # actually produced, not every way a worker might phrase "I backgrounded
1074
+ # this". A differently-worded hand-off falls through to the #2272 mute-leg
1075
+ # accounting instead (an undercount, not a false positive) — acceptable
1076
+ # because #2272 still eventually parks the row, just under the wrong cause
1077
+ # text. Widen the pattern if a real transcript is seen phrasing this
1078
+ # differently, rather than guessing at alternate phrasings up front.
1079
+ _ABANDONED_BACKGROUND_RE = re.compile(
1080
+ r"\brunning\s+in\s+the\s+background\b[\s\S]{0,200}?"
1081
+ r"\b(?:continu\w*|notif\w*|watcher|wait\w*)\b",
1082
+ re.IGNORECASE,
1083
+ )
1084
+
1085
+ _ABANDONED_BACKGROUND_TAIL_LINES = 40
1086
+
1087
+
1088
+ def _is_abandoned_background_text(text: str | None) -> bool:
1089
+ """``True`` if *text* — one assistant turn's worth of prose, or an
1090
+ equivalent plain-text tail — is the hand-off a one-shot worker leaves
1091
+ when its session ends with the smoke command still running in the
1092
+ background rather than run to completion."""
1093
+ if not text:
1094
+ return False
1095
+ return bool(_ABANDONED_BACKGROUND_RE.search(text))
1096
+
1097
+
1098
+ def detect_abandoned_background_leg(log_path: str | Path) -> bool:
1099
+ """#3737: did this completed Test-stage leg end its turn with the smoke
1100
+ command still running in the background, instead of to completion?
1101
+
1102
+ Sibling to :func:`parse_test_verdict_from_log`: same stream-json/
1103
+ plain-text on-disk-shape detection (:func:`coord.worker_events.
1104
+ is_stream_json`), so the two can never disagree about which parser a
1105
+ given log needs. Returns ``False`` — never raises, never guesses "True"
1106
+ — when the file is missing or unreadable, so a detection failure falls
1107
+ through to the ordinary mute-leg accounting rather than silently
1108
+ forgiving a genuinely mute suite.
1109
+ """
1110
+ from coord.worker_events import ( # noqa: PLC0415
1111
+ is_stream_json,
1112
+ latest_assistant_turn_text,
1113
+ )
1114
+
1115
+ p = Path(log_path)
1116
+ if not p.exists():
1117
+ return False
1118
+
1119
+ if is_stream_json(p):
1120
+ return _is_abandoned_background_text(latest_assistant_turn_text(p))
1121
+
1122
+ try:
1123
+ text = p.read_text(encoding="utf-8", errors="replace")
1124
+ except OSError:
1125
+ return False
1126
+ lines = [
1127
+ line for line in text.splitlines()
1128
+ if line.strip() and not line.strip().startswith("#")
1129
+ ]
1130
+ tail = "\n".join(lines[-_ABANDONED_BACKGROUND_TAIL_LINES:])
1131
+ return _is_abandoned_background_text(tail)
1132
+
1133
+
1043
1134
  # #3676: cross-repo gaps are the coordinator's to file. A worker that hits a
1044
1135
  # capability missing from another repo emits a `BLOCKED_ON_UPSTREAM: <repo>:
1045
1136
  # <title>` marker in its final message (`coord.upstream_gaps`), and the
@@ -2333,6 +2333,74 @@ def environmental_smoke_tally_reset(test_reason: str | None) -> str:
2333
2333
  return _ENV_RETRY_TALLY_RE.sub("", test_reason).rstrip()
2334
2334
 
2335
2335
 
2336
+ # ── Abandoned-background Test-stage retries (#3737) ─────────────────────────
2337
+ #
2338
+ # A Test-stage leg that ends its one-shot turn with the smoke command still
2339
+ # running in the background — session terminated, no `SMOKE:` marker printed
2340
+ # — is an infra abort (the worker backgrounded a long build past its own
2341
+ # turn and never came back to report an outcome), not a genuinely mute
2342
+ # suite. `coord.notify._record_smoke_verdict` detects the hand-off
2343
+ # (`coord.review.detect_abandoned_background_leg`) and clears the leg for an
2344
+ # automatic re-dispatch without charging `MUTE_SMOKE_LEG_BUDGET` — but that
2345
+ # clear still needs its OWN bounded budget (below), for exactly the #2272/
2346
+ # #3315 reason: a cause the system cannot diagnose must still be a cause the
2347
+ # system stops paying for. Co-located here with `NO_SMOKE_VERDICT_MARKER`/
2348
+ # `ENVIRONMENTAL_SMOKE_MARKER` — not in `coord.notify`, where this used to
2349
+ # live — because `_dispatch_smoke_single_leg`'s `running` stamp just below is
2350
+ # the SAME writer that has to carry `mute_smoke_legs`/`environmental_smoke_
2351
+ # legs` forward across its own re-dispatch, and a marker read by that writer
2352
+ # but defined in a different module is exactly how the #2272 defect (the
2353
+ # tally erased by the very retry it existed to count) happened in the first
2354
+ # place.
2355
+
2356
+ #: The marker left in the parent work row's ``test_reason`` when a Test-stage
2357
+ #: leg is cleared for re-dispatch because it ended with the smoke command
2358
+ #: still backgrounded, rather than because the suite was genuinely mute.
2359
+ #: Suffixed with `` xN`` from the second CONSECUTIVE leg on, mirroring
2360
+ #: :func:`mute_smoke_tally`.
2361
+ ABANDONED_BACKGROUND_SMOKE_MARKER = "abandoned-background (#3737)"
2362
+
2363
+ #: Bounded separately from `MUTE_SMOKE_LEG_BUDGET` — a direct "run it
2364
+ #: synchronously" re-dispatch instruction is more likely to self-heal than a
2365
+ #: genuinely silent suite, so it gets a little more room, but a cause the
2366
+ #: system cannot diagnose must still be a cause the system stops paying for
2367
+ #: (#3315's own rationale, applied here to a different cause).
2368
+ ABANDONED_BACKGROUND_SMOKE_BUDGET = 3
2369
+
2370
+ #: Matches the marker with or without its `` xN`` tally — mirrors
2371
+ #: :data:`_MUTE_TALLY_RE`.
2372
+ _ABANDONED_BACKGROUND_TALLY_RE = re.compile(
2373
+ re.escape(ABANDONED_BACKGROUND_SMOKE_MARKER) + r"(?:\s*x\s*(\d+))?",
2374
+ re.IGNORECASE,
2375
+ )
2376
+
2377
+
2378
+ def abandoned_background_smoke_legs(test_reason: str | None) -> int:
2379
+ """How many CONSECUTIVE Test-stage legs in a row ended with the #3737
2380
+ abandoned-background hand-off (0 if none) — mirrors
2381
+ :func:`mute_smoke_legs`."""
2382
+ if not test_reason:
2383
+ return 0
2384
+ match = _ABANDONED_BACKGROUND_TALLY_RE.search(test_reason)
2385
+ if match is None:
2386
+ return 0
2387
+ raw = match.group(1)
2388
+ if raw is None:
2389
+ return 1
2390
+ try:
2391
+ return max(1, int(raw))
2392
+ except ValueError: # pragma: no cover — regex only matches digits
2393
+ return 1
2394
+
2395
+
2396
+ def abandoned_background_smoke_tally(count: int) -> str:
2397
+ """The marker for *count* consecutive abandoned-background legs — mirrors
2398
+ :func:`mute_smoke_tally`."""
2399
+ if count <= 1:
2400
+ return ABANDONED_BACKGROUND_SMOKE_MARKER
2401
+ return f"{ABANDONED_BACKGROUND_SMOKE_MARKER} x{count}"
2402
+
2403
+
2336
2404
  #: Soft (transient) unroutable reports already logged this process, keyed by
2337
2405
  #: ``(assignment_id, message)``. Transient conditions — a machine that is
2338
2406
  #: merely unreachable right now — are left re-dispatchable so the stage
@@ -2775,8 +2843,13 @@ def _walk_candidates_and_dispatch(
2775
2843
  session) instead of the briefing-driven chat the SMOKE_SYSTEM_PROMPT
2776
2844
  above describes. `plain_runner` is unconditionally `True` on every
2777
2845
  dispatch this function makes — #3673's "make the Test stage a plain
2778
- runner by default" policy — with `smoke_needs_judgement` as the one
2779
- opt-out (GUI/real-host-driver specs, :func:`smoke_needs_judgement`); the
2846
+ runner by default" policy. `smoke_needs_judgement` still rides along
2847
+ (GUI/real-host-driver specs, :func:`smoke_needs_judgement`) and is still
2848
+ read by this module's own dispatch bookkeeping, but #3736 removed its
2849
+ use in `_spawn` as a second gate: every `plain_runner` leg takes the
2850
+ subprocess path regardless, since `SMOKE_SYSTEM_PROMPT`'s chat path has
2851
+ no judgement logic of its own beyond polling the same command's exit
2852
+ code, and loses the Bash tool's 600s ceiling for nothing in return. The
2780
2853
  briefing text is sent either way so a plain-runner-ineligible agent (one
2781
2854
  whose `default_worker_command` predates #3673, or any OTHER assignment
2782
2855
  type reusing this wire shape) still gets a fully-formed `claude -p`
@@ -3636,6 +3709,16 @@ def _dispatch_smoke_single_leg(
3636
3709
  environmental_smoke_legs(authoritative_reason),
3637
3710
  environmental_smoke_legs(board_reason),
3638
3711
  )
3712
+ # #3737: ...and this stamp must ALSO carry the ABANDONED-BACKGROUND
3713
+ # tally forward, for the identical #2272 reason above — without
3714
+ # re-stating it here, this same "running" write erases it on every
3715
+ # retry and the #3737 budget below (`_record_smoke_verdict`'s
3716
+ # abandoned-background branch) can never be reached: the row would
3717
+ # re-dispatch forever at full leg cost instead of eventually parking.
3718
+ prior_abandoned_legs = max(
3719
+ abandoned_background_smoke_legs(authoritative_reason),
3720
+ abandoned_background_smoke_legs(board_reason),
3721
+ )
3639
3722
  running_reason = "dispatched: Test stage running (#1426)"
3640
3723
  if prior_legs:
3641
3724
  running_reason = (
@@ -3650,6 +3733,13 @@ def _dispatch_smoke_single_leg(
3650
3733
  f"{ENVIRONMENTAL_SMOKE_RETRY_BUDGET} consecutive "
3651
3734
  "environmental Test-stage death(s) so far, #3315)"
3652
3735
  )
3736
+ if prior_abandoned_legs:
3737
+ running_reason = (
3738
+ f"{abandoned_background_smoke_tally(prior_abandoned_legs)} — "
3739
+ f"{running_reason} ({prior_abandoned_legs} of "
3740
+ f"{ABANDONED_BACKGROUND_SMOKE_BUDGET} consecutive "
3741
+ "abandoned-background Test-stage leg(s) so far, #3737)"
3742
+ )
3653
3743
 
3654
3744
  record_test_verdict(
3655
3745
  assignment_id=completed.assignment_id,
@@ -1501,10 +1501,13 @@ def _reclassify_infra_test_failure(
1501
1501
  a second, unbounded retry path. The tally is read back out of the row's
1502
1502
  OWN current ``test_reason`` (the one field that survives from leg to
1503
1503
  leg), exactly mirroring that function's non-fan-out branch, including
1504
- carrying the #2272 mute-leg tally forward (:func:`coord.smoke.
1505
- mute_smoke_legs`/``mute_smoke_tally``) so a row that alternates "mute
1506
- leg" / "infra death" keeps counting against both budgets instead of
1507
- resetting one every time the other fires.
1504
+ carrying the #2272 mute-leg tally AND the #3737 abandoned-background
1505
+ tally forward (:func:`coord.smoke.mute_smoke_legs`/``mute_smoke_tally``,
1506
+ :func:`coord.smoke.abandoned_background_smoke_legs`/
1507
+ ``abandoned_background_smoke_tally``) so a row that alternates between
1508
+ any of "mute leg" / "infra death" / "abandoned background" keeps
1509
+ counting against every applicable budget instead of resetting one every
1510
+ time another fires.
1508
1511
 
1509
1512
  #3670 review: when *test_reason* is the #3182 fan-out PARENT's own
1510
1513
  write (:func:`coord.smoke.finalize_smoke_fanout` stamping the aggregate
@@ -1530,6 +1533,8 @@ def _reclassify_infra_test_failure(
1530
1533
  TEST_STATE_BLOCKED,
1531
1534
  _encode_fanout_manifest,
1532
1535
  _parse_fanout_manifest,
1536
+ abandoned_background_smoke_legs,
1537
+ abandoned_background_smoke_tally,
1533
1538
  environmental_smoke_legs,
1534
1539
  environmental_smoke_tally,
1535
1540
  mute_smoke_legs,
@@ -1579,13 +1584,25 @@ def _reclassify_infra_test_failure(
1579
1584
  carried = mute_smoke_legs(previous_reason)
1580
1585
  mute_prefix = f"{mute_smoke_tally(carried)} — " if carried else ""
1581
1586
 
1587
+ # #3737: carry the abandoned-background tally forward too, for the
1588
+ # identical #2272 reason the mute-leg tally is carried above — this
1589
+ # reclassify path is a second writer of `test_reason` on the SAME row a
1590
+ # #3737 budget is accruing against, and without re-stating it here it
1591
+ # would be silently erased the next time an infra death reclassifies in
1592
+ # between two abandoned-background legs.
1593
+ abandoned_carried = abandoned_background_smoke_legs(previous_reason)
1594
+ abandoned_prefix = (
1595
+ f"{abandoned_background_smoke_tally(abandoned_carried)} — "
1596
+ if abandoned_carried else ""
1597
+ )
1598
+
1582
1599
  env_legs = environmental_smoke_legs(previous_reason) + 1
1583
1600
 
1584
1601
  if env_legs >= ENVIRONMENTAL_SMOKE_RETRY_BUDGET:
1585
1602
  return (
1586
1603
  TEST_STATE_BLOCKED,
1587
1604
  (
1588
- f"{manifest_prefix}{mute_prefix}"
1605
+ f"{manifest_prefix}{mute_prefix}{abandoned_prefix}"
1589
1606
  f"{environmental_smoke_tally(env_legs)}: the Test-stage "
1590
1607
  f"environmental retry budget "
1591
1608
  f"({ENVIRONMENTAL_SMOKE_RETRY_BUDGET}) is exhausted after "
@@ -1602,7 +1619,7 @@ def _reclassify_infra_test_failure(
1602
1619
  return (
1603
1620
  None,
1604
1621
  (
1605
- f"{manifest_prefix}{mute_prefix}"
1622
+ f"{manifest_prefix}{mute_prefix}{abandoned_prefix}"
1606
1623
  f"{environmental_smoke_tally(env_legs)}: Test-stage failure "
1607
1624
  f"reclassified as infrastructure, not a test result ({cause}) "
1608
1625
  "— cleared for automatic re-dispatch, not recorded as a work "