code-coordinator 0.5.574__tar.gz → 0.5.576__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.574 → code_coordinator-0.5.576}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/server.py +22 -0
  5. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/pipeline.py +41 -0
  6. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/reports.py +112 -17
  7. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_pipeline.py +167 -0
  8. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reports.py +103 -5
  9. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.github/workflows/test.yml +0 -0
  21. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/.gitignore +0 -0
  22. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/CLAUDE.md +0 -0
  23. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/GOAL.md +0 -0
  24. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/LICENSE +0 -0
  25. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/MANIFEST.in +0 -0
  26. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/README.md +0 -0
  27. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/SOURCES.txt +0 -0
  28. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/scm_file_list.json +0 -0
  32. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/backup.py +0 -0
  47. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/bugbash.py +0 -0
  55. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/claude_setup_token.py +0 -0
  62. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/client.py +0 -0
  64. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/codegen.py +0 -0
  65. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/backup.py +0 -0
  71. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/bugbash.py +0 -0
  72. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/ci.py +0 -0
  74. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/codegen.py +0 -0
  75. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/dispatch.py +0 -0
  76. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/dispatch_workers.py +0 -0
  77. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/dr.py +0 -0
  78. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/drive.py +0 -0
  79. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/drive_queue.py +0 -0
  80. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/gate_a.py +0 -0
  81. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/machine.py +0 -0
  85. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/merge.py +0 -0
  86. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/milestone.py +0 -0
  87. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/plan_followup.py +0 -0
  88. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/plans.py +0 -0
  89. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/portal.py +0 -0
  90. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/pr.py +0 -0
  91. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/release.py +0 -0
  92. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/repo.py +0 -0
  93. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/report.py +0 -0
  94. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/review.py +0 -0
  95. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/scorecard.py +0 -0
  96. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/sessions.py +0 -0
  97. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/setup.py +0 -0
  98. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/status.py +0 -0
  99. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/store_migrate.py +0 -0
  100. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/terminal.py +0 -0
  101. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/test_gate.py +0 -0
  102. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/commands/tui.py +0 -0
  103. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/comments.py +0 -0
  104. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/config.py +0 -0
  105. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/reports.html +0 -0
  113. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/db.py +0 -0
  115. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deprecation_telemetry.py +0 -0
  144. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/diagnose.py +0 -0
  146. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dispatch.py +0 -0
  147. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dispatch_liveness.py +0 -0
  148. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dist_name.py +0 -0
  149. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dr_promote.py +0 -0
  150. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/dr_verify.py +0 -0
  151. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/drive.py +0 -0
  152. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/drive_queue.py +0 -0
  153. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/drive_sessions_snapshot.py +0 -0
  154. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/events.py +0 -0
  156. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gates.py +0 -0
  166. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gen_board_fixture.py +0 -0
  167. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/github_ops.py +0 -0
  168. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/github_throttle.py +0 -0
  169. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/goal.py +0 -0
  170. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/graph_health.py +0 -0
  171. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/gtk_native_driver.py +0 -0
  172. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/__init__.py +0 -0
  173. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/aggregate.py +0 -0
  174. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/__init__.py +0 -0
  175. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/_ci_pin.py +0 -0
  176. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/agent_install.py +0 -0
  177. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/cargo_targets.py +0 -0
  178. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/claude_binary.py +0 -0
  179. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/config_drift.py +0 -0
  180. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  181. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/coord_web_ci_pin.py +0 -0
  182. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/deploy_lane_facts.py +0 -0
  183. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/disk.py +0 -0
  184. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/fleet_board.py +0 -0
  185. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  186. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/fleet_phantom.py +0 -0
  187. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/fleet_unit_drift.py +0 -0
  188. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/graph.py +0 -0
  189. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/graphify_cli.py +0 -0
  190. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/index_lock.py +0 -0
  191. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/issues_sync_staleness.py +0 -0
  192. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/local_machine_identity.py +0 -0
  193. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/plan_usage.py +0 -0
  194. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/pr_churn.py +0 -0
  195. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/release_cordon.py +0 -0
  196. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/repo_state.py +0 -0
  197. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/spawned_coord.py +0 -0
  198. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/stalled_pipeline.py +0 -0
  199. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/timer_active.py +0 -0
  200. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/toolchain.py +0 -0
  201. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/unit_drift.py +0 -0
  202. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/unit_enablement.py +0 -0
  203. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/wedged_drive_queue.py +0 -0
  204. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/checks/worktrees.py +0 -0
  205. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/cli.py +0 -0
  206. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/context.py +0 -0
  207. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/fleet_snapshot.py +0 -0
  208. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/models.py +0 -0
  209. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/pypi.py +0 -0
  210. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/registry.py +0 -0
  211. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/render.py +0 -0
  212. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/health/units.py +0 -0
  213. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/hooks.py +0 -0
  214. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/housekeeping.py +0 -0
  215. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/interactive.py +0 -0
  216. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/invariant_alarms.py +0 -0
  217. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/issue_store.py +0 -0
  218. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/issues_sync_status.py +0 -0
  219. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/liveness_auditor.py +0 -0
  220. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/mac_native_driver.py +0 -0
  221. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/machine_fault.py +0 -0
  222. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/machine_metrics.py +0 -0
  223. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/machine_onboard.py +0 -0
  224. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/machine_pause.py +0 -0
  225. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/machine_stats.py +0 -0
  226. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/merge_queue.py +0 -0
  227. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/milestone_chat.py +0 -0
  228. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/milestone_dispatch.py +0 -0
  229. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/milestone_gate.py +0 -0
  230. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/milestone_order.py +0 -0
  231. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/mock_author.py +0 -0
  232. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/models.py +0 -0
  233. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/network.py +0 -0
  234. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/new_issue_chat.py +0 -0
  235. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/__init__.py +0 -0
  236. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/baseline.py +0 -0
  237. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/cli.py +0 -0
  238. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/collect.py +0 -0
  239. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/digest.py +0 -0
  240. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/models.py +0 -0
  241. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/predicate.py +0 -0
  242. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/service.py +0 -0
  243. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/store.py +0 -0
  244. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notifier/transport.py +0 -0
  245. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/notify.py +0 -0
  246. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/openapi.py +0 -0
  247. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/overlap_fence.py +0 -0
  248. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/overlap_predict.py +0 -0
  249. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/parentage.py +0 -0
  250. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/parentage_github.py +0 -0
  251. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/plan_parser.py +0 -0
  252. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/plans.py +0 -0
  253. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/platform_paths.py +0 -0
  254. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/portal_bridge.py +0 -0
  255. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/portal_store.py +0 -0
  256. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/portal_sync.py +0 -0
  257. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/pr_body_lint.py +0 -0
  258. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/prereqs.py +0 -0
  259. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/progress.py +0 -0
  260. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/providers/__init__.py +0 -0
  261. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/providers/base.py +0 -0
  262. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/providers/claude.py +0 -0
  263. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/providers/claude_pty.py +0 -0
  264. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/providers/opencode.py +0 -0
  265. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/queue_diagnose.py +0 -0
  266. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/reconcile.py +0 -0
  267. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/reconcile_tick.py +0 -0
  268. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/refine_chat.py +0 -0
  269. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/release_cordon.py +0 -0
  270. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/release_gate.py +0 -0
  271. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/release_propagate.py +0 -0
  272. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/release_verify.py +0 -0
  273. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/release_window.py +0 -0
  274. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/repo_dormancy.py +0 -0
  275. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/repo_edit.py +0 -0
  276. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/repo_onboard.py +0 -0
  277. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/rest_schema.py +0 -0
  278. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/restart_cmd.py +0 -0
  279. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/revalidate.py +0 -0
  280. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/review.py +0 -0
  281. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/scorecard.py +0 -0
  282. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/self_health.py +0 -0
  283. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/serve_app.py +0 -0
  284. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  285. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  286. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  287. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  288. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/portal-followup/SKILL.md +0 -0
  290. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/release-now/SKILL.md +0 -0
  291. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  292. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  293. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/skills/update-issue/SKILL.md +0 -0
  294. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/smoke.py +0 -0
  295. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/smoke_tags.py +0 -0
  296. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/spend_ceiling.py +0 -0
  297. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/split_work.py +0 -0
  298. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/sql.py +0 -0
  299. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/stage_projection.py +0 -0
  300. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/state.py +0 -0
  301. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/store_migrate.py +0 -0
  302. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/store_parity.py +0 -0
  303. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/templates/deploy-cloudflare.node.yml +0 -0
  304. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/test_author.py +0 -0
  305. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/test_chat.py +0 -0
  306. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/test_orchestrator.py +0 -0
  307. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/test_report.py +0 -0
  308. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/tui_pty_driver.py +0 -0
  309. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/tui_release.py +0 -0
  310. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/uat_checks.py +0 -0
  311. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/usage.py +0 -0
  312. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/usage_limits.py +0 -0
  313. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/usage_rollup.py +0 -0
  314. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/win_native_bridge.py +0 -0
  315. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/win_native_driver.py +0 -0
  316. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coord/worker_events.py +0 -0
  317. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/coordinator.example.yml +0 -0
  318. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/setup.cfg +0 -0
  429. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_bugbash.py +0 -0
  518. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_check_gh_argv_containment.py +0 -0
  521. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_acceptance_gate_1950.py +0 -0
  522. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_fix.py +0 -0
  523. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_github.py +0 -0
  524. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_gitlab.py +0 -0
  525. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_claude_md_budget.py +0 -0
  529. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_claude_setup_token.py +0 -0
  530. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_acceptance.py +0 -0
  531. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_assign.py +0 -0
  532. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  533. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_assign_interactive_remote.py +0 -0
  534. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_assign_provider.py +0 -0
  535. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  536. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_audit.py +0 -0
  537. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_chat_continue.py +0 -0
  538. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_ci.py +0 -0
  539. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_codegen.py +0 -0
  540. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_decide.py +0 -0
  541. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_capability_rules.py +0 -0
  542. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_config_provenance.py +0 -0
  543. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_forge_availability.py +0 -0
  544. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_graph.py +0 -0
  545. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_self.py +0 -0
  546. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_diagnose_test_coverage.py +0 -0
  547. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  551. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_issue_comment.py +0 -0
  559. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_issue_view_list.py +0 -0
  562. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_issues.py +0 -0
  563. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_merge.py +0 -0
  564. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_assign.py +0 -0
  565. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_capture.py +0 -0
  566. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_chat_add_child.py +0 -0
  567. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_dispatch.py +0 -0
  568. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_gate_b.py +0 -0
  569. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_gate_c.py +0 -0
  570. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_order.py +0 -0
  571. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  572. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_milestone_ship.py +0 -0
  573. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_network.py +0 -0
  574. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_new_issue_chat.py +0 -0
  575. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_plans.py +0 -0
  576. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_portal.py +0 -0
  577. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_pr.py +0 -0
  578. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  587. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_scorecard.py +0 -0
  588. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_serve_store_backend_3084.py +0 -0
  589. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_contested_tag.py +0 -0
  592. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_invariant_alarms.py +0 -0
  593. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_machine_fault.py +0 -0
  594. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_retried_3340.py +0 -0
  597. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_supervisor_3366.py +0 -0
  599. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_test_failed_tag.py +0 -0
  600. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_status_usage_limit.py +0 -0
  601. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_sync_comments_873.py +0 -0
  602. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_test_plan.py +0 -0
  603. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_track.py +0 -0
  604. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_tui_update.py +0 -0
  605. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cli_wait.py +0 -0
  606. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_client.py +0 -0
  607. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_client_base_install.py +0 -0
  608. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_client_config_cache_atomic_3052.py +0 -0
  609. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_client_resource_migration_1946.py +0 -0
  610. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_commands_common.py +0 -0
  611. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_comments.py +0 -0
  612. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_completion_summary.py +0 -0
  613. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config.py +0 -0
  614. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_acceptance.py +0 -0
  615. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_audit.py +0 -0
  616. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_drift_check.py +0 -0
  617. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_effective.py +0 -0
  618. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_pricing.py +0 -0
  619. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  620. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_config_usage_gate.py +0 -0
  621. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_confirm_test.py +0 -0
  622. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_conflict_fix.py +0 -0
  623. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_conflict_fix_semantic.py +0 -0
  624. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  625. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test.py +0 -0
  626. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  627. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test_runner_baseline.py +0 -0
  628. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test_runner_populated_home.py +0 -0
  629. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test_runner_routing.py +0 -0
  630. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_test_runner_toolchain.py +0 -0
  631. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_uat.py +0 -0
  632. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dao.py +0 -0
  636. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard.py +0 -0
  637. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_api.py +0 -0
  638. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_fixture.py +0 -0
  639. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_reports.py +0 -0
  640. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_server.py +0 -0
  641. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_terminal.py +0 -0
  642. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dashboard_terminal_live.py +0 -0
  643. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_db.py +0 -0
  644. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dead_end.py +0 -0
  645. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_decomposition_chat.py +0 -0
  646. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_coord_db_backup.py +0 -0
  647. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_coord_web_dist.py +0 -0
  648. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_coord_web_rollback.py +0 -0
  649. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_db_backup_unit.py +0 -0
  650. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_drive_queue_unit.py +0 -0
  651. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_failure_notify_unit.py +0 -0
  652. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_manifest.py +0 -0
  653. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_notify_unit.py +0 -0
  654. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_units_lane.py +0 -0
  655. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deploy_web_unit.py +0 -0
  656. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deprecation_telemetry.py +0 -0
  657. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_deps.py +0 -0
  658. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_diagnose.py +0 -0
  659. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dispatch.py +0 -0
  660. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dispatch_liveness.py +0 -0
  661. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dispatch_target_validation.py +0 -0
  662. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dispatch_workers.py +0 -0
  663. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dist_name.py +0 -0
  664. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_done_housekeeping.py +0 -0
  665. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dr_azure_scripts.py +0 -0
  666. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dr_promote.py +0 -0
  667. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_dr_verify.py +0 -0
  668. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive.py +0 -0
  669. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_machine_fault.py +0 -0
  670. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue.py +0 -0
  671. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_blocked_rendering.py +0 -0
  672. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_launch_argv.py +0 -0
  673. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_max_parallel_config.py +0 -0
  674. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  675. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_roll_pending.py +0 -0
  676. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  677. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_sessions_snapshot.py +0 -0
  678. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_state.py +0 -0
  679. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_drive_tmux.py +0 -0
  680. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_epic_up_capability_detection.py +0 -0
  681. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  682. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_epic_up_image_provenance.py +0 -0
  683. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_errors.py +0 -0
  684. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_events.py +0 -0
  685. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_failure_class.py +0 -0
  686. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_failure_classifier.py +0 -0
  687. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_filelock.py +0 -0
  688. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  689. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fix_escalation_classifier.py +0 -0
  690. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fix_of_force_override.py +0 -0
  691. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fleet_config_health.py +0 -0
  692. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fleet_health_probes.py +0 -0
  693. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fleet_health_snapshot.py +0 -0
  694. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_fleet_watchdog.py +0 -0
  695. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_forge_availability.py +0 -0
  696. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_freshness.py +0 -0
  697. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gate_a.py +0 -0
  698. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gate_b.py +0 -0
  699. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gate_snapshot_staleness.py +0 -0
  700. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gates.py +0 -0
  701. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  702. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gen_mock_index.py +0 -0
  703. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_generated_rust_fixture.py +0 -0
  704. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_generated_rust_requests.py +0 -0
  705. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_generated_types_fixture.py +0 -0
  706. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_github_ops.py +0 -0
  707. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_github_throttle.py +0 -0
  708. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_goal.py +0 -0
  709. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_graph_health.py +0 -0
  710. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_graph_selfheal_absent_2237.py +0 -0
  711. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_gtk_native_driver.py +0 -0
  712. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_handoff.py +0 -0
  713. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_checks.py +0 -0
  714. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_cli.py +0 -0
  715. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_cli_graph.py +0 -0
  716. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_config.py +0 -0
  717. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_context.py +0 -0
  718. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_coord_tui_ci_pin.py +0 -0
  719. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_coord_web_ci_pin.py +0 -0
  720. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_deploy_lane_facts.py +0 -0
  721. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_fix.py +0 -0
  722. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_incident_regression.py +0 -0
  723. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_issues_sync_staleness.py +0 -0
  724. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_pr_churn.py +0 -0
  725. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_pypi.py +0 -0
  726. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_registry.py +0 -0
  727. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_release_cordon_probe.py +0 -0
  728. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_timer_active.py +0 -0
  729. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_toolchain.py +0 -0
  730. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_unit_drift.py +0 -0
  731. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_unit_enablement.py +0 -0
  732. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_health_wedged_drive_queue.py +0 -0
  733. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_hooks.py +0 -0
  734. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_housekeeping.py +0 -0
  735. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_human_attended_437.py +0 -0
  736. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_init.py +0 -0
  737. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_install_agent_capabilities_3515.py +0 -0
  738. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_install_agent_venv_2911.py +0 -0
  739. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  740. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_integration.py +0 -0
  741. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive.py +0 -0
  742. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_briefing_echo.py +0 -0
  743. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_pane_log_2541.py +0 -0
  744. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_prefill_state.py +0 -0
  745. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_session_relaunch.py +0 -0
  746. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_test_verdict_backstop.py +0 -0
  747. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_token_attribution.py +0 -0
  748. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_interactive_worktree.py +0 -0
  749. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_invariant_alarms.py +0 -0
  750. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_issue_store_seam.py +0 -0
  751. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_issues_sync_status.py +0 -0
  752. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_liveness_auditor.py +0 -0
  753. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_liveness_notify.py +0 -0
  754. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_lock_contention_ratchet.py +0 -0
  755. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_mac_native_driver.py +0 -0
  756. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_machine_fault.py +0 -0
  757. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_machine_metrics.py +0 -0
  758. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_machine_onboard.py +0 -0
  759. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_machine_pause.py +0 -0
  760. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_machine_stats.py +0 -0
  761. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_merge_queue.py +0 -0
  762. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_merge_verify.py +0 -0
  763. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_milestone_chat.py +0 -0
  764. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_milestone_dispatch.py +0 -0
  765. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_milestone_gate.py +0 -0
  766. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_milestone_order.py +0 -0
  767. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_milestone_seam.py +0 -0
  768. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_mock_author.py +0 -0
  769. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_model_tiering.py +0 -0
  770. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_models.py +0 -0
  771. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_models_config_labels.py +0 -0
  772. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_needs_attention.py +0 -0
  773. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_network.py +0 -0
  774. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_new_issue_chat.py +0 -0
  775. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_next_release_tag.py +0 -0
  776. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_node_shim.py +0 -0
  777. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_baseline.py +0 -0
  778. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_cli.py +0 -0
  779. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_collect.py +0 -0
  780. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_config.py +0 -0
  781. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_drive_seam.py +0 -0
  782. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_isolation.py +0 -0
  783. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_predicate.py +0 -0
  784. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_quiet_hours.py +0 -0
  785. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notifier_service.py +0 -0
  786. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notify.py +0 -0
  787. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_notify_drain.py +0 -0
  788. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_openapi.py +0 -0
  789. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_operational_defaults.py +0 -0
  790. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_overlap_fence.py +0 -0
  791. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_overlap_predict.py +0 -0
  792. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_packaged_deploy_units.py +0 -0
  793. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_parentage.py +0 -0
  794. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_paste_landed.py +0 -0
  795. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  796. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_plan_followup_approve_plan_command.py +0 -0
  797. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_plan_followup_pr_command.py +0 -0
  798. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_plan_followup_review_command.py +0 -0
  799. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_plan_only.py +0 -0
  800. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_plan_parser.py +0 -0
  801. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_platform_paths.py +0 -0
  802. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_portal_bridge.py +0 -0
  803. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_portal_config.py +0 -0
  804. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_portal_store.py +0 -0
  805. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_portal_sync.py +0 -0
  806. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_pr_body_lint.py +0 -0
  807. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_prereqs.py +0 -0
  808. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_production_db_guard.py +0 -0
  809. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_progress.py +0 -0
  810. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_provider_seam.py +0 -0
  811. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_providers.py +0 -0
  812. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_providers_config_labels.py +0 -0
  813. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_providers_pty.py +0 -0
  814. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_provision_core.py +0 -0
  815. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_provision_machine.py +0 -0
  816. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_py_rust_mirror_inventory.py +0 -0
  817. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_quiet_hours.py +0 -0
  818. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_quiet_hours_store_2146.py +0 -0
  819. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reap_merged_sessions.py +0 -0
  820. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reap_stale_interactive_tick.py +0 -0
  821. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile.py +0 -0
  822. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_branch.py +0 -0
  823. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_completions.py +0 -0
  824. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  825. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_merges.py +0 -0
  826. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_no_agent_record.py +0 -0
  827. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_tick.py +0 -0
  828. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_reconcile_usage_limit_done.py +0 -0
  829. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_refine_chat.py +0 -0
  830. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_cordon_2101.py +0 -0
  831. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  832. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_cordon_deadlock_2240.py +0 -0
  833. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  834. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_cordon_stuck_2490.py +0 -0
  835. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_gate.py +0 -0
  836. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_propagate.py +0 -0
  837. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_propagate_threshold.py +0 -0
  838. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_roll_between_legs_2854.py +0 -0
  839. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_roll_window_handoff.py +0 -0
  840. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_unified_1242.py +0 -0
  841. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_verify.py +0 -0
  842. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_release_window.py +0 -0
  843. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_remote_auto_prune.py +0 -0
  844. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_remote_interactive_reaper.py +0 -0
  845. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_add.py +0 -0
  846. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_dormancy.py +0 -0
  847. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_edit_2220.py +0 -0
  848. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_graph_fleet_2237.py +0 -0
  849. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_max_parallel_3423.py +0 -0
  850. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_repo_onboard_2220.py +0 -0
  851. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_report_public_export.py +0 -0
  852. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_report_result_push.py +0 -0
  853. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_restart_cmd.py +0 -0
  854. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_retry.py +0 -0
  855. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_retry_advisory_1606.py +0 -0
  856. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_retry_escalation_classify_3360.py +0 -0
  857. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_retry_type_1636.py +0 -0
  858. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_revalidate.py +0 -0
  859. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review.py +0 -0
  860. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_end_review_without_verdict.py +0 -0
  861. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_parse_failure_diagnostic.py +0 -0
  862. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_reaffirm.py +0 -0
  863. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_state.py +0 -0
  864. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_verdict_backstop.py +0 -0
  865. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_verdict_override_audit.py +0 -0
  866. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_verdict_relay.py +0 -0
  867. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_review_zero_commits.py +0 -0
  868. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_scoped_review_wiring.py +0 -0
  869. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_scorecard.py +0 -0
  870. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_self_health.py +0 -0
  871. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_serve.py +0 -0
  872. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_serve_app.py +0 -0
  873. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_serve_app_board_trim.py +0 -0
  874. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_serve_rest_routes.py +0 -0
  875. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_session.py +0 -0
  876. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_slice_issue_attribution.py +0 -0
  877. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_smoke.py +0 -0
  878. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  879. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_smoke_live_checkout_restore.py +0 -0
  880. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_smoke_workflow.py +0 -0
  881. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_spend_ceiling.py +0 -0
  882. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_spend_ceiling_coordinator.py +0 -0
  883. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_split.py +0 -0
  884. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_split_work.py +0 -0
  885. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_sql_dialect.py +0 -0
  886. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_sqlite_connect_ratchet.py +0 -0
  887. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stage_projection.py +0 -0
  888. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stale_busy_reviewer_697.py +0 -0
  889. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stalled_pipeline.py +0 -0
  890. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_state.py +0 -0
  891. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_state_review_findings_daemon.py +0 -0
  892. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_status_fleet_footer.py +0 -0
  893. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stop_1567.py +0 -0
  894. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_store_contract.py +0 -0
  895. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_store_migrate.py +0 -0
  896. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stuck.py +0 -0
  897. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  898. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_terminal_command.py +0 -0
  899. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_author.py +0 -0
  900. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_chat.py +0 -0
  901. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_orchestrator.py +0 -0
  902. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_report.py +0 -0
  903. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_verdict_parsing.py +0 -0
  904. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_test_verdict_transcript_floor.py +0 -0
  905. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_text_io_encoding_audit.py +0 -0
  906. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_thin_client_board_audit.py +0 -0
  907. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_thin_client_config_load_1080.py +0 -0
  908. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_thin_client_daemon_routing_906.py +0 -0
  909. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_throwaway_vm.py +0 -0
  910. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_tmux_host.py +0 -0
  911. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_tmux_session.py +0 -0
  912. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_transcript_floor.py +0 -0
  913. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_tui_pty_driver.py +0 -0
  914. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_uat_checks.py +0 -0
  915. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_usage.py +0 -0
  916. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_usage_limits.py +0 -0
  917. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_usage_rollup.py +0 -0
  918. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_venv_live_install_2121.py +0 -0
  919. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_version_single_source.py +0 -0
  920. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_watch.py +0 -0
  921. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_win_native_bridge.py +0 -0
  922. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_win_native_driver.py +0 -0
  923. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  924. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worker_env_venv_isolation.py +0 -0
  925. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worker_events.py +0 -0
  926. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worker_image_pin_sync.py +0 -0
  927. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worker_safety.py +0 -0
  928. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worker_test_scoping.py +0 -0
  929. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worktree.py +0 -0
  930. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  931. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/tests/test_write_parity.py +0 -0
  932. {code_coordinator-0.5.574 → code_coordinator-0.5.576}/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.574
3
+ Version: 0.5.576
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.574
3
+ Version: 0.5.576
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.574",
2
+ "tag": "0.5.576",
3
3
  "distance": 0,
4
- "node": "g15888500b70e89c6ef17658b665ae3fb70f2b9e6",
4
+ "node": "g3da50042b74f92cdac51303b6f3672b6568b1a02",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-03"
@@ -4329,6 +4329,19 @@ def build_app(
4329
4329
  ``dispatched_at`` is unconditionally stamped at dispatch time by
4330
4330
  every code path, so the bound holds even for a row whose
4331
4331
  ``finished_at`` never got recorded.
4332
+
4333
+ #1277: separately from the age-based cutoff above, a ``failed`` row
4334
+ is also dropped (default view only — ``?include=all`` still returns
4335
+ it) once ``PipelineView.superseded`` says a LATER work assignment
4336
+ for the same ``(repo, issue)`` actually succeeded — a retry/fix/
4337
+ rework attempt shipped the issue, so the earlier failed attempt is
4338
+ pure historical noise, no matter how recent it was. This is
4339
+ deliberately narrower than "the GitHub issue is closed": that would
4340
+ also cover a failure resolved by hand with no coord-dispatched
4341
+ retry, but checking it here would mean a live ``gh`` call on every
4342
+ failed row of every ``/api/pipeline`` request — left as a follow-up
4343
+ rather than risking the hot GET path on GitHub API latency/rate
4344
+ limits (and `compute_pipeline`'s pure-computation contract above).
4332
4345
  """
4333
4346
  from dataclasses import asdict
4334
4347
 
@@ -4377,6 +4390,15 @@ def build_app(
4377
4390
  ts = pv.finished_at if pv.finished_at is not None else a.dispatched_at
4378
4391
  if ts is not None and ts < cutoff:
4379
4392
  continue
4393
+ # #1277: a `failed` row whose issue later shipped via a
4394
+ # different (retry/fix/rework) assignment is pure historical
4395
+ # noise on the default view — suppress it regardless of its own
4396
+ # age (unlike the recency cutoff above, this doesn't depend on
4397
+ # how recently the failure happened, only on whether a later
4398
+ # attempt superseded it). `?include=all` still returns it — this
4399
+ # is a display-layer filter, the DB row is untouched (#1041).
4400
+ if cutoff is not None and pv.superseded:
4401
+ continue
4380
4402
  rev_aid = review_by_work.get(a.assignment_id)
4381
4403
  if rev_aid:
4382
4404
  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
  )
@@ -1108,8 +1108,14 @@ def run_issue_activity(
1108
1108
  # `(generated_at, generated_at)`. `drive_queue` has no `completed_at` and
1109
1109
  # `coord/drive_queue.py` emits no audit events, so there is no data source
1110
1110
  # for a queue *history* report — see this issue's "Out of scope".
1111
+ #
1112
+ # #1909: the rows are ordered by LIFECYCLE BAND, not by raw `position` — see
1113
+ # `_drive_queue_lifecycle_sort_key` below. `band` is a derived display column
1114
+ # (not a `drive_queue` row field) naming which of the three bands a row fell
1115
+ # into, so a client never has to infer it from `state` alone.
1111
1116
 
1112
1117
  DRIVE_QUEUE_STATUS_COLUMNS = [
1118
+ "band",
1113
1119
  "position",
1114
1120
  "repo",
1115
1121
  "issue",
@@ -1128,6 +1134,12 @@ DRIVE_QUEUE_STATUS_COLUMNS = [
1128
1134
 
1129
1135
  # One entry per DRIVE_QUEUE_STATUS_COLUMNS entry, same order (#1760).
1130
1136
  DRIVE_QUEUE_STATUS_COLUMN_META = [
1137
+ # #1909: the band an entry's row was sorted into — "terminal" (done and
1138
+ # the other states in `TERMINAL_QUEUE_STATES`), "running", or "pending"
1139
+ # (everything still waiting to launch). Named distinctly from `state`
1140
+ # because several raw states fold into one band (`done`/`merged-partial`/
1141
+ # `blocked`/`failed` all read `terminal`).
1142
+ ColumnMeta(id="band", label="Band", kind="enum"),
1131
1143
  ColumnMeta(id="position", label="Pos", kind="int", align="right"),
1132
1144
  ColumnMeta(id="repo", label="Repo", kind="text"),
1133
1145
  ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
@@ -1151,6 +1163,70 @@ DRIVE_QUEUE_STATUS_COLUMN_META = [
1151
1163
  # attempt is the thing an operator most wants shouted at them.
1152
1164
  _RETRIED_ATTEMPTS_THRESHOLD = 1
1153
1165
 
1166
+ # #1909: the three lifecycle bands, in display order. "terminal" (done and
1167
+ # the rest of `TERMINAL_QUEUE_STATES`) sorts first, then "running", then
1168
+ # "pending" — literally the order the issue names them in, not "what the
1169
+ # operator probably cares about most" (that question belongs to #1866's
1170
+ # live Queue panel, not this report).
1171
+ _LIFECYCLE_BAND_RANK = {"terminal": 0, "running": 1, "pending": 2}
1172
+
1173
+
1174
+ def _drive_queue_lifecycle_band(
1175
+ state: str, terminal_states: frozenset[str], running_state: str
1176
+ ) -> str:
1177
+ """The #1909 band label for one row's raw ``state``.
1178
+
1179
+ Always one of ``"terminal"``/``"running"``/``"pending"`` — never
1180
+ anything else — so a client can switch on it exhaustively without a
1181
+ fallback case. ``hold_state`` (a fired deploy gate) is deliberately NOT
1182
+ consulted here: it is orthogonal to ``state`` (see `coord/drive_queue.py`
1183
+ around `HOLD_FIRED`) — a held entry's `state` stays `waiting`, so it
1184
+ already lands in `pending` without any extra check, which is exactly
1185
+ the issue's "waiting (and any held)" wording.
1186
+ """
1187
+ if state == running_state:
1188
+ return "running"
1189
+ if state in terminal_states:
1190
+ return "terminal"
1191
+ return "pending"
1192
+
1193
+
1194
+ def _drive_queue_lifecycle_sort_key(row: Mapping[str, Any]) -> tuple[int, float, int]:
1195
+ """#1909's row ordering: ``(band rank, recency/0, position)``.
1196
+
1197
+ * **terminal** — most-recently-finished first. The recency proxy is
1198
+ whichever of ``reason_at`` / ``launched_at`` / ``enqueued_at`` is
1199
+ present, in that priority. ``reason_at`` is stamped by
1200
+ ``_update_drive_queue_entry_local`` on every ``last_reason`` write, and
1201
+ every call site in ``coord/drive_queue.py`` that flips a row terminal
1202
+ writes ``last_reason`` in the SAME update (e.g. every
1203
+ ``_merge_landed_state`` caller) — so ``reason_at`` reads as "when this
1204
+ row last changed", which for a terminal row IS when it finished.
1205
+ Negated so the largest (most recent) timestamp sorts first; a row
1206
+ with none of the three (predates the columns) falls back to ``0.0``,
1207
+ the oldest possible reading, and ties within that are broken by
1208
+ ``position`` descending (the more recently enqueued of two
1209
+ equally-undated rows is still the newer one).
1210
+ * **running** — no ordering requirement from the issue; broken by
1211
+ ``position`` ascending for determinism (typically a single row).
1212
+ * **pending** — ``position`` ascending, exactly the order
1213
+ ``plan_tick``'s launch walk (`_resolve_prereqs` in
1214
+ `coord/drive_queue.py`) will reach them. This is the band the issue
1215
+ calls "the important one".
1216
+ """
1217
+ band = row["band"]
1218
+ position = int(row["position"])
1219
+ if band == "terminal":
1220
+ recency = row.get("reason_at")
1221
+ if recency is None:
1222
+ recency = row.get("launched_at")
1223
+ if recency is None:
1224
+ recency = row.get("enqueued_at")
1225
+ if recency is None:
1226
+ recency = 0.0
1227
+ return (_LIFECYCLE_BAND_RANK[band], -float(recency), -position)
1228
+ return (_LIFECYCLE_BAND_RANK[band], 0.0, position)
1229
+
1154
1230
 
1155
1231
  def fold_drive_queue_status(
1156
1232
  entries: Iterable[Mapping[str, Any]],
@@ -1167,21 +1243,42 @@ def fold_drive_queue_status(
1167
1243
  caller's clock reading, reused verbatim for both ends of ``window`` since
1168
1244
  a live snapshot has no meaningful range.
1169
1245
 
1170
- ``entries`` arrives pre-ordered (``list_drive_queue`` is
1171
- ``ORDER BY position, id``) — this fold does not re-sort.
1246
+ ``entries`` arrives pre-ordered (``list_drive_queue`` is ``ORDER BY
1247
+ position, id``), but **this fold DOES re-sort** (#1909) — deliberately
1248
+ relaxing the "never re-sorts" contract this docstring used to state.
1249
+ Raw `position` order interleaves finished work with what hasn't run
1250
+ yet, which reads as noise (see the issue's own reproduction). Output
1251
+ rows are grouped into three lifecycle bands instead — terminal (done
1252
+ and the rest of `TERMINAL_QUEUE_STATES`, most-recently-finished first),
1253
+ running, then pending (everything else, ascending `position` — the
1254
+ exact order `plan_tick`'s launch walk, `_resolve_prereqs` in
1255
+ `coord/drive_queue.py`, will reach them). See
1256
+ :func:`_drive_queue_lifecycle_sort_key` for the exact key. Each row
1257
+ also carries a derived ``band`` column naming which band it landed in.
1172
1258
  """
1259
+ from coord.drive_queue import ( # noqa: PLC0415
1260
+ STATE_BLOCKED,
1261
+ STATE_DONE,
1262
+ STATE_FAILED,
1263
+ STATE_RUNNING,
1264
+ STATE_WAITING,
1265
+ TERMINAL_QUEUE_STATES,
1266
+ )
1267
+
1173
1268
  title_map = dict(titles or {})
1174
1269
  rows: list[dict[str, Any]] = []
1175
1270
  for entry in entries:
1176
1271
  repo = str(entry.get("repo_name") or "")
1177
1272
  issue = int(entry.get("issue_number") or 0)
1273
+ state = entry.get("state") or ""
1178
1274
  rows.append(
1179
1275
  {
1276
+ "band": _drive_queue_lifecycle_band(state, TERMINAL_QUEUE_STATES, STATE_RUNNING),
1180
1277
  "position": int(entry.get("position") or 0),
1181
1278
  "repo": repo,
1182
1279
  "issue": issue,
1183
1280
  "title": title_map.get((repo, issue)),
1184
- "state": entry.get("state") or "",
1281
+ "state": state,
1185
1282
  "machine": entry.get("machine") or "",
1186
1283
  "attempts": int(entry.get("attempts") or 0),
1187
1284
  "deferrals": int(entry.get("deferrals") or 0),
@@ -1207,19 +1304,16 @@ def fold_drive_queue_status(
1207
1304
  }
1208
1305
  )
1209
1306
 
1307
+ # #1909: lifecycle-band order, not the raw `position`/`id` order
1308
+ # `entries` arrived in — see `_drive_queue_lifecycle_sort_key`. `position`
1309
+ # is unique per entry, so the key never actually ties; `sort`'s stability
1310
+ # only matters if a future band grows a coarser key.
1311
+ rows.sort(key=_drive_queue_lifecycle_sort_key)
1312
+
1210
1313
  notes: list[str] = []
1211
1314
  if not rows:
1212
1315
  notes.append("The drive queue is empty.")
1213
1316
  else:
1214
- from coord.drive_queue import ( # noqa: PLC0415
1215
- STATE_BLOCKED,
1216
- STATE_DONE,
1217
- STATE_FAILED,
1218
- STATE_RUNNING,
1219
- STATE_WAITING,
1220
- TERMINAL_QUEUE_STATES,
1221
- )
1222
-
1223
1317
  counts: dict[str, int] = {}
1224
1318
  for r in rows:
1225
1319
  counts[r["state"]] = counts.get(r["state"], 0) + 1
@@ -4604,11 +4698,12 @@ DRIVE_QUEUE_STATUS = ReportDef(
4604
4698
  id="drive-queue-status",
4605
4699
  title="Drive Queue Status",
4606
4700
  description=(
4607
- "A live snapshot of the drive queue — one row per queued entry in "
4608
- "run order, with its state, machine pin, attempts/deferrals and the "
4609
- "tick's own last_reason. A snapshot, not a history: `drive_queue` "
4610
- "has no `completed_at`, so this shows what is queued now, not what "
4611
- "the queue has processed."
4701
+ "A live snapshot of the drive queue — one row per queued entry, "
4702
+ "grouped by lifecycle band (terminal, then running, then pending in "
4703
+ "the order it will actually run), with its state, machine pin, "
4704
+ "attempts/deferrals and the tick's own last_reason. A snapshot, not "
4705
+ "a history: `drive_queue` has no `completed_at`, so this shows what "
4706
+ "is queued now, not what the queue has processed."
4612
4707
  ),
4613
4708
  params=(
4614
4709
  ReportParam(
@@ -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()
@@ -749,7 +749,7 @@ class TestFoldDriveQueueStatus:
749
749
  result = fold_drive_queue_status([_dq_row(1)], 1000.0)
750
750
  assert [m.id for m in result.column_meta] == result.columns
751
751
  assert result.columns == [
752
- "position", "repo", "issue", "title", "state", "machine",
752
+ "band", "position", "repo", "issue", "title", "state", "machine",
753
753
  "attempts", "deferrals", "last_reason", "reason_at", "enqueued_at",
754
754
  "launched_at", "hold_state", "after",
755
755
  ]
@@ -816,12 +816,110 @@ class TestFoldDriveQueueStatus:
816
816
  assert "0 entries queued" in headline
817
817
  assert "3 done" in headline
818
818
 
819
- def test_run_order_preserved_from_input_not_resorted(self) -> None:
820
- # list_drive_queue already returns ORDER BY position, id — the fold
821
- # must not reorder it.
819
+ def test_same_band_rows_sorted_by_position_ascending(self) -> None:
820
+ # #1909: all three rows are `waiting` (same band, "pending"), so the
821
+ # fold's re-sort collapses to position order regardless of the
822
+ # input's own order — unlike the pre-#1909 "never re-sorts" fold,
823
+ # which would have preserved the input's [3, 1, 2].
822
824
  rows = [_dq_row(3, position=2), _dq_row(1, position=0), _dq_row(2, position=1)]
823
825
  result = fold_drive_queue_status(rows, 1000.0)
824
- assert [r["issue"] for r in result.rows] == [3, 1, 2]
826
+ assert [r["issue"] for r in result.rows] == [1, 2, 3]
827
+
828
+ def test_lifecycle_bands_ordered_terminal_then_running_then_pending(self) -> None:
829
+ # #1909's own regression shape: a running item, pending entries
830
+ # interleaved with done ones at arbitrary positions, and a blocked
831
+ # (terminal) row thrown in — the fold must emit terminal rows first,
832
+ # then running, then pending in ascending position, regardless of
833
+ # the raw position/arrival order.
834
+ rows = [
835
+ _dq_row(1891, position=0, state_="running"),
836
+ _dq_row(1904, position=1, state_="waiting"),
837
+ _dq_row(9001, position=2, state_="done", reason_at=500.0),
838
+ _dq_row(1895, position=28, state_="waiting"),
839
+ _dq_row(1156, position=29, state_="waiting"),
840
+ _dq_row(1547, position=30, state_="blocked", reason_at=600.0),
841
+ _dq_row(1889, position=31, state_="done", reason_at=700.0),
842
+ ]
843
+ result = fold_drive_queue_status(rows, 1000.0)
844
+ bands = [r["band"] for r in result.rows]
845
+ issues = [r["issue"] for r in result.rows]
846
+ # Terminal rows (done, blocked) come first — most-recently-finished
847
+ # (highest reason_at) first — then the single running row, then the
848
+ # pending rows in ascending position.
849
+ assert issues == [1889, 1547, 9001, 1891, 1904, 1895, 1156]
850
+ assert bands == [
851
+ "terminal", "terminal", "terminal",
852
+ "running",
853
+ "pending", "pending", "pending",
854
+ ]
855
+
856
+ def test_terminal_band_most_recently_finished_first(self) -> None:
857
+ rows = [
858
+ _dq_row(1, state_="done", reason_at=100.0),
859
+ _dq_row(2, state_="done", reason_at=300.0),
860
+ _dq_row(3, state_="done", reason_at=200.0),
861
+ ]
862
+ result = fold_drive_queue_status(rows, 1000.0)
863
+ assert [r["issue"] for r in result.rows] == [2, 3, 1]
864
+
865
+ def test_terminal_band_falls_back_to_launched_at_when_no_reason_at(self) -> None:
866
+ rows = [
867
+ _dq_row(1, state_="done", launched_at=50.0),
868
+ _dq_row(2, state_="done", launched_at=90.0),
869
+ ]
870
+ result = fold_drive_queue_status(rows, 1000.0)
871
+ assert [r["issue"] for r in result.rows] == [2, 1]
872
+
873
+ def test_terminal_band_falls_back_to_enqueued_at_when_no_reason_at_or_launched_at(
874
+ self,
875
+ ) -> None:
876
+ rows = [
877
+ _dq_row(1, state_="done", launched_at=None, enqueued_at=10.0),
878
+ _dq_row(2, state_="done", launched_at=None, enqueued_at=20.0),
879
+ ]
880
+ result = fold_drive_queue_status(rows, 1000.0)
881
+ assert [r["issue"] for r in result.rows] == [2, 1]
882
+
883
+ def test_pending_band_order_matches_the_launch_walk(self) -> None:
884
+ # The issue's own framing: pending must be in ascending `position`
885
+ # — the order `plan_tick`'s launch walk reaches them — regardless
886
+ # of state (`waiting` vs `parked`) or input arrival order.
887
+ rows = [
888
+ _dq_row(30, position=3, state_="waiting"),
889
+ _dq_row(10, position=1, state_="parked"),
890
+ _dq_row(20, position=2, state_="waiting"),
891
+ ]
892
+ result = fold_drive_queue_status(rows, 1000.0)
893
+ assert [r["issue"] for r in result.rows] == [10, 20, 30]
894
+
895
+ def test_held_entry_still_bands_pending_not_a_fourth_band(self) -> None:
896
+ # `hold_state` is orthogonal to `state` — a fired deploy gate leaves
897
+ # `state` at `waiting`, so it already lands in `pending` with no
898
+ # extra handling (the issue's "waiting (and any held)" wording).
899
+ result = fold_drive_queue_status(
900
+ [_dq_row(1, state_="waiting", hold_state="fired")], 1000.0
901
+ )
902
+ assert result.rows[0]["band"] == "pending"
903
+
904
+ def test_band_column_present_for_every_row(self) -> None:
905
+ rows = [
906
+ _dq_row(1, state_="running"),
907
+ _dq_row(2, state_="waiting"),
908
+ _dq_row(3, state_="done"),
909
+ _dq_row(4, state_="blocked"),
910
+ _dq_row(5, state_="failed"),
911
+ _dq_row(6, state_="merged-partial"),
912
+ _dq_row(7, state_="parked"),
913
+ ]
914
+ result = fold_drive_queue_status(rows, 1000.0)
915
+ by_issue = {r["issue"]: r["band"] for r in result.rows}
916
+ assert by_issue[1] == "running"
917
+ assert by_issue[2] == "pending"
918
+ assert by_issue[3] == "terminal"
919
+ assert by_issue[4] == "terminal"
920
+ assert by_issue[5] == "terminal"
921
+ assert by_issue[6] == "terminal"
922
+ assert by_issue[7] == "pending"
825
923
 
826
924
  def test_attempts_ge_1_named_in_notes(self) -> None:
827
925
  rows = [