code-coordinator 0.5.575__tar.gz → 0.5.577__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (932) hide show
  1. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/server.py +72 -1
  5. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/pipeline.py +41 -0
  6. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard.py +156 -0
  7. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_pipeline.py +167 -0
  8. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/.gitignore +0 -0
  21. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/GOAL.md +0 -0
  23. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/LICENSE +0 -0
  24. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/README.md +0 -0
  26. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/approved_work.py +0 -0
  43. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/backup.py +0 -0
  46. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/bugbash.py +0 -0
  54. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/claude_setup_token.py +0 -0
  61. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/client.py +0 -0
  63. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/codegen.py +0 -0
  64. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/backup.py +0 -0
  70. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/bugbash.py +0 -0
  71. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/ci.py +0 -0
  73. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/machine.py +0 -0
  84. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/config.py +0 -0
  104. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/reports.html +0 -0
  112. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/db.py +0 -0
  114. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/events.py +0 -0
  155. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/gtk_native_driver.py +0 -0
  171. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/local_machine_identity.py +0 -0
  192. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/plan_usage.py +0 -0
  193. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/pr_churn.py +0 -0
  194. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/release_cordon.py +0 -0
  195. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/repo_state.py +0 -0
  196. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/spawned_coord.py +0 -0
  197. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/stalled_pipeline.py +0 -0
  198. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/timer_active.py +0 -0
  199. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/toolchain.py +0 -0
  200. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/unit_drift.py +0 -0
  201. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/unit_enablement.py +0 -0
  202. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/wedged_drive_queue.py +0 -0
  203. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/checks/worktrees.py +0 -0
  204. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/cli.py +0 -0
  205. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/context.py +0 -0
  206. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/fleet_snapshot.py +0 -0
  207. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/models.py +0 -0
  208. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/pypi.py +0 -0
  209. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/registry.py +0 -0
  210. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/render.py +0 -0
  211. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/health/units.py +0 -0
  212. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/hooks.py +0 -0
  213. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/housekeeping.py +0 -0
  214. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/interactive.py +0 -0
  215. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/invariant_alarms.py +0 -0
  216. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/issue_store.py +0 -0
  217. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/issues_sync_status.py +0 -0
  218. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/liveness_auditor.py +0 -0
  219. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/mac_native_driver.py +0 -0
  220. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/machine_fault.py +0 -0
  221. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/machine_metrics.py +0 -0
  222. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/machine_onboard.py +0 -0
  223. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/machine_pause.py +0 -0
  224. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/machine_stats.py +0 -0
  225. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/merge_queue.py +0 -0
  226. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/milestone_chat.py +0 -0
  227. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/milestone_dispatch.py +0 -0
  228. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/milestone_gate.py +0 -0
  229. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/milestone_order.py +0 -0
  230. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/mock_author.py +0 -0
  231. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/models.py +0 -0
  232. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/network.py +0 -0
  233. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/new_issue_chat.py +0 -0
  234. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/__init__.py +0 -0
  235. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/baseline.py +0 -0
  236. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/cli.py +0 -0
  237. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/collect.py +0 -0
  238. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/digest.py +0 -0
  239. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/models.py +0 -0
  240. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/predicate.py +0 -0
  241. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/service.py +0 -0
  242. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/store.py +0 -0
  243. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notifier/transport.py +0 -0
  244. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/notify.py +0 -0
  245. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/openapi.py +0 -0
  246. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/overlap_fence.py +0 -0
  247. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/overlap_predict.py +0 -0
  248. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/parentage.py +0 -0
  249. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/parentage_github.py +0 -0
  250. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/plan_parser.py +0 -0
  251. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/plans.py +0 -0
  252. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/platform_paths.py +0 -0
  253. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/portal_bridge.py +0 -0
  254. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/portal_store.py +0 -0
  255. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/portal_sync.py +0 -0
  256. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/pr_body_lint.py +0 -0
  257. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/prereqs.py +0 -0
  258. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/progress.py +0 -0
  259. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/providers/__init__.py +0 -0
  260. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/providers/base.py +0 -0
  261. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/providers/claude.py +0 -0
  262. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/providers/claude_pty.py +0 -0
  263. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/providers/opencode.py +0 -0
  264. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/queue_diagnose.py +0 -0
  265. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/reconcile.py +0 -0
  266. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/reconcile_tick.py +0 -0
  267. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/refine_chat.py +0 -0
  268. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/release_cordon.py +0 -0
  269. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/release_gate.py +0 -0
  270. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/release_propagate.py +0 -0
  271. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/release_verify.py +0 -0
  272. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/release_window.py +0 -0
  273. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/repo_dormancy.py +0 -0
  274. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/repo_edit.py +0 -0
  275. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/repo_onboard.py +0 -0
  276. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/reports.py +0 -0
  277. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/rest_schema.py +0 -0
  278. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/restart_cmd.py +0 -0
  279. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/revalidate.py +0 -0
  280. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/review.py +0 -0
  281. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/scorecard.py +0 -0
  282. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/self_health.py +0 -0
  283. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/serve_app.py +0 -0
  284. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  285. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  286. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  287. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  288. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/portal-followup/SKILL.md +0 -0
  290. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/release-now/SKILL.md +0 -0
  291. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  292. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  293. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/skills/update-issue/SKILL.md +0 -0
  294. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/smoke.py +0 -0
  295. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/smoke_tags.py +0 -0
  296. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/spend_ceiling.py +0 -0
  297. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/split_work.py +0 -0
  298. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/sql.py +0 -0
  299. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/stage_projection.py +0 -0
  300. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/state.py +0 -0
  301. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/store_migrate.py +0 -0
  302. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/store_parity.py +0 -0
  303. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/templates/deploy-cloudflare.node.yml +0 -0
  304. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/test_author.py +0 -0
  305. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/test_chat.py +0 -0
  306. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/test_orchestrator.py +0 -0
  307. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/test_report.py +0 -0
  308. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/tui_pty_driver.py +0 -0
  309. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/tui_release.py +0 -0
  310. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/uat_checks.py +0 -0
  311. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/usage.py +0 -0
  312. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/usage_limits.py +0 -0
  313. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/usage_rollup.py +0 -0
  314. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/win_native_bridge.py +0 -0
  315. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/win_native_driver.py +0 -0
  316. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coord/worker_events.py +0 -0
  317. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/coordinator.example.yml +0 -0
  318. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/setup.cfg +0 -0
  429. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_bugbash.py +0 -0
  518. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_check_gh_argv_containment.py +0 -0
  521. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_acceptance_gate_1950.py +0 -0
  522. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_fix.py +0 -0
  523. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_github.py +0 -0
  524. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_gitlab.py +0 -0
  525. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_claude_md_budget.py +0 -0
  529. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_claude_setup_token.py +0 -0
  530. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_acceptance.py +0 -0
  531. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_assign.py +0 -0
  532. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  533. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_assign_interactive_remote.py +0 -0
  534. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_assign_provider.py +0 -0
  535. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  536. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_audit.py +0 -0
  537. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_chat_continue.py +0 -0
  538. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_ci.py +0 -0
  539. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_codegen.py +0 -0
  540. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_decide.py +0 -0
  541. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_capability_rules.py +0 -0
  542. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_config_provenance.py +0 -0
  543. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_forge_availability.py +0 -0
  544. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_graph.py +0 -0
  545. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_self.py +0 -0
  546. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_diagnose_test_coverage.py +0 -0
  547. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  551. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_issue_comment.py +0 -0
  559. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_issue_view_list.py +0 -0
  562. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_issues.py +0 -0
  563. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_merge.py +0 -0
  564. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_assign.py +0 -0
  565. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_capture.py +0 -0
  566. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_chat_add_child.py +0 -0
  567. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_dispatch.py +0 -0
  568. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_gate_b.py +0 -0
  569. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_gate_c.py +0 -0
  570. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_order.py +0 -0
  571. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  572. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_milestone_ship.py +0 -0
  573. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_network.py +0 -0
  574. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_new_issue_chat.py +0 -0
  575. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_plans.py +0 -0
  576. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_portal.py +0 -0
  577. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_pr.py +0 -0
  578. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  587. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_scorecard.py +0 -0
  588. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_serve_store_backend_3084.py +0 -0
  589. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_contested_tag.py +0 -0
  592. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_invariant_alarms.py +0 -0
  593. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_machine_fault.py +0 -0
  594. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_retried_3340.py +0 -0
  597. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_supervisor_3366.py +0 -0
  599. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_test_failed_tag.py +0 -0
  600. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_status_usage_limit.py +0 -0
  601. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_sync_comments_873.py +0 -0
  602. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_test_plan.py +0 -0
  603. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_track.py +0 -0
  604. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_tui_update.py +0 -0
  605. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cli_wait.py +0 -0
  606. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_client.py +0 -0
  607. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_client_base_install.py +0 -0
  608. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_client_config_cache_atomic_3052.py +0 -0
  609. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_client_resource_migration_1946.py +0 -0
  610. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_commands_common.py +0 -0
  611. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_comments.py +0 -0
  612. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_completion_summary.py +0 -0
  613. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config.py +0 -0
  614. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_acceptance.py +0 -0
  615. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_audit.py +0 -0
  616. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_drift_check.py +0 -0
  617. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_effective.py +0 -0
  618. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_pricing.py +0 -0
  619. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  620. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_config_usage_gate.py +0 -0
  621. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_confirm_test.py +0 -0
  622. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_conflict_fix.py +0 -0
  623. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_conflict_fix_semantic.py +0 -0
  624. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  625. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test.py +0 -0
  626. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  627. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test_runner_baseline.py +0 -0
  628. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test_runner_populated_home.py +0 -0
  629. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test_runner_routing.py +0 -0
  630. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_test_runner_toolchain.py +0 -0
  631. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_uat.py +0 -0
  632. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dao.py +0 -0
  636. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_api.py +0 -0
  637. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_fixture.py +0 -0
  638. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_reports.py +0 -0
  639. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_server.py +0 -0
  640. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_terminal.py +0 -0
  641. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dashboard_terminal_live.py +0 -0
  642. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_db.py +0 -0
  643. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dead_end.py +0 -0
  644. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_decomposition_chat.py +0 -0
  645. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_coord_db_backup.py +0 -0
  646. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_coord_web_dist.py +0 -0
  647. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_coord_web_rollback.py +0 -0
  648. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_db_backup_unit.py +0 -0
  649. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_drive_queue_unit.py +0 -0
  650. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_failure_notify_unit.py +0 -0
  651. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_manifest.py +0 -0
  652. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_notify_unit.py +0 -0
  653. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_units_lane.py +0 -0
  654. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deploy_web_unit.py +0 -0
  655. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deprecation_telemetry.py +0 -0
  656. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_deps.py +0 -0
  657. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_diagnose.py +0 -0
  658. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dispatch.py +0 -0
  659. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dispatch_liveness.py +0 -0
  660. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dispatch_target_validation.py +0 -0
  661. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dispatch_workers.py +0 -0
  662. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dist_name.py +0 -0
  663. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_done_housekeeping.py +0 -0
  664. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dr_azure_scripts.py +0 -0
  665. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dr_promote.py +0 -0
  666. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_dr_verify.py +0 -0
  667. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive.py +0 -0
  668. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_machine_fault.py +0 -0
  669. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue.py +0 -0
  670. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_gtk_native_driver.py +0 -0
  711. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_handoff.py +0 -0
  712. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_checks.py +0 -0
  713. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_cli.py +0 -0
  714. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_cli_graph.py +0 -0
  715. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_config.py +0 -0
  716. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_context.py +0 -0
  717. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_coord_tui_ci_pin.py +0 -0
  718. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_coord_web_ci_pin.py +0 -0
  719. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_deploy_lane_facts.py +0 -0
  720. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_fix.py +0 -0
  721. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_incident_regression.py +0 -0
  722. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_issues_sync_staleness.py +0 -0
  723. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_pr_churn.py +0 -0
  724. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_pypi.py +0 -0
  725. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_registry.py +0 -0
  726. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_release_cordon_probe.py +0 -0
  727. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_timer_active.py +0 -0
  728. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_toolchain.py +0 -0
  729. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_unit_drift.py +0 -0
  730. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_unit_enablement.py +0 -0
  731. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_health_wedged_drive_queue.py +0 -0
  732. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_hooks.py +0 -0
  733. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_housekeeping.py +0 -0
  734. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_human_attended_437.py +0 -0
  735. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_init.py +0 -0
  736. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_install_agent_capabilities_3515.py +0 -0
  737. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_install_agent_venv_2911.py +0 -0
  738. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  739. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_integration.py +0 -0
  740. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive.py +0 -0
  741. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_briefing_echo.py +0 -0
  742. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_pane_log_2541.py +0 -0
  743. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_prefill_state.py +0 -0
  744. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_session_relaunch.py +0 -0
  745. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_test_verdict_backstop.py +0 -0
  746. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_token_attribution.py +0 -0
  747. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_interactive_worktree.py +0 -0
  748. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_invariant_alarms.py +0 -0
  749. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_issue_store_seam.py +0 -0
  750. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_issues_sync_status.py +0 -0
  751. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_liveness_auditor.py +0 -0
  752. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_liveness_notify.py +0 -0
  753. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_lock_contention_ratchet.py +0 -0
  754. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_mac_native_driver.py +0 -0
  755. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_machine_fault.py +0 -0
  756. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_machine_metrics.py +0 -0
  757. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_machine_onboard.py +0 -0
  758. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_machine_pause.py +0 -0
  759. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_machine_stats.py +0 -0
  760. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_merge_queue.py +0 -0
  761. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_merge_verify.py +0 -0
  762. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_milestone_chat.py +0 -0
  763. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_milestone_dispatch.py +0 -0
  764. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_milestone_gate.py +0 -0
  765. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_milestone_order.py +0 -0
  766. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_milestone_seam.py +0 -0
  767. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_mock_author.py +0 -0
  768. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_model_tiering.py +0 -0
  769. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_models.py +0 -0
  770. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_models_config_labels.py +0 -0
  771. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_needs_attention.py +0 -0
  772. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_network.py +0 -0
  773. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_new_issue_chat.py +0 -0
  774. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_next_release_tag.py +0 -0
  775. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_node_shim.py +0 -0
  776. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_baseline.py +0 -0
  777. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_cli.py +0 -0
  778. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_collect.py +0 -0
  779. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_config.py +0 -0
  780. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_drive_seam.py +0 -0
  781. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_isolation.py +0 -0
  782. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_predicate.py +0 -0
  783. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_quiet_hours.py +0 -0
  784. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notifier_service.py +0 -0
  785. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notify.py +0 -0
  786. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_notify_drain.py +0 -0
  787. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_openapi.py +0 -0
  788. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_operational_defaults.py +0 -0
  789. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_overlap_fence.py +0 -0
  790. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_overlap_predict.py +0 -0
  791. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_packaged_deploy_units.py +0 -0
  792. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_parentage.py +0 -0
  793. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_paste_landed.py +0 -0
  794. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  795. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_plan_followup_approve_plan_command.py +0 -0
  796. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_plan_followup_pr_command.py +0 -0
  797. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_plan_followup_review_command.py +0 -0
  798. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_plan_only.py +0 -0
  799. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_plan_parser.py +0 -0
  800. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_platform_paths.py +0 -0
  801. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_portal_bridge.py +0 -0
  802. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_portal_config.py +0 -0
  803. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_portal_store.py +0 -0
  804. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_portal_sync.py +0 -0
  805. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_pr_body_lint.py +0 -0
  806. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_prereqs.py +0 -0
  807. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_production_db_guard.py +0 -0
  808. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_progress.py +0 -0
  809. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_provider_seam.py +0 -0
  810. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_providers.py +0 -0
  811. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_providers_config_labels.py +0 -0
  812. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_providers_pty.py +0 -0
  813. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_provision_core.py +0 -0
  814. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_provision_machine.py +0 -0
  815. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_py_rust_mirror_inventory.py +0 -0
  816. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_quiet_hours.py +0 -0
  817. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_quiet_hours_store_2146.py +0 -0
  818. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reap_merged_sessions.py +0 -0
  819. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reap_stale_interactive_tick.py +0 -0
  820. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile.py +0 -0
  821. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_branch.py +0 -0
  822. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_completions.py +0 -0
  823. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  824. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_merges.py +0 -0
  825. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_no_agent_record.py +0 -0
  826. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_tick.py +0 -0
  827. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reconcile_usage_limit_done.py +0 -0
  828. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_refine_chat.py +0 -0
  829. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_cordon_2101.py +0 -0
  830. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  831. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_cordon_deadlock_2240.py +0 -0
  832. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  833. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_cordon_stuck_2490.py +0 -0
  834. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_gate.py +0 -0
  835. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_propagate.py +0 -0
  836. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_propagate_threshold.py +0 -0
  837. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_roll_between_legs_2854.py +0 -0
  838. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_roll_window_handoff.py +0 -0
  839. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_unified_1242.py +0 -0
  840. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_verify.py +0 -0
  841. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_release_window.py +0 -0
  842. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_remote_auto_prune.py +0 -0
  843. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_remote_interactive_reaper.py +0 -0
  844. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_add.py +0 -0
  845. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_dormancy.py +0 -0
  846. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_edit_2220.py +0 -0
  847. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_graph_fleet_2237.py +0 -0
  848. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_max_parallel_3423.py +0 -0
  849. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_repo_onboard_2220.py +0 -0
  850. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_report_public_export.py +0 -0
  851. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_report_result_push.py +0 -0
  852. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_reports.py +0 -0
  853. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_restart_cmd.py +0 -0
  854. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_retry.py +0 -0
  855. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_retry_advisory_1606.py +0 -0
  856. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_retry_escalation_classify_3360.py +0 -0
  857. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_retry_type_1636.py +0 -0
  858. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_revalidate.py +0 -0
  859. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review.py +0 -0
  860. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_end_review_without_verdict.py +0 -0
  861. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_parse_failure_diagnostic.py +0 -0
  862. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_reaffirm.py +0 -0
  863. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_state.py +0 -0
  864. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_verdict_backstop.py +0 -0
  865. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_verdict_override_audit.py +0 -0
  866. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_verdict_relay.py +0 -0
  867. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_review_zero_commits.py +0 -0
  868. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_scoped_review_wiring.py +0 -0
  869. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_scorecard.py +0 -0
  870. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_self_health.py +0 -0
  871. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_serve.py +0 -0
  872. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_serve_app.py +0 -0
  873. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_serve_app_board_trim.py +0 -0
  874. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_serve_rest_routes.py +0 -0
  875. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_session.py +0 -0
  876. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_slice_issue_attribution.py +0 -0
  877. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_smoke.py +0 -0
  878. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  879. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_smoke_live_checkout_restore.py +0 -0
  880. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_smoke_workflow.py +0 -0
  881. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_spend_ceiling.py +0 -0
  882. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_spend_ceiling_coordinator.py +0 -0
  883. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_split.py +0 -0
  884. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_split_work.py +0 -0
  885. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_sql_dialect.py +0 -0
  886. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_sqlite_connect_ratchet.py +0 -0
  887. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stage_projection.py +0 -0
  888. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stale_busy_reviewer_697.py +0 -0
  889. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stalled_pipeline.py +0 -0
  890. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_state.py +0 -0
  891. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_state_review_findings_daemon.py +0 -0
  892. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_status_fleet_footer.py +0 -0
  893. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stop_1567.py +0 -0
  894. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_store_contract.py +0 -0
  895. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_store_migrate.py +0 -0
  896. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stuck.py +0 -0
  897. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  898. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_terminal_command.py +0 -0
  899. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_author.py +0 -0
  900. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_chat.py +0 -0
  901. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_orchestrator.py +0 -0
  902. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_report.py +0 -0
  903. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_verdict_parsing.py +0 -0
  904. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_test_verdict_transcript_floor.py +0 -0
  905. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_text_io_encoding_audit.py +0 -0
  906. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_thin_client_board_audit.py +0 -0
  907. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_thin_client_config_load_1080.py +0 -0
  908. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_thin_client_daemon_routing_906.py +0 -0
  909. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_throwaway_vm.py +0 -0
  910. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_tmux_host.py +0 -0
  911. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_tmux_session.py +0 -0
  912. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_transcript_floor.py +0 -0
  913. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_tui_pty_driver.py +0 -0
  914. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_uat_checks.py +0 -0
  915. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_usage.py +0 -0
  916. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_usage_limits.py +0 -0
  917. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_usage_rollup.py +0 -0
  918. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_venv_live_install_2121.py +0 -0
  919. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_version_single_source.py +0 -0
  920. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_watch.py +0 -0
  921. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_win_native_bridge.py +0 -0
  922. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_win_native_driver.py +0 -0
  923. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  924. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worker_env_venv_isolation.py +0 -0
  925. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worker_events.py +0 -0
  926. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worker_image_pin_sync.py +0 -0
  927. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worker_safety.py +0 -0
  928. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worker_test_scoping.py +0 -0
  929. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worktree.py +0 -0
  930. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  931. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/tests/test_write_parity.py +0 -0
  932. {code_coordinator-0.5.575 → code_coordinator-0.5.577}/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.575
3
+ Version: 0.5.577
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.575
3
+ Version: 0.5.577
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.575",
2
+ "tag": "0.5.577",
3
3
  "distance": 0,
4
- "node": "g22daba195f41dce89012e37ebdeb524a5b332d51",
4
+ "node": "gd912c07c97846af080c719b433367120de7bfccb",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-03"
@@ -634,6 +634,29 @@ _SESSIONS_SLOW_THRESHOLD = 3.0 # seconds; a healthy sweep is normally <1s
634
634
  # on every ~4s dashboard poll.
635
635
  _SESSIONS_COOLDOWN = 20.0 # seconds before a down machine is re-probed
636
636
 
637
+ # #1228: belt-and-suspenders hard cap on each per-machine sweep *future*,
638
+ # applied by api_sessions itself via `asyncio.wait_for` rather than trusted
639
+ # to `list_coord_tmux_sessions`'s internal `subprocess.run(timeout=5.0)`.
640
+ # #1217 iteration 2 assumed that internal timeout bounded every sweep to
641
+ # ~5-6s worst case, but a live smoke test measured a >60s (12x) overrun
642
+ # against a real offline machine and the root cause was never confirmed —
643
+ # a same-night diagnostic session could only reproduce fast (<1s) ssh
644
+ # rejections, not a genuine hang, against that machine. A deterministic
645
+ # repro against a TEST-NET-1 (192.0.2.0/24, RFC 5737) address — guaranteed
646
+ # non-routable, no DNS/auth involved — shows `ssh -o BatchMode=yes -o
647
+ # ConnectTimeout=4` (with or without this codebase's `_SSH_MUX_OPTS`
648
+ # ControlMaster options) and Python's own `subprocess.run(timeout=5.0)`
649
+ # wrapping it BOTH bound correctly to ~4s against a genuinely packet-dropped
650
+ # host (see TestSessionsHardTimeout / the ssh timing note in
651
+ # tests/test_dashboard.py) — so neither hypothesis in the issue reproduces
652
+ # here. Since the real overrun's cause is still unconfirmed, this endpoint
653
+ # no longer trusts any upstream timeout at all: whatever the per-machine
654
+ # sweep future does, `api_sessions` itself gives up on it after this many
655
+ # seconds and reports that machine as empty for this poll (and starts its
656
+ # offline cooldown), so one bad host can never stall the response past this
657
+ # bound regardless of what's actually slow underneath.
658
+ _SESSIONS_HARD_TIMEOUT = 6.0 # seconds; event-loop-side cap per machine
659
+
637
660
  # #2066: PipelineView.current_stage values that represent genuinely finished
638
661
  # work with no pending action — safe for api_pipeline's recency cutoff to age
639
662
  # out. Every other current_stage ("coding", "review_running", "review_done",
@@ -3343,6 +3366,17 @@ def build_app(
3343
3366
  (see the comment above ``_sessions_executor``'s definition for why:
3344
3367
  #1217 iteration 1 fixed a dashboard-wide hang caused by exactly this
3345
3368
  fan-out saturating the process's shared default executor).
3369
+
3370
+ #1228: ``list_coord_tmux_sessions``'s internal 5s ``subprocess.run``
3371
+ timeout is treated as unverified, not trusted — a live smoke test
3372
+ of iteration 2 measured a >60s overrun against a real offline
3373
+ machine with the root cause never confirmed. Each per-machine sweep
3374
+ future is additionally wrapped in ``asyncio.wait_for(...,
3375
+ timeout=_SESSIONS_HARD_TIMEOUT)`` so this endpoint itself gives up
3376
+ on a stalled sweep regardless of what's slow underneath (the
3377
+ in-flight thread keeps running to completion in the background —
3378
+ ``asyncio.wait_for`` cannot cancel a blocking OS thread — but the
3379
+ request no longer waits on it).
3346
3380
  """
3347
3381
  if _fixture is not None:
3348
3382
  # Seeded roster — no tmux, no ssh fan-out in fixture mode.
@@ -3386,6 +3420,21 @@ def build_app(
3386
3420
  async def _cached_empty(machine, is_local):
3387
3421
  return machine, [], is_local
3388
3422
 
3423
+ async def _bounded_sweep(machine, is_local):
3424
+ # #1228: `asyncio.wait_for` bounds how long THIS request waits
3425
+ # on the sweep — it cannot cancel the underlying OS thread, so
3426
+ # on timeout the thread keeps running in `_sessions_executor` to
3427
+ # completion (and its result, when it eventually lands, is just
3428
+ # discarded). That's an acceptable trade for never letting one
3429
+ # stalled host block the response past `_SESSIONS_HARD_TIMEOUT`.
3430
+ future = loop.run_in_executor(_sessions_executor, _sweep_one, machine)
3431
+ try:
3432
+ return await asyncio.wait_for(future, timeout=_SESSIONS_HARD_TIMEOUT)
3433
+ except asyncio.TimeoutError:
3434
+ if not is_local:
3435
+ _sessions_offline_since[machine.name] = time.monotonic()
3436
+ return machine, [], is_local
3437
+
3389
3438
  tasks = []
3390
3439
  for m in config.machines:
3391
3440
  is_local = _is_local_machine(m)
@@ -3397,7 +3446,7 @@ def build_app(
3397
3446
  ):
3398
3447
  tasks.append(_cached_empty(m, is_local))
3399
3448
  else:
3400
- tasks.append(loop.run_in_executor(_sessions_executor, _sweep_one, m))
3449
+ tasks.append(_bounded_sweep(m, is_local))
3401
3450
 
3402
3451
  sweeps = await asyncio.gather(*tasks)
3403
3452
  # Local host(s) first so they win any session-name collision, matching
@@ -4329,6 +4378,19 @@ def build_app(
4329
4378
  ``dispatched_at`` is unconditionally stamped at dispatch time by
4330
4379
  every code path, so the bound holds even for a row whose
4331
4380
  ``finished_at`` never got recorded.
4381
+
4382
+ #1277: separately from the age-based cutoff above, a ``failed`` row
4383
+ is also dropped (default view only — ``?include=all`` still returns
4384
+ it) once ``PipelineView.superseded`` says a LATER work assignment
4385
+ for the same ``(repo, issue)`` actually succeeded — a retry/fix/
4386
+ rework attempt shipped the issue, so the earlier failed attempt is
4387
+ pure historical noise, no matter how recent it was. This is
4388
+ deliberately narrower than "the GitHub issue is closed": that would
4389
+ also cover a failure resolved by hand with no coord-dispatched
4390
+ retry, but checking it here would mean a live ``gh`` call on every
4391
+ failed row of every ``/api/pipeline`` request — left as a follow-up
4392
+ rather than risking the hot GET path on GitHub API latency/rate
4393
+ limits (and `compute_pipeline`'s pure-computation contract above).
4332
4394
  """
4333
4395
  from dataclasses import asdict
4334
4396
 
@@ -4377,6 +4439,15 @@ def build_app(
4377
4439
  ts = pv.finished_at if pv.finished_at is not None else a.dispatched_at
4378
4440
  if ts is not None and ts < cutoff:
4379
4441
  continue
4442
+ # #1277: a `failed` row whose issue later shipped via a
4443
+ # different (retry/fix/rework) assignment is pure historical
4444
+ # noise on the default view — suppress it regardless of its own
4445
+ # age (unlike the recency cutoff above, this doesn't depend on
4446
+ # how recently the failure happened, only on whether a later
4447
+ # attempt superseded it). `?include=all` still returns it — this
4448
+ # is a display-layer filter, the DB row is untouched (#1041).
4449
+ if cutoff is not None and pv.superseded:
4450
+ continue
4380
4451
  rev_aid = review_by_work.get(a.assignment_id)
4381
4452
  if rev_aid:
4382
4453
  found = (
@@ -114,6 +114,20 @@ class PipelineView:
114
114
  # recently made progress) — see compute_pipeline for the derivation.
115
115
  # None only when nothing involved has finished yet (still coding).
116
116
  finished_at: float | None = None
117
+ # #1277: True when this is a `current_stage == "failed"` row AND a later
118
+ # work assignment for the same (repo_name, issue_number) reached a
119
+ # genuinely successful terminal status ("done"/"merged") — i.e. a
120
+ # retry/fix/rework attempt superseded this failure and the issue
121
+ # shipped. Always False for any other current_stage. Pure — derived
122
+ # entirely from the already-passed-in `board` (every work assignment
123
+ # ever dispatched for this issue), no I/O — so it recomputes fresh on
124
+ # every call rather than needing a persisted flag, and self-corrects the
125
+ # instant a pending retry's own status flips to "done"/"merged". The
126
+ # dashboard (coord/dashboard/server.py's api_pipeline) uses this to
127
+ # suppress stale failed rows from the default view while leaving the DB
128
+ # rows themselves untouched (#1041 audit trail) — `?include=all` still
129
+ # surfaces them.
130
+ superseded: bool = False
117
131
 
118
132
 
119
133
  # ── GateSpec registry (#3261 S-2) ────────────────────────────────────────────
@@ -602,6 +616,32 @@ def compute_pipeline(
602
616
  review_of_assignment_id=assignment.review_of_assignment_id,
603
617
  )
604
618
 
619
+ # #1277: a failed row is "superseded" once a LATER work assignment for
620
+ # the same (repo, issue) actually succeeded ("done"/"merged" — not
621
+ # merely dispatched again; an in-flight retry doesn't supersede anything
622
+ # until it itself lands). Ordered by `dispatched_at` — the attempt
623
+ # order, and per the #2066 docstring above the one timestamp every
624
+ # assignment is unconditionally stamped with, unlike `finished_at`.
625
+ # Scoped to `current_stage == "failed"` only: a review/smoke failure on
626
+ # the SAME work assignment (review_failed/smoke_failed) isn't this kind
627
+ # of "stale duplicate row" — the work assignment itself is still the
628
+ # live one.
629
+ superseded = False
630
+ if current_stage == "failed":
631
+ this_dispatched = assignment.dispatched_at
632
+ for other in all_assignments:
633
+ if (
634
+ other.assignment_id != aid
635
+ and other.type in ("work", None, "")
636
+ and other.repo_name == assignment.repo_name
637
+ and other.issue_number == assignment.issue_number
638
+ and other.status in ("done", "merged")
639
+ and other.dispatched_at is not None
640
+ and (this_dispatched is None or other.dispatched_at > this_dispatched)
641
+ ):
642
+ superseded = True
643
+ break
644
+
605
645
  # #1218: most-recent finished_at across the work assignment and any
606
646
  # linked review/smoke assignment — whichever last made progress. This is
607
647
  # what the dashboard sorts the collapsed "Work done" section by, so it
@@ -641,4 +681,5 @@ def compute_pipeline(
641
681
  needs_attention_reason=needs_attention_reason,
642
682
  needs_attention_detail=needs_attention_detail,
643
683
  finished_at=finished_at,
684
+ superseded=superseded,
644
685
  )
@@ -412,6 +412,162 @@ class TestSessionsFanOutResilience:
412
412
  assert calls.count("flaky.tailnet") == 2
413
413
 
414
414
 
415
+ class TestSessionsHardTimeout:
416
+ """#1228 (follow-up to #1217): `list_coord_tmux_sessions`'s internal 5s
417
+ `subprocess.run` timeout was *assumed*, never verified, to bound every
418
+ per-machine sweep to ~5-6s worst case. A live smoke test of the #1217
419
+ iteration-2 fix measured a >60s (12x) overrun against a real offline
420
+ machine and the root cause was never confirmed. These tests prove
421
+ `api_sessions` no longer trusts that internal bound at all: it wraps
422
+ each sweep future in its own `asyncio.wait_for(..., timeout=
423
+ _SESSIONS_HARD_TIMEOUT)`, so a sweep that stalls for *any* reason —
424
+ not just the ConnectTimeout/BatchMode path the internal timeout
425
+ covers — cannot hold the response hostage."""
426
+
427
+ def test_endpoint_returns_within_hard_timeout_even_if_sweep_never_returns_in_time(
428
+ self, monkeypatch: pytest.MonkeyPatch,
429
+ ) -> None:
430
+ """Simulates exactly the unverified assumption in #1228: a
431
+ per-machine sweep that blocks far longer than the internal 5s cap
432
+ is ever supposed to allow. Without the endpoint-level
433
+ `asyncio.wait_for`, this request would block for the full sleep;
434
+ with it, the request returns at `_SESSIONS_HARD_TIMEOUT` instead."""
435
+ monkeypatch.setattr("coord.dashboard.server._SESSIONS_HARD_TIMEOUT", 0.1)
436
+ monkeypatch.setattr("coord.dashboard.server._SESSIONS_SLOW_THRESHOLD", 0.05)
437
+ monkeypatch.setattr("coord.dashboard.server._SESSIONS_COOLDOWN", 60.0)
438
+
439
+ config = Config(
440
+ repos=[Repo(name="api", github="acme/api")],
441
+ machines=[Machine(name="stuck", host="stuck.tailnet", repos=["api"])],
442
+ )
443
+
444
+ def _fake_list(*, host=None):
445
+ # Far longer than _SESSIONS_HARD_TIMEOUT and longer than this
446
+ # endpoint's old assumed ~5-6s worst case too — stands in for
447
+ # whatever made the real fan-out take >60s in the #1217
448
+ # iteration-2 smoke test.
449
+ time.sleep(1.0)
450
+ return []
451
+
452
+ client = TestClient(build_app(config))
453
+ with (
454
+ patch("coord.interactive.list_coord_tmux_sessions", side_effect=_fake_list),
455
+ patch("coord.dashboard.server.read_board", return_value=Board()),
456
+ ):
457
+ start = time.monotonic()
458
+ r = client.get("/api/sessions")
459
+ elapsed = time.monotonic() - start
460
+
461
+ assert r.status_code == 200
462
+ assert r.json() == []
463
+ # Bounded by the hard timeout (0.1s) plus generous scheduling slack
464
+ # — nowhere near the mocked sweep's full 1.0s sleep.
465
+ assert elapsed < 0.6, f"endpoint waited {elapsed}s past its hard timeout"
466
+
467
+ def test_sweep_that_hits_hard_timeout_still_triggers_offline_cooldown(
468
+ self, monkeypatch: pytest.MonkeyPatch,
469
+ ) -> None:
470
+ """A machine whose sweep gets abandoned via the hard timeout (not
471
+ the in-thread slow-threshold check, which never gets a chance to
472
+ run since the thread is still mid-sleep) must still enter the
473
+ offline cooldown — otherwise every ~4s poll re-pays the full stall
474
+ for a chronically wedged machine."""
475
+ monkeypatch.setattr("coord.dashboard.server._SESSIONS_HARD_TIMEOUT", 0.1)
476
+ monkeypatch.setattr("coord.dashboard.server._SESSIONS_COOLDOWN", 60.0)
477
+
478
+ config = Config(
479
+ repos=[Repo(name="api", github="acme/api")],
480
+ machines=[Machine(name="stuck", host="stuck.tailnet", repos=["api"])],
481
+ )
482
+
483
+ calls: list[str | None] = []
484
+
485
+ def _fake_list(*, host=None):
486
+ calls.append(host.ssh_target if host is not None else None)
487
+ time.sleep(1.0)
488
+ return []
489
+
490
+ client = TestClient(build_app(config))
491
+ with (
492
+ patch("coord.interactive.list_coord_tmux_sessions", side_effect=_fake_list),
493
+ patch("coord.dashboard.server.read_board", return_value=Board()),
494
+ ):
495
+ client.get("/api/sessions")
496
+ client.get("/api/sessions")
497
+
498
+ # The second poll must skip spawning a new sweep entirely — it's
499
+ # within the cooldown window started by the first poll's hard
500
+ # timeout, even though that first sweep's thread is still asleep.
501
+ assert calls.count("stuck.tailnet") == 1
502
+
503
+
504
+ class TestSshConnectTimeoutAgainstUnreachableHost:
505
+ """#1228: settle (rather than assume) whether `ssh -o BatchMode=yes -o
506
+ ConnectTimeout=4` — with this codebase's exact `TmuxHost(batch=True)`
507
+ argv, including the `_SSH_MUX_OPTS` ControlMaster options — actually
508
+ bounds a genuinely unreachable (packet-dropped, no route) host, as
509
+ opposed to only the fast auth/host-key rejections the #1217 chat
510
+ diagnostic session reproduced.
511
+
512
+ Uses a TEST-NET-1 address (``192.0.2.0/24``, RFC 5737) instead of a
513
+ real fleet machine's uptime: it is guaranteed non-routable on the
514
+ public internet, involves no DNS lookup and no auth, so any machine
515
+ running this suite reproduces the same "no response at all" condition
516
+ a chronically offline fleet machine would present at the network
517
+ level — deterministically, without needing one to stay offline.
518
+
519
+ This is a real subprocess test (no mocking) and is skipped outright
520
+ when the local network stack rejects the destination instantly (e.g.
521
+ a sandbox with no outbound routing at all) — that's a different,
522
+ already-bounded failure signature and doesn't exercise the packet-drop
523
+ path this test is for.
524
+ """
525
+
526
+ _TEST_NET_1_HOST = "192.0.2.1" # RFC 5737: reserved, never routed
527
+
528
+ def test_connect_timeout_bounds_a_packet_dropped_host(self) -> None:
529
+ import subprocess
530
+
531
+ from coord.interactive import TmuxHost
532
+
533
+ host = TmuxHost(ssh_target=self._TEST_NET_1_HOST, batch=True)
534
+ cmd = host.cmd(["list-panes", "-a"])
535
+
536
+ start = time.monotonic()
537
+ try:
538
+ # Mirrors list_coord_tmux_sessions' own subprocess.run(timeout=5.0)
539
+ # exactly — if ssh's ConnectTimeout=4 didn't bound the call, this
540
+ # outer timeout would be the one to fire instead.
541
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=5.0)
542
+ except subprocess.TimeoutExpired:
543
+ elapsed = time.monotonic() - start
544
+ pytest.fail(
545
+ f"ssh did not return within the outer 5s timeout at all "
546
+ f"(elapsed={elapsed:.2f}s) — ConnectTimeout=4 failed to "
547
+ f"bound a packet-dropped host; this IS the #1228 bug."
548
+ )
549
+ elapsed = time.monotonic() - start
550
+
551
+ if elapsed < 1.0:
552
+ pytest.skip(
553
+ f"this environment rejected {self._TEST_NET_1_HOST} "
554
+ f"instantly (elapsed={elapsed:.2f}s, rc={result.returncode}, "
555
+ f"stderr={result.stderr.strip()!r}) instead of black-holing "
556
+ "it — can't exercise the packet-drop path here."
557
+ )
558
+
559
+ # ssh failed to connect (never reaches auth) ...
560
+ assert result.returncode != 0
561
+ # ... and ConnectTimeout=4 genuinely bounded it: comfortably under
562
+ # the outer 5s subprocess timeout, and in the right ballpark for a
563
+ # ~4s connect timeout rather than some other unrelated fast/slow
564
+ # path.
565
+ assert 3.0 <= elapsed <= 4.8, (
566
+ f"elapsed={elapsed:.2f}s outside the expected ConnectTimeout=4 "
567
+ f"window (rc={result.returncode}, stderr={result.stderr.strip()!r})"
568
+ )
569
+
570
+
415
571
  class TestProposalsAPI:
416
572
  def test_returns_proposals(self, tmp_path: Path) -> None:
417
573
  proposals = [
@@ -524,6 +524,85 @@ class TestFinishedAtField:
524
524
  assert pv.finished_at == 100.0
525
525
 
526
526
 
527
+ # ── #1277: superseded field (stale failed row hidden after a later success) ─
528
+
529
+
530
+ class TestSupersededField:
531
+ def test_failed_with_no_sibling_is_not_superseded(self) -> None:
532
+ a = _work(aid="work-1", status="failed")
533
+ pv = compute_pipeline(a, _board(a), [], _config())
534
+ assert pv.current_stage == "failed"
535
+ assert pv.superseded is False
536
+
537
+ def test_failed_superseded_by_later_successful_retry(self) -> None:
538
+ """The canonical #790 shape: a failed attempt, then a later retry
539
+ (different assignment_id, same repo+issue) that actually succeeded."""
540
+ failed = _work(aid="work-1", status="failed")
541
+ failed.dispatched_at = 100.0
542
+ retry = _work(aid="work-2", status="done")
543
+ retry.dispatched_at = 200.0
544
+ board = Board(active=[], completed=[failed, retry])
545
+ pv = compute_pipeline(failed, board, [], _config())
546
+ assert pv.current_stage == "failed"
547
+ assert pv.superseded is True
548
+
549
+ def test_merged_retry_also_supersedes(self) -> None:
550
+ failed = _work(aid="work-1", status="failed")
551
+ failed.dispatched_at = 100.0
552
+ retry = _work(aid="work-2", status="merged")
553
+ retry.dispatched_at = 200.0
554
+ board = Board(active=[], completed=[failed, retry])
555
+ pv = compute_pipeline(failed, board, [], _config())
556
+ assert pv.superseded is True
557
+
558
+ def test_earlier_success_does_not_supersede_a_later_failure(self) -> None:
559
+ """Ordering matters: a success dispatched BEFORE this failure doesn't
560
+ make the failure stale — it's the live, most-recent attempt."""
561
+ earlier_success = _work(aid="work-1", status="done")
562
+ earlier_success.dispatched_at = 100.0
563
+ failed = _work(aid="work-2", status="failed")
564
+ failed.dispatched_at = 200.0
565
+ board = Board(active=[], completed=[earlier_success, failed])
566
+ pv = compute_pipeline(failed, board, [], _config())
567
+ assert pv.current_stage == "failed"
568
+ assert pv.superseded is False
569
+
570
+ def test_later_in_flight_retry_does_not_supersede_yet(self) -> None:
571
+ """A retry that hasn't itself succeeded (still running/pending)
572
+ doesn't retroactively clear the earlier failure — only an actual
573
+ success does."""
574
+ failed = _work(aid="work-1", status="failed")
575
+ failed.dispatched_at = 100.0
576
+ retry = _work(aid="work-2", status="running")
577
+ retry.dispatched_at = 200.0
578
+ board = Board(active=[retry], completed=[failed])
579
+ pv = compute_pipeline(failed, board, [], _config())
580
+ assert pv.superseded is False
581
+
582
+ def test_sibling_in_a_different_repo_does_not_supersede(self) -> None:
583
+ failed = _work(aid="work-1", status="failed")
584
+ failed.dispatched_at = 100.0
585
+ other_repo_success = Assignment(
586
+ machine_name="laptop", repo_name="other-repo",
587
+ issue_number=42, issue_title="Fix auth", assignment_id="work-2",
588
+ status="done", type="work", dispatched_at=200.0,
589
+ )
590
+ board = Board(active=[], completed=[failed, other_repo_success])
591
+ pv = compute_pipeline(failed, board, [], _config())
592
+ assert pv.superseded is False
593
+
594
+ def test_non_failed_stage_is_never_superseded(self) -> None:
595
+ """superseded is scoped to current_stage == 'failed' — a review/smoke
596
+ failure on the SAME still-live work assignment isn't this kind of
597
+ stale duplicate row."""
598
+ a = _work(status="done")
599
+ smk = _smoke(of_aid="work-1", status="failed")
600
+ board = Board(active=[], completed=[a, smk])
601
+ pv = compute_pipeline(a, board, [], _config())
602
+ assert pv.current_stage == "smoke_failed"
603
+ assert pv.superseded is False
604
+
605
+
527
606
  # ── #846: needs_attention field ─────────────────────────────────────────────
528
607
 
529
608
 
@@ -992,6 +1071,94 @@ class TestPipelineRetention:
992
1071
  assert r.json() == []
993
1072
 
994
1073
 
1074
+ class TestPipelineAPISupersededFiltering:
1075
+ """#1277: /api/pipeline suppresses a `failed` row by default once a
1076
+ later retry/fix for the same (repo, issue) actually succeeded — one
1077
+ current-stage row per issue, not a growing pile of dead retries."""
1078
+
1079
+ def test_failed_then_succeeded_yields_one_row_by_default(self) -> None:
1080
+ """The exact scenario from the issue: two assignments for the same
1081
+ issue — one failed, one later succeeded — yields a single
1082
+ current-stage pipeline row, not two."""
1083
+ import time
1084
+
1085
+ now = time.time()
1086
+ failed = Assignment(
1087
+ machine_name="laptop", repo_name="api",
1088
+ issue_number=790, issue_title="Flaky thing",
1089
+ assignment_id="w-fail", status="failed", type="work",
1090
+ dispatched_at=now - 3600, finished_at=now - 3600,
1091
+ )
1092
+ succeeded = Assignment(
1093
+ machine_name="laptop", repo_name="api",
1094
+ issue_number=790, issue_title="Flaky thing",
1095
+ assignment_id="w-retry", status="done", type="work",
1096
+ dispatched_at=now - 1800, finished_at=now - 1800,
1097
+ )
1098
+ board = Board(active=[], completed=[failed, succeeded])
1099
+ client = _dashboard_client()
1100
+ with (
1101
+ patch("coord.dashboard.server.read_board", return_value=board),
1102
+ patch("coord.merge_queue.load_queue", return_value=[]),
1103
+ ):
1104
+ r = client.get("/api/pipeline")
1105
+ assert r.status_code == 200
1106
+ data = r.json()
1107
+ ids = [pv["assignment_id"] for pv in data]
1108
+ assert ids == ["w-retry"]
1109
+
1110
+ def test_include_all_still_returns_the_superseded_failed_row(self) -> None:
1111
+ """Display-layer filter, not a delete (#1041): the full history is
1112
+ still reachable via ?include=all."""
1113
+ import time
1114
+
1115
+ now = time.time()
1116
+ failed = Assignment(
1117
+ machine_name="laptop", repo_name="api",
1118
+ issue_number=790, issue_title="Flaky thing",
1119
+ assignment_id="w-fail", status="failed", type="work",
1120
+ dispatched_at=now - 3600, finished_at=now - 3600,
1121
+ )
1122
+ succeeded = Assignment(
1123
+ machine_name="laptop", repo_name="api",
1124
+ issue_number=790, issue_title="Flaky thing",
1125
+ assignment_id="w-retry", status="done", type="work",
1126
+ dispatched_at=now - 1800, finished_at=now - 1800,
1127
+ )
1128
+ board = Board(active=[], completed=[failed, succeeded])
1129
+ client = _dashboard_client()
1130
+ with (
1131
+ patch("coord.dashboard.server.read_board", return_value=board),
1132
+ patch("coord.merge_queue.load_queue", return_value=[]),
1133
+ ):
1134
+ r = client.get("/api/pipeline?include=all")
1135
+ assert r.status_code == 200
1136
+ ids = {pv["assignment_id"] for pv in r.json()}
1137
+ assert ids == {"w-fail", "w-retry"}
1138
+
1139
+ def test_still_open_failure_with_no_later_success_stays_visible(self) -> None:
1140
+ """#772's shape — only failed row for an issue, never retried — must
1141
+ not be swept away by this filter."""
1142
+ import time
1143
+
1144
+ failed = Assignment(
1145
+ machine_name="laptop", repo_name="api",
1146
+ issue_number=772, issue_title="Optional thing",
1147
+ assignment_id="w-fail-only", status="failed", type="work",
1148
+ dispatched_at=time.time() - 3600, finished_at=time.time() - 3600,
1149
+ )
1150
+ board = Board(active=[], completed=[failed])
1151
+ client = _dashboard_client()
1152
+ with (
1153
+ patch("coord.dashboard.server.read_board", return_value=board),
1154
+ patch("coord.merge_queue.load_queue", return_value=[]),
1155
+ ):
1156
+ r = client.get("/api/pipeline")
1157
+ assert r.status_code == 200
1158
+ ids = [pv["assignment_id"] for pv in r.json()]
1159
+ assert ids == ["w-fail-only"]
1160
+
1161
+
995
1162
  class TestPipelineActionAPI:
996
1163
  def test_missing_fields_returns_400(self) -> None:
997
1164
  client = _dashboard_client()