code-coordinator 0.5.656__tar.gz → 0.5.658__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 (982) hide show
  1. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.658/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dead_end.py +26 -2
  5. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/diagnose.py +32 -7
  6. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notify.py +67 -0
  7. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/review.py +91 -0
  8. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/smoke.py +85 -0
  9. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/state.py +30 -7
  10. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dead_end.py +31 -0
  11. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_diagnose.py +25 -0
  12. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_fix.py +29 -1
  13. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notify.py +140 -0
  14. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke.py +40 -0
  15. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_state.py +49 -0
  16. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_verdict_parsing.py +82 -1
  17. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_throwaway_vm.py +120 -30
  18. code_coordinator-0.5.656/code_coordinator.egg-info/scm_version.json +0 -8
  19. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/board.md +0 -0
  20. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/complete-session.md +0 -0
  21. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/coordinator.md +0 -0
  22. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/_lib.sh +0 -0
  23. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-checkout +0 -0
  24. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-commit +0 -0
  25. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-merge +0 -0
  26. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/coord-ci-acceptance.yml +0 -0
  28. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/auto-release.yml +0 -0
  29. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/test.yml +0 -0
  31. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.gitignore +0 -0
  32. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/CLAUDE.md +0 -0
  33. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/GOAL.md +0 -0
  34. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/LICENSE +0 -0
  35. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/MANIFEST.in +0 -0
  36. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/README.md +0 -0
  37. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/SOURCES.txt +0 -0
  38. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/dependency_links.txt +0 -0
  39. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/entry_points.txt +0 -0
  40. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/requires.txt +0 -0
  41. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/scm_file_list.json +0 -0
  42. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/top_level.txt +0 -0
  43. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/__init__.py +0 -0
  44. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/_board_mapping.py +0 -0
  45. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/acceptance.py +0 -0
  46. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/acceptance_drivers.py +0 -0
  47. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent.py +0 -0
  48. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent_app.py +0 -0
  49. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent_update.py +0 -0
  50. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/.gitignore +0 -0
  51. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/agents/work.md +0 -0
  52. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/routing.jsonc +0 -0
  53. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/app_drive.py +0 -0
  54. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/app_drive_daemon.py +0 -0
  55. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/approved_work.py +0 -0
  56. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/backup.py +0 -0
  59. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/block_log.py +0 -0
  60. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_schema.py +0 -0
  61. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/briefing_lessons.py +0 -0
  66. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/bug_intake.py +0 -0
  67. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/bugbash.py +0 -0
  68. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/cargo_cache.py +0 -0
  69. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_fix.py +0 -0
  70. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_github.py +0 -0
  71. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_gitlab.py +0 -0
  72. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_store.py +0 -0
  73. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/claim.py +0 -0
  74. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/claude_setup_token.py +0 -0
  75. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/cli.py +0 -0
  76. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/client.py +0 -0
  77. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/codegen.py +0 -0
  78. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/__init__.py +0 -0
  79. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/_common.py +0 -0
  80. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/acceptance.py +0 -0
  81. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/agent_ops.py +0 -0
  82. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/app_drive.py +0 -0
  83. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/audit.py +0 -0
  84. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/backup.py +0 -0
  85. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/bugbash.py +0 -0
  86. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/chat.py +0 -0
  87. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/ci.py +0 -0
  88. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/codegen.py +0 -0
  89. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dispatch.py +0 -0
  90. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dispatch_workers.py +0 -0
  91. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dr.py +0 -0
  92. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/drive.py +0 -0
  93. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/drive_queue.py +0 -0
  94. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/gate_a.py +0 -0
  95. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/gates.py +0 -0
  96. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/issues.py +0 -0
  97. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/lifecycle.py +0 -0
  98. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/machine.py +0 -0
  99. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/merge.py +0 -0
  100. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/milestone.py +0 -0
  101. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/plan_followup.py +0 -0
  102. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/plans.py +0 -0
  103. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/portal.py +0 -0
  104. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/pr.py +0 -0
  105. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/release.py +0 -0
  106. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/repo.py +0 -0
  107. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/report.py +0 -0
  108. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/review.py +0 -0
  109. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/scorecard.py +0 -0
  110. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/sessions.py +0 -0
  111. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/setup.py +0 -0
  112. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/smoke.py +0 -0
  113. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/status.py +0 -0
  114. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/store_migrate.py +0 -0
  115. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/terminal.py +0 -0
  116. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/test_gate.py +0 -0
  117. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/tui.py +0 -0
  118. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/comments.py +0 -0
  119. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/config.py +0 -0
  120. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/config_reload.py +0 -0
  121. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/confirm_test.py +0 -0
  122. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/conflict_fix.py +0 -0
  123. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dao.py +0 -0
  124. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/__init__.py +0 -0
  125. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/fixture.py +0 -0
  126. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/index.html +0 -0
  127. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/reports.html +0 -0
  128. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/server.py +0 -0
  129. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/terminal.py +0 -0
  130. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/db.py +0 -0
  131. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/decomposition_chat.py +0 -0
  132. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/README.md +0 -0
  133. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-agent.service +0 -0
  134. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-backup.service +0 -0
  135. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-backup.timer +0 -0
  136. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.service +0 -0
  137. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.sh +0 -0
  138. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.timer +0 -0
  139. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-dr-verify.service +0 -0
  140. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-dr-verify.timer +0 -0
  141. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-drive-queue.service +0 -0
  142. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-drive-queue.timer +0 -0
  143. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-failure-notify.service +0 -0
  144. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-fleet-watchdog.service +0 -0
  145. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  146. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-nightly-smoke.service +0 -0
  147. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-nightly-smoke.timer +0 -0
  148. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-notify.service +0 -0
  149. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-notify.timer +0 -0
  150. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-propagate.service +0 -0
  151. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-propagate.timer +0 -0
  152. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-window.service +0 -0
  153. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-window.timer +0 -0
  154. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-serve.service +0 -0
  155. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web-dist-build.service +0 -0
  156. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web-dist-build.timer +0 -0
  157. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web.service +0 -0
  158. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy_manifest.py +0 -0
  159. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy_units.py +0 -0
  160. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deprecation_telemetry.py +0 -0
  161. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deps.py +0 -0
  162. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dirlink.py +0 -0
  163. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dispatch.py +0 -0
  164. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dispatch_liveness.py +0 -0
  165. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dist_name.py +0 -0
  166. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dr_promote.py +0 -0
  167. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dr_verify.py +0 -0
  168. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive.py +0 -0
  169. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_queue.py +0 -0
  170. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_sessions_snapshot.py +0 -0
  171. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_state.py +0 -0
  172. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/events.py +0 -0
  173. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/failure_class.py +0 -0
  174. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/failure_classifier.py +0 -0
  175. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/filelock.py +0 -0
  176. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/fleet_config_health.py +0 -0
  177. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/forge_availability.py +0 -0
  178. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/freshness.py +0 -0
  179. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_a.py +0 -0
  180. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_b.py +0 -0
  181. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_snapshot.py +0 -0
  182. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gates.py +0 -0
  183. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gen_board_fixture.py +0 -0
  184. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/github_ops.py +0 -0
  185. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/github_throttle.py +0 -0
  186. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/goal.py +0 -0
  187. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/graph_health.py +0 -0
  188. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gtk_native_driver.py +0 -0
  189. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/__init__.py +0 -0
  190. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/aggregate.py +0 -0
  191. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/__init__.py +0 -0
  192. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/_ci_pin.py +0 -0
  193. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/agent_install.py +0 -0
  194. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/cargo_targets.py +0 -0
  195. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/claude_binary.py +0 -0
  196. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/config_drift.py +0 -0
  197. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  198. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/coord_web_ci_pin.py +0 -0
  199. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/deploy_lane_facts.py +0 -0
  200. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/disk.py +0 -0
  201. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_board.py +0 -0
  202. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  203. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_phantom.py +0 -0
  204. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_unit_drift.py +0 -0
  205. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/graph.py +0 -0
  206. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/graphify_cli.py +0 -0
  207. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/gui_lane_preflight.py +0 -0
  208. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/index_lock.py +0 -0
  209. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/issues_sync_staleness.py +0 -0
  210. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/local_machine_identity.py +0 -0
  211. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/plan_usage.py +0 -0
  212. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/pr_churn.py +0 -0
  213. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/release_cordon.py +0 -0
  214. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/repo_state.py +0 -0
  215. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/spawned_coord.py +0 -0
  216. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/stalled_pipeline.py +0 -0
  217. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/timer_active.py +0 -0
  218. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/toolchain.py +0 -0
  219. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/unit_drift.py +0 -0
  220. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/unit_enablement.py +0 -0
  221. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/wedged_drive_queue.py +0 -0
  222. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/worktrees.py +0 -0
  223. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/cli.py +0 -0
  224. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/context.py +0 -0
  225. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/fleet_snapshot.py +0 -0
  226. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/models.py +0 -0
  227. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/pypi.py +0 -0
  228. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/registry.py +0 -0
  229. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/render.py +0 -0
  230. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/units.py +0 -0
  231. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/hooks.py +0 -0
  232. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/housekeeping.py +0 -0
  233. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/interactive.py +0 -0
  234. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/invariant_alarms.py +0 -0
  235. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/issue_store.py +0 -0
  236. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/issues_sync_status.py +0 -0
  237. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/key_spec.py +0 -0
  238. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/liveness_auditor.py +0 -0
  239. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/mac_native_driver.py +0 -0
  240. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_fault.py +0 -0
  241. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_metrics.py +0 -0
  242. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_onboard.py +0 -0
  243. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_pause.py +0 -0
  244. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_stats.py +0 -0
  245. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/merge_queue.py +0 -0
  246. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_chat.py +0 -0
  247. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_dispatch.py +0 -0
  248. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_gate.py +0 -0
  249. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_order.py +0 -0
  250. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/mock_author.py +0 -0
  251. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/models.py +0 -0
  252. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/native_fs_wait.py +0 -0
  253. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/native_pixels.py +0 -0
  254. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/network.py +0 -0
  255. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/new_issue_chat.py +0 -0
  256. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_runner.py +0 -0
  257. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_smoke.py +0 -0
  258. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_status.py +0 -0
  259. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_store.py +0 -0
  260. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/__init__.py +0 -0
  261. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/baseline.py +0 -0
  262. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/cli.py +0 -0
  263. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/collect.py +0 -0
  264. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/digest.py +0 -0
  265. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/models.py +0 -0
  266. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/predicate.py +0 -0
  267. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/service.py +0 -0
  268. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/store.py +0 -0
  269. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/transport.py +0 -0
  270. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/openapi.py +0 -0
  271. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/overlap_fence.py +0 -0
  272. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/overlap_predict.py +0 -0
  273. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/parentage.py +0 -0
  274. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/parentage_github.py +0 -0
  275. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/pipeline.py +0 -0
  276. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/plan_parser.py +0 -0
  277. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/plans.py +0 -0
  278. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/platform_paths.py +0 -0
  279. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_bridge.py +0 -0
  280. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_store.py +0 -0
  281. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_sync.py +0 -0
  282. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/pr_body_lint.py +0 -0
  283. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/prereqs.py +0 -0
  284. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/prereview_gate.py +0 -0
  285. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/progress.py +0 -0
  286. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/__init__.py +0 -0
  287. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/base.py +0 -0
  288. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/claude.py +0 -0
  289. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/claude_pty.py +0 -0
  290. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/opencode.py +0 -0
  291. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/queue_diagnose.py +0 -0
  292. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reconcile.py +0 -0
  293. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reconcile_tick.py +0 -0
  294. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/refine_chat.py +0 -0
  295. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_cordon.py +0 -0
  296. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_gate.py +0 -0
  297. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_propagate.py +0 -0
  298. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_verify.py +0 -0
  299. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_window.py +0 -0
  300. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_dormancy.py +0 -0
  301. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_edit.py +0 -0
  302. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_onboard.py +0 -0
  303. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reports.py +0 -0
  304. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/rest_schema.py +0 -0
  305. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/restart_cmd.py +0 -0
  306. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/revalidate.py +0 -0
  307. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/scorecard.py +0 -0
  308. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/self_health.py +0 -0
  309. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/serve_app.py +0 -0
  310. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/shell_exec_wrap.py +0 -0
  311. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  312. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  313. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  314. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  315. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  316. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/portal-followup/SKILL.md +0 -0
  317. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/release-now/SKILL.md +0 -0
  318. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  319. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  320. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/update-issue/SKILL.md +0 -0
  321. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/smoke_tags.py +0 -0
  322. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/spend_ceiling.py +0 -0
  323. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/split_work.py +0 -0
  324. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/sql.py +0 -0
  325. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/stage_projection.py +0 -0
  326. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/store_migrate.py +0 -0
  327. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/store_parity.py +0 -0
  328. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/templates/deploy-cloudflare.node.yml +0 -0
  329. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_author.py +0 -0
  330. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_chat.py +0 -0
  331. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_orchestrator.py +0 -0
  332. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_report.py +0 -0
  333. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/tui_pty_driver.py +0 -0
  334. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/tui_release.py +0 -0
  335. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/uat_checks.py +0 -0
  336. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/upstream_gaps.py +0 -0
  337. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage.py +0 -0
  338. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage_limits.py +0 -0
  339. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage_rollup.py +0 -0
  340. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/win_native_bridge.py +0 -0
  341. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/win_native_driver.py +0 -0
  342. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/worker_events.py +0 -0
  343. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coordinator.example.yml +0 -0
  344. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-agent.service +0 -0
  345. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-backup.service +0 -0
  346. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-backup.timer +0 -0
  347. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.service +0 -0
  348. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.sh +0 -0
  349. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.timer +0 -0
  350. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-dr-verify.service +0 -0
  351. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-dr-verify.timer +0 -0
  352. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-drive-queue.service +0 -0
  353. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-drive-queue.timer +0 -0
  354. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-failure-notify.service +0 -0
  355. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-failure-notify.sh +0 -0
  356. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-fleet-watchdog.service +0 -0
  357. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-fleet-watchdog.timer +0 -0
  358. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-nightly-smoke.service +0 -0
  359. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-nightly-smoke.timer +0 -0
  360. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-notify.service +0 -0
  361. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-notify.timer +0 -0
  362. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-propagate.service +0 -0
  363. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-propagate.timer +0 -0
  364. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-window.service +0 -0
  365. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-window.timer +0 -0
  366. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-serve.service +0 -0
  367. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.service +0 -0
  368. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.sh +0 -0
  369. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.timer +0 -0
  370. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-rollback.sh +0 -0
  371. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web.service +0 -0
  372. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/node-shim.sh +0 -0
  373. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_TUI_CI.md +0 -0
  374. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  375. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_CI.md +0 -0
  376. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_DIST.md +0 -0
  377. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  378. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/AGENT_OPERATIONS.md +0 -0
  379. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ARCHITECTURE.md +0 -0
  380. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ARCH_SECURITY_GATES.md +0 -0
  381. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/COCKPIT.md +0 -0
  382. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CONTROL_CENTER.md +0 -0
  383. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/COST_DISCIPLINE.md +0 -0
  384. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CROSS_PLATFORM.md +0 -0
  385. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CUSTOMER_FACING_APPS.md +0 -0
  386. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CUSTOMER_PORTAL.md +0 -0
  387. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DATA_STORE_SELECTION.md +0 -0
  388. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DISASTER_RECOVERY.md +0 -0
  389. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DRIVE_QUEUE.md +0 -0
  390. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/EPHEMERAL_WORKERS.md +0 -0
  391. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/FORGE_MIGRATION.md +0 -0
  392. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/GRAPHIFY_SETUP.md +0 -0
  393. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ISSUE_GUIDANCE.md +0 -0
  394. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/MAC_MINI.md +0 -0
  395. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  396. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/NOTIFIER.md +0 -0
  397. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPENCODE_VERIFICATION.md +0 -0
  398. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPERATING_GOTCHAS.md +0 -0
  399. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPERATOR_GUIDES.md +0 -0
  400. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ORACLE_LOOP.md +0 -0
  401. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PHONE_WEBAPP.md +0 -0
  402. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PIPELINE_V2.md +0 -0
  403. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PLATFORM_EVOLUTION.md +0 -0
  404. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/SECOND_BACKEND.md +0 -0
  405. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/STORE_SERVICE.md +0 -0
  406. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  407. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/WEB_CONTROL_CENTER.md +0 -0
  408. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/WSL_WINDOWS_WORKER.md +0 -0
  409. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/README.md +0 -0
  410. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/_tokens.css +0 -0
  411. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/issue-detail.html +0 -0
  412. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/pipeline-narrow.html +0 -0
  413. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/pipeline-wide.html +0 -0
  414. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/graphify-out/.gitignore +0 -0
  415. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/install-agent.sh +0 -0
  416. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/pyproject.toml +0 -0
  417. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/audit_review_verdict_overrides.py +0 -0
  418. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  419. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/build-worker-image.sh +0 -0
  420. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/coordinator-machine.py +0 -0
  421. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/dr-down.sh +0 -0
  422. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/dr-up.sh +0 -0
  423. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/epic-down.sh +0 -0
  424. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/epic-up.sh +0 -0
  425. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/preflight.sh +0 -0
  426. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/provision-server.sh +0 -0
  427. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/provision-worker.sh +0 -0
  428. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  429. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  430. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/throwaway-vm.sh +0 -0
  431. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/verify-github-token.sh +0 -0
  432. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/check_gh_argv_containment.py +0 -0
  433. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/codegen.py +0 -0
  434. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/comment_cruft.py +0 -0
  435. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-test-runner.sh +0 -0
  436. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  437. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  438. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  439. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  440. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-venv-rollback.sh +0 -0
  441. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/drive-batch.sh +0 -0
  442. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/extract-coord-tui.sh +0 -0
  443. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/fleet_watchdog.py +0 -0
  444. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/gen_board_fixture.py +0 -0
  445. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/gen_mock_index.py +0 -0
  446. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/lib/provision-core.sh +0 -0
  447. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/next_release_tag.py +0 -0
  448. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/provision-machine.sh +0 -0
  449. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/run_tests_in_populated_home.sh +0 -0
  450. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/run_tests_without_gh.sh +0 -0
  451. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/setup-macmini.sh +0 -0
  452. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/smoke_437_interactive.py +0 -0
  453. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify-provision-noble.sh +0 -0
  454. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_878_review_capture.py +0 -0
  455. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_release_published.py +0 -0
  456. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_release_wheel.py +0 -0
  457. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/setup.cfg +0 -0
  458. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/SMOKE_SET.md +0 -0
  459. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/__init__.py +0 -0
  460. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/conftest.py +0 -0
  461. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/contract.md +0 -0
  462. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/manifest.yml +0 -0
  463. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  464. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  465. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/contract.md +0 -0
  466. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  467. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  468. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/manifest.yml +0 -0
  469. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/tsconfig.json +0 -0
  471. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  472. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/backends.py +0 -0
  473. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/conftest.py +0 -0
  474. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/board-pipeline-basic.json +0 -0
  475. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  476. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  477. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  478. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  479. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/all_pass.json +0 -0
  480. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  481. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/mixed_fail.json +0 -0
  482. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  483. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  484. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/skip.json +0 -0
  485. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/truncated.json +0 -0
  486. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  487. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  488. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  489. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  490. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  491. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  492. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  493. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  494. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  495. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_acceptance.py +0 -0
  496. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_acceptance_drivers.py +0 -0
  497. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent.py +0 -0
  498. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_api_error.py +0 -0
  499. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_app.py +0 -0
  500. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_branch_base.py +0 -0
  501. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_branch_capture.py +0 -0
  502. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_config_free_1712.py +0 -0
  503. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_deploy_units_endpoint.py +0 -0
  504. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_dirty_worktree.py +0 -0
  505. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  506. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graceful_shutdown_3649.py +0 -0
  507. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graph_refresh.py +0 -0
  508. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graph_self_heal.py +0 -0
  509. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_health_h3.py +0 -0
  510. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_idle_restart.py +0 -0
  511. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_push_failure.py +0 -0
  512. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_reap.py +0 -0
  513. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_repos_and_pull.py +0 -0
  514. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_restart_services_endpoint.py +0 -0
  515. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_skills_self_heal.py +0 -0
  516. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_startup_diagnostics.py +0 -0
  517. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_update.py +0 -0
  518. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_update_bluegreen.py +0 -0
  519. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_usage_limit.py +0 -0
  520. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_zero_commit.py +0 -0
  521. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ambient_home_isolation.py +0 -0
  522. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_app_drive.py +0 -0
  523. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_capability_reroute_3241.py +0 -0
  524. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_dependency_busy_2804.py +0 -0
  525. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_reject_plan.py +0 -0
  526. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_usage_gate.py +0 -0
  527. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approved_work_2532.py +0 -0
  528. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approved_work_2996.py +0 -0
  529. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_assignment_already_recorded_daemon.py +0 -0
  530. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_log.py +0 -0
  531. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_outcome.py +0 -0
  532. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_query.py +0 -0
  533. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_auto_loop.py +0 -0
  534. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_auto_release_publish_2035.py +0 -0
  535. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_backend_selection.py +0 -0
  536. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_backup.py +0 -0
  537. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_base_checkout_restore.py +0 -0
  538. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_block_log.py +0 -0
  539. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_cap_762.py +0 -0
  540. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_fixture.py +0 -0
  541. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_nightly_status.py +0 -0
  542. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_read_path.py +0 -0
  543. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_schema.py +0 -0
  544. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_service.py +0 -0
  545. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_state.py +0 -0
  546. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_wire.py +0 -0
  547. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_brain.py +0 -0
  548. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_branch_model.py +0 -0
  549. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_briefing_lessons.py +0 -0
  550. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_bug_intake.py +0 -0
  551. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_bugbash.py +0 -0
  552. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_build_worker_image_env_update.py +0 -0
  553. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cargo_cache.py +0 -0
  554. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_check_gh_argv_containment.py +0 -0
  555. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_acceptance_gate_1950.py +0 -0
  556. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_fix.py +0 -0
  557. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_github.py +0 -0
  558. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_gitlab.py +0 -0
  559. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_parity_2091.py +0 -0
  560. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_store.py +0 -0
  561. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claim.py +0 -0
  562. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claude_md_budget.py +0 -0
  563. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claude_setup_token.py +0 -0
  564. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_acceptance.py +0 -0
  565. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign.py +0 -0
  566. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  567. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_interactive_remote.py +0 -0
  568. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_provider.py +0 -0
  569. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  570. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_audit.py +0 -0
  571. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_chat_continue.py +0 -0
  572. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_ci.py +0 -0
  573. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_codegen.py +0 -0
  574. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_decide.py +0 -0
  575. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_capability_rules.py +0 -0
  576. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_config_provenance.py +0 -0
  577. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_forge_availability.py +0 -0
  578. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_graph.py +0 -0
  579. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_self.py +0 -0
  580. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_test_coverage.py +0 -0
  581. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor.py +0 -0
  582. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_config_free_1801.py +0 -0
  583. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  584. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  585. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_drive.py +0 -0
  586. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_drive_queue.py +0 -0
  587. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_escalate.py +0 -0
  588. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_fix_headless_review.py +0 -0
  589. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_gate_a.py +0 -0
  590. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_inject_board_less.py +0 -0
  591. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_install_drift.py +0 -0
  592. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_install_skills.py +0 -0
  593. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_close_wrong_repo.py +0 -0
  594. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_comment.py +0 -0
  595. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_create_label.py +0 -0
  596. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_reopen.py +0 -0
  597. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_view_list.py +0 -0
  598. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issues.py +0 -0
  599. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_merge.py +0 -0
  600. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_assign.py +0 -0
  601. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_capture.py +0 -0
  602. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_chat_add_child.py +0 -0
  603. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_dispatch.py +0 -0
  604. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_gate_b.py +0 -0
  605. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_gate_c.py +0 -0
  606. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_order.py +0 -0
  607. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  608. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_ship.py +0 -0
  609. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_network.py +0 -0
  610. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_new_issue_chat.py +0 -0
  611. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_plans.py +0 -0
  612. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_portal.py +0 -0
  613. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_pr.py +0 -0
  614. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_pull_artifact.py +0 -0
  615. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_queue.py +0 -0
  616. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_reattach_sessions.py +0 -0
  617. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_refine_board.py +0 -0
  618. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_preflight.py +0 -0
  619. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_propagate.py +0 -0
  620. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_window.py +0 -0
  621. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_repo_2220.py +0 -0
  622. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  623. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_scorecard.py +0 -0
  624. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_serve_store_backend_3084.py +0 -0
  625. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_set_review_findings.py +0 -0
  626. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_smoke_nightly.py +0 -0
  627. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_smoke_nightly_sweep.py +0 -0
  628. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_advisory_terminal.py +0 -0
  629. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_contested_tag.py +0 -0
  630. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_invariant_alarms.py +0 -0
  631. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_machine_fault.py +0 -0
  632. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_merge_queue.py +0 -0
  633. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_nightly.py +0 -0
  634. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_provider.py +0 -0
  635. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_retried_3340.py +0 -0
  636. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_review_finalizing.py +0 -0
  637. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_supervisor_3366.py +0 -0
  638. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_test_failed_tag.py +0 -0
  639. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_usage_limit.py +0 -0
  640. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_sync_comments_873.py +0 -0
  641. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_test_plan.py +0 -0
  642. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_track.py +0 -0
  643. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_tui_update.py +0 -0
  644. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_wait.py +0 -0
  645. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client.py +0 -0
  646. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_base_install.py +0 -0
  647. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_config_cache_atomic_3052.py +0 -0
  648. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_resource_migration_1946.py +0 -0
  649. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_commands_common.py +0 -0
  650. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_comment_cruft.py +0 -0
  651. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_comments.py +0 -0
  652. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_completion_summary.py +0 -0
  653. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config.py +0 -0
  654. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_acceptance.py +0 -0
  655. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_audit.py +0 -0
  656. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_drift_check.py +0 -0
  657. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_effective.py +0 -0
  658. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_prereview_gate.py +0 -0
  659. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_pricing.py +0 -0
  660. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  661. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_usage_gate.py +0 -0
  662. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_confirm_test.py +0 -0
  663. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_conflict_fix.py +0 -0
  664. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_conflict_fix_semantic.py +0 -0
  665. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  666. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test.py +0 -0
  667. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  668. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_baseline.py +0 -0
  669. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_populated_home.py +0 -0
  670. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_routing.py +0 -0
  671. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_toolchain.py +0 -0
  672. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_uat.py +0 -0
  673. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_web_sse_restart_live.py +0 -0
  674. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coordinator_machine.py +0 -0
  675. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cross_platform_imports.py +0 -0
  676. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dao.py +0 -0
  677. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard.py +0 -0
  678. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_api.py +0 -0
  679. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_fixture.py +0 -0
  680. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_reports.py +0 -0
  681. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_server.py +0 -0
  682. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_terminal.py +0 -0
  683. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_terminal_live.py +0 -0
  684. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_db.py +0 -0
  685. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_decomposition_chat.py +0 -0
  686. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_db_backup.py +0 -0
  687. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_web_dist.py +0 -0
  688. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_web_rollback.py +0 -0
  689. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_db_backup_unit.py +0 -0
  690. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_drive_queue_unit.py +0 -0
  691. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_failure_notify_unit.py +0 -0
  692. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_manifest.py +0 -0
  693. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_notify_unit.py +0 -0
  694. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_units_lane.py +0 -0
  695. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_web_unit.py +0 -0
  696. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deprecation_telemetry.py +0 -0
  697. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deps.py +0 -0
  698. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dirlink.py +0 -0
  699. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch.py +0 -0
  700. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_liveness.py +0 -0
  701. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_target_validation.py +0 -0
  702. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_workers.py +0 -0
  703. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dist_name.py +0 -0
  704. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_done_housekeeping.py +0 -0
  705. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_azure_scripts.py +0 -0
  706. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_promote.py +0 -0
  707. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_verify.py +0 -0
  708. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive.py +0 -0
  709. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_machine_fault.py +0 -0
  710. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue.py +0 -0
  711. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_blocked_rendering.py +0 -0
  712. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_launch_argv.py +0 -0
  713. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_max_parallel_config.py +0 -0
  714. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  715. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_roll_pending.py +0 -0
  716. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  717. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_sessions_snapshot.py +0 -0
  718. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_state.py +0 -0
  719. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_tmux.py +0 -0
  720. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_capability_detection.py +0 -0
  721. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  722. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_image_provenance.py +0 -0
  723. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_errors.py +0 -0
  724. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_events.py +0 -0
  725. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_failure_class.py +0 -0
  726. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_failure_classifier.py +0 -0
  727. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_filelock.py +0 -0
  728. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  729. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fix_escalation_classifier.py +0 -0
  730. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fix_of_force_override.py +0 -0
  731. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_config_health.py +0 -0
  732. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_health_probes.py +0 -0
  733. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_health_snapshot.py +0 -0
  734. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_watchdog.py +0 -0
  735. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_forge_availability.py +0 -0
  736. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_freshness.py +0 -0
  737. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_a.py +0 -0
  738. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_b.py +0 -0
  739. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_snapshot_staleness.py +0 -0
  740. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gates.py +0 -0
  741. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  742. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gen_mock_index.py +0 -0
  743. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_rust_fixture.py +0 -0
  744. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_rust_requests.py +0 -0
  745. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_types_fixture.py +0 -0
  746. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_github_ops.py +0 -0
  747. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_github_throttle.py +0 -0
  748. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_goal.py +0 -0
  749. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_graph_health.py +0 -0
  750. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_graph_selfheal_absent_2237.py +0 -0
  751. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gtk_native_driver.py +0 -0
  752. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_handoff.py +0 -0
  753. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_checks.py +0 -0
  754. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_cli.py +0 -0
  755. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_cli_graph.py +0 -0
  756. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_config.py +0 -0
  757. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_context.py +0 -0
  758. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_coord_tui_ci_pin.py +0 -0
  759. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_coord_web_ci_pin.py +0 -0
  760. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_deploy_lane_facts.py +0 -0
  761. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_incident_regression.py +0 -0
  762. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_issues_sync_staleness.py +0 -0
  763. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_pr_churn.py +0 -0
  764. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_pypi.py +0 -0
  765. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_registry.py +0 -0
  766. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_release_cordon_probe.py +0 -0
  767. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_timer_active.py +0 -0
  768. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_toolchain.py +0 -0
  769. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_unit_drift.py +0 -0
  770. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_unit_enablement.py +0 -0
  771. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_wedged_drive_queue.py +0 -0
  772. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_hooks.py +0 -0
  773. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_housekeeping.py +0 -0
  774. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_human_attended_437.py +0 -0
  775. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_init.py +0 -0
  776. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_capabilities_3515.py +0 -0
  777. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_venv_2911.py +0 -0
  778. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  779. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_integration.py +0 -0
  780. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive.py +0 -0
  781. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_briefing_echo.py +0 -0
  782. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_pane_log_2541.py +0 -0
  783. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_prefill_state.py +0 -0
  784. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_session_relaunch.py +0 -0
  785. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_test_verdict_backstop.py +0 -0
  786. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_token_attribution.py +0 -0
  787. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_worktree.py +0 -0
  788. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_invariant_alarms.py +0 -0
  789. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_issue_store_seam.py +0 -0
  790. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_issues_sync_status.py +0 -0
  791. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_key_spec.py +0 -0
  792. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_liveness_auditor.py +0 -0
  793. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_liveness_notify.py +0 -0
  794. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_lock_contention_ratchet.py +0 -0
  795. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_mac_native_driver.py +0 -0
  796. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_fault.py +0 -0
  797. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_metrics.py +0 -0
  798. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_onboard.py +0 -0
  799. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_pause.py +0 -0
  800. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_stats.py +0 -0
  801. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_queue.py +0 -0
  802. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_verification.py +0 -0
  803. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_verify.py +0 -0
  804. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_chat.py +0 -0
  805. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_dispatch.py +0 -0
  806. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_gate.py +0 -0
  807. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_order.py +0 -0
  808. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_seam.py +0 -0
  809. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_mock_author.py +0 -0
  810. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_model_tiering.py +0 -0
  811. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models.py +0 -0
  812. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models_config_labels.py +0 -0
  813. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models_pinned_1650.py +0 -0
  814. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_native_fs_wait.py +0 -0
  815. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_native_pixels.py +0 -0
  816. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_needs_attention.py +0 -0
  817. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_network.py +0 -0
  818. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_new_issue_chat.py +0 -0
  819. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_next_release_tag.py +0 -0
  820. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_runner.py +0 -0
  821. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_smoke.py +0 -0
  822. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_status.py +0 -0
  823. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_store.py +0 -0
  824. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_no_eligible_host_3600.py +0 -0
  825. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_node_shim.py +0 -0
  826. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_baseline.py +0 -0
  827. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_cli.py +0 -0
  828. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_collect.py +0 -0
  829. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_config.py +0 -0
  830. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_drive_seam.py +0 -0
  831. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_isolation.py +0 -0
  832. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_predicate.py +0 -0
  833. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_quiet_hours.py +0 -0
  834. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_service.py +0 -0
  835. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notify_drain.py +0 -0
  836. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_openapi.py +0 -0
  837. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_operational_defaults.py +0 -0
  838. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_overlap_fence.py +0 -0
  839. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_overlap_predict.py +0 -0
  840. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_packaged_deploy_units.py +0 -0
  841. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_parentage.py +0 -0
  842. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_paste_landed.py +0 -0
  843. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  844. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_pipeline.py +0 -0
  845. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plain_runner_smoke_3673.py +0 -0
  846. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_approve_plan_command.py +0 -0
  847. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_pr_command.py +0 -0
  848. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_review_command.py +0 -0
  849. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_only.py +0 -0
  850. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_parser.py +0 -0
  851. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_platform_paths.py +0 -0
  852. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_bridge.py +0 -0
  853. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_config.py +0 -0
  854. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_store.py +0 -0
  855. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_sync.py +0 -0
  856. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_pr_body_lint.py +0 -0
  857. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_prereqs.py +0 -0
  858. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_prereview_gate.py +0 -0
  859. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_production_db_guard.py +0 -0
  860. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_progress.py +0 -0
  861. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provider_seam.py +0 -0
  862. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers.py +0 -0
  863. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers_config_labels.py +0 -0
  864. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers_pty.py +0 -0
  865. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provision_core.py +0 -0
  866. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provision_machine.py +0 -0
  867. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_py_rust_mirror_inventory.py +0 -0
  868. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_quiet_hours.py +0 -0
  869. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_quiet_hours_store_2146.py +0 -0
  870. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reap_merged_sessions.py +0 -0
  871. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reap_stale_interactive_tick.py +0 -0
  872. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile.py +0 -0
  873. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_branch.py +0 -0
  874. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_completions.py +0 -0
  875. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  876. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_merges.py +0 -0
  877. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_no_agent_record.py +0 -0
  878. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_tick.py +0 -0
  879. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_usage_limit_done.py +0 -0
  880. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_refine_chat.py +0 -0
  881. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_2101.py +0 -0
  882. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  883. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_deadlock_2240.py +0 -0
  884. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  885. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_stuck_2490.py +0 -0
  886. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_gate.py +0 -0
  887. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_propagate.py +0 -0
  888. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_propagate_threshold.py +0 -0
  889. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_roll_between_legs_2854.py +0 -0
  890. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_roll_window_handoff.py +0 -0
  891. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_unified_1242.py +0 -0
  892. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_verify.py +0 -0
  893. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_window.py +0 -0
  894. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_remote_auto_prune.py +0 -0
  895. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_remote_interactive_reaper.py +0 -0
  896. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_add.py +0 -0
  897. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_dormancy.py +0 -0
  898. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_edit_2220.py +0 -0
  899. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_graph_fleet_2237.py +0 -0
  900. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_max_parallel_3423.py +0 -0
  901. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_onboard_2220.py +0 -0
  902. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_report_public_export.py +0 -0
  903. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_report_result_push.py +0 -0
  904. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reports.py +0 -0
  905. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_restart_cmd.py +0 -0
  906. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry.py +0 -0
  907. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_advisory_1606.py +0 -0
  908. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_escalation_classify_3360.py +0 -0
  909. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_type_1636.py +0 -0
  910. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_revalidate.py +0 -0
  911. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review.py +0 -0
  912. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_end_review_without_verdict.py +0 -0
  913. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_parse_failure_diagnostic.py +0 -0
  914. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_reaffirm.py +0 -0
  915. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_state.py +0 -0
  916. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_backstop.py +0 -0
  917. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_override_audit.py +0 -0
  918. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_relay.py +0 -0
  919. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_zero_commits.py +0 -0
  920. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_scoped_review_wiring.py +0 -0
  921. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_scorecard.py +0 -0
  922. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_self_health.py +0 -0
  923. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve.py +0 -0
  924. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_app.py +0 -0
  925. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_app_board_trim.py +0 -0
  926. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_rest_routes.py +0 -0
  927. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_session.py +0 -0
  928. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_slice_issue_attribution.py +0 -0
  929. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  930. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_live_checkout_restore.py +0 -0
  931. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_plain_runner_3673.py +0 -0
  932. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_workflow.py +0 -0
  933. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_spend_ceiling.py +0 -0
  934. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_spend_ceiling_coordinator.py +0 -0
  935. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_split.py +0 -0
  936. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_split_work.py +0 -0
  937. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_sql_dialect.py +0 -0
  938. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_sqlite_connect_ratchet.py +0 -0
  939. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stage_projection.py +0 -0
  940. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stale_busy_reviewer_697.py +0 -0
  941. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stalled_pipeline.py +0 -0
  942. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_state_review_findings_daemon.py +0 -0
  943. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_status_fleet_footer.py +0 -0
  944. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stop_1567.py +0 -0
  945. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_store_contract.py +0 -0
  946. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_store_migrate.py +0 -0
  947. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stuck.py +0 -0
  948. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  949. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_terminal_command.py +0 -0
  950. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_author.py +0 -0
  951. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_chat.py +0 -0
  952. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_orchestrator.py +0 -0
  953. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_report.py +0 -0
  954. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_verdict_transcript_floor.py +0 -0
  955. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_text_io_encoding_audit.py +0 -0
  956. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_board_audit.py +0 -0
  957. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_config_load_1080.py +0 -0
  958. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_daemon_routing_906.py +0 -0
  959. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tmux_host.py +0 -0
  960. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tmux_session.py +0 -0
  961. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_transcript_floor.py +0 -0
  962. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tui_pty_driver.py +0 -0
  963. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_uat_checks.py +0 -0
  964. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_upstream_gaps.py +0 -0
  965. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage.py +0 -0
  966. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage_limits.py +0 -0
  967. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage_rollup.py +0 -0
  968. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_venv_live_install_2121.py +0 -0
  969. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_version_single_source.py +0 -0
  970. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_watch.py +0 -0
  971. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_win_native_bridge.py +0 -0
  972. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_win_native_driver.py +0 -0
  973. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  974. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_env_venv_isolation.py +0 -0
  975. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_events.py +0 -0
  976. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_image_pin_sync.py +0 -0
  977. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_safety.py +0 -0
  978. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_test_scoping.py +0 -0
  979. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worktree.py +0 -0
  980. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  981. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_write_parity.py +0 -0
  982. {code_coordinator-0.5.656 → code_coordinator-0.5.658}/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.656
3
+ Version: 0.5.658
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.656
3
+ Version: 0.5.658
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.658",
3
+ "distance": 0,
4
+ "node": "g3abb395b595e582d48846dc682c318f7c71796b2",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-21"
8
+ }
@@ -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
@@ -3641,6 +3709,16 @@ def _dispatch_smoke_single_leg(
3641
3709
  environmental_smoke_legs(authoritative_reason),
3642
3710
  environmental_smoke_legs(board_reason),
3643
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
+ )
3644
3722
  running_reason = "dispatched: Test stage running (#1426)"
3645
3723
  if prior_legs:
3646
3724
  running_reason = (
@@ -3655,6 +3733,13 @@ def _dispatch_smoke_single_leg(
3655
3733
  f"{ENVIRONMENTAL_SMOKE_RETRY_BUDGET} consecutive "
3656
3734
  "environmental Test-stage death(s) so far, #3315)"
3657
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
+ )
3658
3743
 
3659
3744
  record_test_verdict(
3660
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 "
@@ -3085,6 +3102,12 @@ def review_claim_age_secs(of_assignment_id: str) -> float | None:
3085
3102
 
3086
3103
  Same local-DB-only caveat as :func:`has_review_claim` — reads the local
3087
3104
  connection, not the daemon, so it undercounts on a thin client.
3105
+
3106
+ Clamped to ``0.0``: ``_new_review_claim_stamp`` adds a sub-millisecond
3107
+ positive jitter to ``time.time()`` for uniqueness, so a read taken
3108
+ microseconds after the claim can land *before* that jittered stamp and
3109
+ would otherwise go slightly negative — "age since claim" can never be
3110
+ less than zero.
3088
3111
  """
3089
3112
  if not of_assignment_id:
3090
3113
  return None
@@ -3096,7 +3119,7 @@ def review_claim_age_secs(of_assignment_id: str) -> float | None:
3096
3119
  ).fetchone()
3097
3120
  if row is None or row[0] is None:
3098
3121
  return None
3099
- return time.time() - row[0]
3122
+ return max(0.0, time.time() - row[0])
3100
3123
 
3101
3124
 
3102
3125
  def has_recorded_review_verdict(assignment_id: str) -> bool:
@@ -301,6 +301,37 @@ def test_a_mute_exhausted_test_stage_names_its_own_cause() -> None:
301
301
  assert "Nothing is known to be wrong with the BRANCH" in found.reason
302
302
 
303
303
 
304
+ def test_an_abandoned_background_exhausted_test_stage_names_its_own_cause() -> None:
305
+ """#3737: the abandoned-background retry budget parks the SAME ``blocked``
306
+ value as #1672's unroutable stage and #2272's mute-leg budget, but it is a
307
+ THIRD, distinct cause — the worker backgrounded the smoke command past its
308
+ own turn — and must not be misreported as either of the other two.
309
+ """
310
+ from coord.notify import abandoned_background_smoke_tally # noqa: PLC0415
311
+
312
+ found = detect_dead_end(
313
+ state(
314
+ work_aid="w3737",
315
+ work_status="done",
316
+ work_branch="issue-3737",
317
+ work_test_state=TEST_STATE_BLOCKED,
318
+ work_test_reason=(
319
+ f"{abandoned_background_smoke_tally(3)}: the Test-stage "
320
+ "worker dc91c2843872 ended its turn with the smoke command "
321
+ "still running in the background instead of to completion."
322
+ ),
323
+ active_count=0,
324
+ )
325
+ )
326
+ assert found is not None
327
+ assert found.kind == "test_stage_blocked"
328
+ assert "#3737" in found.reason
329
+ assert "running in the background" in found.reason
330
+ # It must NOT misattribute this to the fleet or to a genuinely mute suite.
331
+ assert "no capability-matched" not in found.reason
332
+ assert "verdict marker" not in found.reason
333
+
334
+
304
335
  def test_gates_carry_the_readings_that_proved_the_dead_end() -> None:
305
336
  """The escalation record has to answer "how did you conclude that?"
306
337
  without the tmux pane, which is gone. ``active=0`` in particular is the
@@ -1899,6 +1899,31 @@ def test_blocked_test_state_names_mute_legs_cause(monkeypatch, config) -> None:
1899
1899
  assert not any("#1672" in f for f in res.findings)
1900
1900
 
1901
1901
 
1902
+ def test_blocked_test_state_names_abandoned_background_cause(monkeypatch, config) -> None:
1903
+ """#3737 shape: N Test-stage legs in a row ended their turn with the
1904
+ smoke command still backgrounded, never printing a verdict —
1905
+ `abandoned_background_smoke_legs` (the exact function `coord.dead_end`
1906
+ shape 2 checks FIRST, ahead of the #2272 mute-leg one, #2235) finds the
1907
+ tally marker, so this must name THAT cause instead of either sibling —
1908
+ and must not misdiagnose this as an unroutable fleet (#1672)."""
1909
+ from coord.smoke import abandoned_background_smoke_tally
1910
+
1911
+ _stub(monkeypatch, session="dead")
1912
+ work = _assign(aid="w1", typ="work", status="done")
1913
+ work.test_state = "blocked"
1914
+ work.test_reason = f"{abandoned_background_smoke_tally(3)}: still backgrounded"
1915
+ board = Board(completed=[work])
1916
+
1917
+ res = diagnose.diagnose_stage(board, config, "api", 42, "test", dry_run=True)
1918
+
1919
+ assert any("#3737" in f and "backgrounded" in f for f in res.findings)
1920
+ assert not any("#1672" in f for f in res.findings)
1921
+ # The mute-leg cause text is distinct ("printing a `SMOKE:` verdict
1922
+ # marker") — must not be the one actually reported here even though
1923
+ # #2272 is named in passing as the OTHER budget.
1924
+ assert not any("verdict marker" in f for f in res.findings)
1925
+
1926
+
1902
1927
  def test_reset_test_reports_which_rows_were_cleared(monkeypatch, config, coord_db) -> None:
1903
1928
  """#3332: the reset report must name which rows it cleared, not just a
1904
1929
  bare count — an operator reading "cleared Test verdict on 3 work
@@ -477,14 +477,27 @@ def test_fix_cargo_targets_protects_a_repo_with_a_live_assignment(
477
477
  cap is tier-3 whole-directory eviction. With a live `running` assignment
478
478
  for ``repo1`` on this machine, that eviction must be skipped: the sweep
479
479
  stays over cap and the directory survives.
480
+
481
+ Mocks ``shutil.disk_usage`` to report ample free space, mirroring its
482
+ twin (``test_fix_cargo_targets_evicts_the_same_repo_once_it_goes_idle``)
483
+ so the two tests differ only in the live assignment — otherwise this
484
+ test's "still over cap" / surviving-blob assertions would also pass
485
+ vacuously on a runner with under 10GB free (`cargo_floor_unreachable`,
486
+ `coord/cargo_cache.py`), proving nothing about `protect_repos` either.
480
487
  """
481
488
  import coord.board_service as board_service
489
+ from coord import cargo_cache
482
490
  from coord.health.checks import release_cordon as check_mod
483
491
 
484
492
  coord_dir = tmp_path / ".coord"
485
493
  _write_bytes(coord_dir / "cargo-target" / "repo1" / "blob", 4096)
486
494
  _gc_status(coord_dir)
487
495
  monkeypatch.setenv("COORD_CARGO_CACHE_CAP_GB", "0.0000000001")
496
+ monkeypatch.setattr(
497
+ cargo_cache.shutil,
498
+ "disk_usage",
499
+ lambda _p: SimpleNamespace(total=1_000_000_000_000, used=0, free=1_000_000_000_000),
500
+ )
488
501
 
489
502
  monkeypatch.setattr(check_mod.socket, "gethostname", lambda: "precision")
490
503
  config = SimpleNamespace(
@@ -518,14 +531,29 @@ def test_fix_cargo_targets_evicts_the_same_repo_once_it_goes_idle(
518
531
  ) -> None:
519
532
  """Same fixture as the protection test above, minus the live assignment
520
533
  — proves the protection in that test is doing the work, not some other
521
- difference between the two setups."""
534
+ difference between the two setups.
535
+
536
+ Mocks ``shutil.disk_usage`` to report ample free space: without it, the
537
+ free-space floor (default 10GB, ``COORD_CARGO_FREE_FLOOR_GB``) reads the
538
+ REAL disk free space of whatever machine runs this test. On a runner
539
+ with under 10GB free, the tiny 4096-byte fixture cache can never cover
540
+ the shortfall on its own, ``cargo_floor_unreachable`` fires, tier-3
541
+ eviction is skipped entirely, and the repo survives — flipping this
542
+ test's outcome based on the host's disk, not the code under test.
543
+ """
522
544
  import coord.board_service as board_service
545
+ from coord import cargo_cache
523
546
  from coord.health.checks import release_cordon as check_mod
524
547
 
525
548
  coord_dir = tmp_path / ".coord"
526
549
  _write_bytes(coord_dir / "cargo-target" / "repo1" / "blob", 4096)
527
550
  _gc_status(coord_dir)
528
551
  monkeypatch.setenv("COORD_CARGO_CACHE_CAP_GB", "0.0000000001")
552
+ monkeypatch.setattr(
553
+ cargo_cache.shutil,
554
+ "disk_usage",
555
+ lambda _p: SimpleNamespace(total=1_000_000_000_000, used=0, free=1_000_000_000_000),
556
+ )
529
557
 
530
558
  monkeypatch.setattr(check_mod.socket, "gethostname", lambda: "precision")
531
559
  config = SimpleNamespace(