code-coordinator 0.5.526__tar.gz → 0.5.528__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 (911) hide show
  1. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.528/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/board_schema.py +7 -0
  5. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/drive_queue.py +24 -10
  6. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/db.py +33 -1
  7. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/drive_queue.py +146 -24
  8. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/state.py +57 -4
  9. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_drive_queue.py +64 -0
  10. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_db.py +1 -1
  11. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue.py +202 -5
  12. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_state.py +61 -0
  13. code_coordinator-0.5.526/code_coordinator.egg-info/scm_version.json +0 -8
  14. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/.gitignore +0 -0
  27. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/GOAL.md +0 -0
  29. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/LICENSE +0 -0
  30. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/README.md +0 -0
  32. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/approved_work.py +0 -0
  49. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/backup.py +0 -0
  52. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/client.py +0 -0
  67. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/config.py +0 -0
  106. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deprecation_telemetry.py +0 -0
  144. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/diagnose.py +0 -0
  146. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dispatch.py +0 -0
  147. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dispatch_liveness.py +0 -0
  148. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dist_name.py +0 -0
  149. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dr_promote.py +0 -0
  150. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/dr_verify.py +0 -0
  151. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/drive.py +0 -0
  152. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/events.py +0 -0
  155. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/__init__.py +0 -0
  171. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/aggregate.py +0 -0
  172. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/__init__.py +0 -0
  173. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/_ci_pin.py +0 -0
  174. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/agent_install.py +0 -0
  175. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/cargo_targets.py +0 -0
  176. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/claude_binary.py +0 -0
  177. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/config_drift.py +0 -0
  178. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  179. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/coord_web_ci_pin.py +0 -0
  180. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/deploy_lane_facts.py +0 -0
  181. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/disk.py +0 -0
  182. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/fleet_board.py +0 -0
  183. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  184. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/fleet_phantom.py +0 -0
  185. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/fleet_unit_drift.py +0 -0
  186. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/graph.py +0 -0
  187. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/graphify_cli.py +0 -0
  188. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/index_lock.py +0 -0
  189. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/issues_sync_staleness.py +0 -0
  190. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/local_machine_identity.py +0 -0
  191. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/merge_queue.py +0 -0
  224. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/milestone_chat.py +0 -0
  225. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/milestone_dispatch.py +0 -0
  226. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/milestone_order.py +0 -0
  228. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/mock_author.py +0 -0
  229. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/models.py +0 -0
  230. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/network.py +0 -0
  231. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/new_issue_chat.py +0 -0
  232. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/__init__.py +0 -0
  233. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/baseline.py +0 -0
  234. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/cli.py +0 -0
  235. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/collect.py +0 -0
  236. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/digest.py +0 -0
  237. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/models.py +0 -0
  238. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/predicate.py +0 -0
  239. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/service.py +0 -0
  240. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/store.py +0 -0
  241. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notifier/transport.py +0 -0
  242. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/notify.py +0 -0
  243. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/openapi.py +0 -0
  244. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/overlap_fence.py +0 -0
  245. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/overlap_predict.py +0 -0
  246. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/parentage.py +0 -0
  247. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/parentage_github.py +0 -0
  248. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/pipeline.py +0 -0
  249. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/plan_parser.py +0 -0
  250. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/plans.py +0 -0
  251. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/platform_paths.py +0 -0
  252. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/portal_bridge.py +0 -0
  253. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/portal_store.py +0 -0
  254. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/portal_sync.py +0 -0
  255. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/pr_body_lint.py +0 -0
  256. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/prereqs.py +0 -0
  257. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/progress.py +0 -0
  258. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/providers/__init__.py +0 -0
  259. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/providers/base.py +0 -0
  260. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/providers/claude.py +0 -0
  261. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/providers/claude_pty.py +0 -0
  262. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/providers/opencode.py +0 -0
  263. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/queue_diagnose.py +0 -0
  264. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/reconcile.py +0 -0
  265. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/reconcile_tick.py +0 -0
  266. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/refine_chat.py +0 -0
  267. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/release_cordon.py +0 -0
  268. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/release_propagate.py +0 -0
  269. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/release_verify.py +0 -0
  270. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/release_window.py +0 -0
  271. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/repo_dormancy.py +0 -0
  272. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/repo_edit.py +0 -0
  273. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/repo_onboard.py +0 -0
  274. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/reports.py +0 -0
  275. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/rest_schema.py +0 -0
  276. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/restart_cmd.py +0 -0
  277. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/revalidate.py +0 -0
  278. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/review.py +0 -0
  279. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/serve_app.py +0 -0
  282. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  283. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  284. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  285. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/portal-followup/SKILL.md +0 -0
  288. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/release-now/SKILL.md +0 -0
  289. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  290. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  291. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/skills/update-issue/SKILL.md +0 -0
  292. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/smoke.py +0 -0
  293. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/spend_ceiling.py +0 -0
  294. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/split_work.py +0 -0
  295. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/sql.py +0 -0
  296. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/stage_projection.py +0 -0
  297. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/store_migrate.py +0 -0
  298. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/store_parity.py +0 -0
  299. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/templates/deploy-cloudflare.node.yml +0 -0
  300. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/test_author.py +0 -0
  301. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/test_chat.py +0 -0
  302. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/test_orchestrator.py +0 -0
  303. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/test_report.py +0 -0
  304. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/tui_release.py +0 -0
  305. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/uat_checks.py +0 -0
  306. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/usage.py +0 -0
  307. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/usage_limits.py +0 -0
  308. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/usage_rollup.py +0 -0
  309. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coord/worker_events.py +0 -0
  310. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/coordinator.example.yml +0 -0
  311. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-agent.service +0 -0
  312. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-backup.service +0 -0
  313. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-backup.timer +0 -0
  314. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-db-backup.service +0 -0
  315. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-db-backup.sh +0 -0
  316. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-db-backup.timer +0 -0
  317. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-dr-verify.service +0 -0
  318. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-dr-verify.timer +0 -0
  319. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-drive-queue.service +0 -0
  320. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-drive-queue.timer +0 -0
  321. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-failure-notify.service +0 -0
  322. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-failure-notify.sh +0 -0
  323. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-fleet-watchdog.service +0 -0
  324. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-fleet-watchdog.timer +0 -0
  325. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-notify.service +0 -0
  326. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-notify.timer +0 -0
  327. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-release-propagate.service +0 -0
  328. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-release-propagate.timer +0 -0
  329. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-release-window.service +0 -0
  330. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-release-window.timer +0 -0
  331. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-serve.service +0 -0
  332. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-web-dist-build.service +0 -0
  333. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-web-dist-build.sh +0 -0
  334. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-web-dist-build.timer +0 -0
  335. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-web-rollback.sh +0 -0
  336. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/coord-web.service +0 -0
  337. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/deploy/node-shim.sh +0 -0
  338. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ADR_COORD_TUI_CI.md +0 -0
  339. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  340. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ADR_COORD_WEB_CI.md +0 -0
  341. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ADR_COORD_WEB_DIST.md +0 -0
  342. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  343. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/AGENT_OPERATIONS.md +0 -0
  344. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ARCHITECTURE.md +0 -0
  345. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ARCH_SECURITY_GATES.md +0 -0
  346. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/COCKPIT.md +0 -0
  347. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/CONTROL_CENTER.md +0 -0
  348. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/COST_DISCIPLINE.md +0 -0
  349. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/CROSS_PLATFORM.md +0 -0
  350. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/CUSTOMER_FACING_APPS.md +0 -0
  351. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/CUSTOMER_PORTAL.md +0 -0
  352. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/DATA_STORE_SELECTION.md +0 -0
  353. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/DISASTER_RECOVERY.md +0 -0
  354. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/DRIVE_QUEUE.md +0 -0
  355. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/EPHEMERAL_WORKERS.md +0 -0
  356. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/FORGE_MIGRATION.md +0 -0
  357. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/GRAPHIFY_SETUP.md +0 -0
  358. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ISSUE_GUIDANCE.md +0 -0
  359. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/MAC_MINI.md +0 -0
  360. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  361. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/NOTIFIER.md +0 -0
  362. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/OPENCODE_VERIFICATION.md +0 -0
  363. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/OPERATING_GOTCHAS.md +0 -0
  364. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/OPERATOR_GUIDES.md +0 -0
  365. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/ORACLE_LOOP.md +0 -0
  366. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/PHONE_WEBAPP.md +0 -0
  367. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/PIPELINE_V2.md +0 -0
  368. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/PLATFORM_EVOLUTION.md +0 -0
  369. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/SECOND_BACKEND.md +0 -0
  370. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/STORE_SERVICE.md +0 -0
  371. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  372. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/WEB_CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/WSL_WINDOWS_WORKER.md +0 -0
  374. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/mocks/web/README.md +0 -0
  375. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/mocks/web/_tokens.css +0 -0
  376. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/mocks/web/issue-detail.html +0 -0
  377. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/mocks/web/pipeline-narrow.html +0 -0
  378. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/docs/mocks/web/pipeline-wide.html +0 -0
  379. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/graphify-out/.gitignore +0 -0
  380. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/install-agent.sh +0 -0
  381. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/pyproject.toml +0 -0
  382. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/audit_review_verdict_overrides.py +0 -0
  383. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  384. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/build-worker-image.sh +0 -0
  385. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/coordinator-machine.py +0 -0
  386. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/dr-down.sh +0 -0
  387. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/dr-up.sh +0 -0
  388. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/epic-down.sh +0 -0
  389. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/epic-up.sh +0 -0
  390. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/preflight.sh +0 -0
  391. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/provision-server.sh +0 -0
  392. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/provision-worker.sh +0 -0
  393. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  394. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  395. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/throwaway-vm.sh +0 -0
  396. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/azure-workers/verify-github-token.sh +0 -0
  397. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/check_gh_argv_containment.py +0 -0
  398. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/codegen.py +0 -0
  399. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-test-runner.sh +0 -0
  400. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  401. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  402. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  403. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  404. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/coord-venv-rollback.sh +0 -0
  405. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/drive-batch.sh +0 -0
  406. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/extract-coord-tui.sh +0 -0
  407. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/fleet_watchdog.py +0 -0
  408. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/gen_board_fixture.py +0 -0
  409. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/gen_mock_index.py +0 -0
  410. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/lib/provision-core.sh +0 -0
  411. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/next_release_tag.py +0 -0
  412. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/provision-machine.sh +0 -0
  413. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/run_tests_in_populated_home.sh +0 -0
  414. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/run_tests_without_gh.sh +0 -0
  415. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/setup-macmini.sh +0 -0
  416. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/smoke_437_interactive.py +0 -0
  417. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/verify-provision-noble.sh +0 -0
  418. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/setup.cfg +0 -0
  422. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-37/conftest.py +0 -0
  425. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-37/contract.md +0 -0
  426. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-37/manifest.yml +0 -0
  427. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  428. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  429. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/contract.md +0 -0
  430. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  431. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  432. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/manifest.yml +0 -0
  433. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-51/tsconfig.json +0 -0
  435. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  436. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/backends.py +0 -0
  437. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/conftest.py +0 -0
  438. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/board-pipeline-basic.json +0 -0
  439. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  440. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  441. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  442. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  443. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/all_pass.json +0 -0
  444. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  445. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/mixed_fail.json +0 -0
  446. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  447. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  448. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/skip.json +0 -0
  449. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/playwright/truncated.json +0 -0
  450. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  451. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  452. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  454. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  455. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  456. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  457. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  458. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_acceptance.py +0 -0
  459. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_acceptance_drivers.py +0 -0
  460. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent.py +0 -0
  461. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_api_error.py +0 -0
  462. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_app.py +0 -0
  463. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_branch_base.py +0 -0
  464. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_branch_capture.py +0 -0
  465. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_config_free_1712.py +0 -0
  466. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_deploy_units_endpoint.py +0 -0
  467. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_dirty_worktree.py +0 -0
  468. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  469. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_graph_self_heal.py +0 -0
  470. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_health_h3.py +0 -0
  471. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_idle_restart.py +0 -0
  472. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_push_failure.py +0 -0
  473. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_reap.py +0 -0
  474. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_repos_and_pull.py +0 -0
  475. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_restart_services_endpoint.py +0 -0
  476. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_skills_self_heal.py +0 -0
  477. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_startup_diagnostics.py +0 -0
  478. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_update.py +0 -0
  479. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_update_bluegreen.py +0 -0
  480. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_usage_limit.py +0 -0
  481. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_agent_zero_commit.py +0 -0
  482. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ambient_home_isolation.py +0 -0
  483. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approve_capability_reroute_3241.py +0 -0
  484. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approve_dependency_busy_2804.py +0 -0
  485. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approve_reject_plan.py +0 -0
  486. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approve_usage_gate.py +0 -0
  487. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approved_work_2532.py +0 -0
  488. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_approved_work_2996.py +0 -0
  489. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_assignment_already_recorded_daemon.py +0 -0
  490. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_audit_log.py +0 -0
  491. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_audit_outcome.py +0 -0
  492. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_audit_query.py +0 -0
  493. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_auto_loop.py +0 -0
  494. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_auto_release_publish_2035.py +0 -0
  495. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_backend_selection.py +0 -0
  496. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_backup.py +0 -0
  497. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_base_checkout_restore.py +0 -0
  498. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_block_log.py +0 -0
  499. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_cap_762.py +0 -0
  500. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_fixture.py +0 -0
  501. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_read_path.py +0 -0
  502. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_schema.py +0 -0
  503. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_service.py +0 -0
  504. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_state.py +0 -0
  505. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_board_wire.py +0 -0
  506. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_brain.py +0 -0
  507. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_branch_model.py +0 -0
  508. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_bug_intake.py +0 -0
  509. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_build_worker_image_env_update.py +0 -0
  510. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cargo_cache.py +0 -0
  511. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_check_gh_argv_containment.py +0 -0
  512. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_acceptance_gate_1950.py +0 -0
  513. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_fix.py +0 -0
  514. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_github.py +0 -0
  515. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_gitlab.py +0 -0
  516. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_parity_2091.py +0 -0
  517. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_ci_store.py +0 -0
  518. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_claim.py +0 -0
  519. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_claude_md_budget.py +0 -0
  520. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_claude_setup_token.py +0 -0
  521. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_acceptance.py +0 -0
  522. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_assign.py +0 -0
  523. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  524. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_assign_interactive_remote.py +0 -0
  525. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_assign_provider.py +0 -0
  526. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  527. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_audit.py +0 -0
  528. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_chat_continue.py +0 -0
  529. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_ci.py +0 -0
  530. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_codegen.py +0 -0
  531. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_decide.py +0 -0
  532. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_capability_rules.py +0 -0
  533. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_config_provenance.py +0 -0
  534. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_forge_availability.py +0 -0
  535. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_self.py +0 -0
  537. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_diagnose_test_coverage.py +0 -0
  538. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_doctor.py +0 -0
  539. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_doctor_config_free_1801.py +0 -0
  540. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  541. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  542. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_drive.py +0 -0
  543. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_issue_comment.py +0 -0
  549. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_issue_create_label.py +0 -0
  550. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_issue_reopen.py +0 -0
  551. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_issue_view_list.py +0 -0
  552. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_issues.py +0 -0
  553. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_merge.py +0 -0
  554. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_assign.py +0 -0
  555. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_capture.py +0 -0
  556. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_chat_add_child.py +0 -0
  557. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_dispatch.py +0 -0
  558. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_gate_b.py +0 -0
  559. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_gate_c.py +0 -0
  560. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_order.py +0 -0
  561. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  562. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_milestone_ship.py +0 -0
  563. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_network.py +0 -0
  564. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_new_issue_chat.py +0 -0
  565. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_plans.py +0 -0
  566. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_portal.py +0 -0
  567. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_pr.py +0 -0
  568. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_pull_artifact.py +0 -0
  569. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_queue.py +0 -0
  570. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_reattach_sessions.py +0 -0
  571. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_refine_board.py +0 -0
  572. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_release_preflight.py +0 -0
  573. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_release_propagate.py +0 -0
  574. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_release_window.py +0 -0
  575. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_repo_2220.py +0 -0
  576. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  577. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_scorecard.py +0 -0
  578. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_serve_store_backend_3084.py +0 -0
  579. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_set_review_findings.py +0 -0
  580. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_advisory_terminal.py +0 -0
  581. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_contested_tag.py +0 -0
  582. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_invariant_alarms.py +0 -0
  583. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_machine_fault.py +0 -0
  584. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_retried_3340.py +0 -0
  587. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_supervisor_3366.py +0 -0
  589. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_client.py +0 -0
  597. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_client_base_install.py +0 -0
  598. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_client_config_cache_atomic_3052.py +0 -0
  599. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_client_resource_migration_1946.py +0 -0
  600. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_commands_common.py +0 -0
  601. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_comments.py +0 -0
  602. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_completion_summary.py +0 -0
  603. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config.py +0 -0
  604. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_acceptance.py +0 -0
  605. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_audit.py +0 -0
  606. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_drift_check.py +0 -0
  607. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_effective.py +0 -0
  608. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_pricing.py +0 -0
  609. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  610. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_config_usage_gate.py +0 -0
  611. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_confirm_test.py +0 -0
  612. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_conflict_fix.py +0 -0
  613. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_conflict_fix_semantic.py +0 -0
  614. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  615. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  617. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test_runner_baseline.py +0 -0
  618. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test_runner_populated_home.py +0 -0
  619. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test_runner_routing.py +0 -0
  620. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_test_runner_toolchain.py +0 -0
  621. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_uat.py +0 -0
  622. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coord_web_sse_restart_live.py +0 -0
  623. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_coordinator_machine.py +0 -0
  624. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_cross_platform_imports.py +0 -0
  625. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dao.py +0 -0
  626. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard.py +0 -0
  627. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard_api.py +0 -0
  628. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard_fixture.py +0 -0
  629. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard_server.py +0 -0
  630. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard_terminal.py +0 -0
  631. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dashboard_terminal_live.py +0 -0
  632. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dead_end.py +0 -0
  633. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_decomposition_chat.py +0 -0
  634. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_coord_db_backup.py +0 -0
  635. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_coord_web_dist.py +0 -0
  636. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_coord_web_rollback.py +0 -0
  637. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_db_backup_unit.py +0 -0
  638. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_drive_queue_unit.py +0 -0
  639. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_failure_notify_unit.py +0 -0
  640. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_manifest.py +0 -0
  641. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_notify_unit.py +0 -0
  642. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_units_lane.py +0 -0
  643. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deploy_web_unit.py +0 -0
  644. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deprecation_telemetry.py +0 -0
  645. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_deps.py +0 -0
  646. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_diagnose.py +0 -0
  647. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dispatch.py +0 -0
  648. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dispatch_liveness.py +0 -0
  649. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dispatch_target_validation.py +0 -0
  650. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dispatch_workers.py +0 -0
  651. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dist_name.py +0 -0
  652. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_done_housekeeping.py +0 -0
  653. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dr_azure_scripts.py +0 -0
  654. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dr_promote.py +0 -0
  655. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_dr_verify.py +0 -0
  656. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive.py +0 -0
  657. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_machine_fault.py +0 -0
  658. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_blocked_rendering.py +0 -0
  659. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_launch_argv.py +0 -0
  660. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_max_parallel_config.py +0 -0
  661. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  662. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_roll_pending.py +0 -0
  663. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  664. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_sessions_snapshot.py +0 -0
  665. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_state.py +0 -0
  666. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_drive_tmux.py +0 -0
  667. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_epic_up_capability_detection.py +0 -0
  668. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  669. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_epic_up_image_provenance.py +0 -0
  670. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_errors.py +0 -0
  671. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_events.py +0 -0
  672. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_failure_class.py +0 -0
  673. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_failure_classifier.py +0 -0
  674. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_filelock.py +0 -0
  675. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  676. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fix_escalation_classifier.py +0 -0
  677. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fix_of_force_override.py +0 -0
  678. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fleet_config_health.py +0 -0
  679. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fleet_health_probes.py +0 -0
  680. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fleet_health_snapshot.py +0 -0
  681. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_fleet_watchdog.py +0 -0
  682. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_forge_availability.py +0 -0
  683. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_freshness.py +0 -0
  684. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gate_a.py +0 -0
  685. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gate_b.py +0 -0
  686. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gate_snapshot_staleness.py +0 -0
  687. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gates.py +0 -0
  688. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  689. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_gen_mock_index.py +0 -0
  690. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_generated_rust_fixture.py +0 -0
  691. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_generated_rust_requests.py +0 -0
  692. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_generated_types_fixture.py +0 -0
  693. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_github_ops.py +0 -0
  694. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_github_throttle.py +0 -0
  695. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_goal.py +0 -0
  696. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_graph_health.py +0 -0
  697. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_graph_selfheal_absent_2237.py +0 -0
  698. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_handoff.py +0 -0
  699. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_checks.py +0 -0
  700. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_cli.py +0 -0
  701. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_cli_graph.py +0 -0
  702. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_config.py +0 -0
  703. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_context.py +0 -0
  704. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_coord_tui_ci_pin.py +0 -0
  705. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_coord_web_ci_pin.py +0 -0
  706. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_deploy_lane_facts.py +0 -0
  707. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_fix.py +0 -0
  708. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_incident_regression.py +0 -0
  709. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_issues_sync_staleness.py +0 -0
  710. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_pr_churn.py +0 -0
  711. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_pypi.py +0 -0
  712. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_registry.py +0 -0
  713. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_release_cordon_probe.py +0 -0
  714. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_timer_active.py +0 -0
  715. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_toolchain.py +0 -0
  716. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_unit_drift.py +0 -0
  717. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_unit_enablement.py +0 -0
  718. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_health_wedged_drive_queue.py +0 -0
  719. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_hooks.py +0 -0
  720. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_housekeeping.py +0 -0
  721. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_human_attended_437.py +0 -0
  722. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_init.py +0 -0
  723. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_install_agent_venv_2911.py +0 -0
  724. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_integration.py +0 -0
  725. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive.py +0 -0
  726. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_briefing_echo.py +0 -0
  727. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_pane_log_2541.py +0 -0
  728. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_prefill_state.py +0 -0
  729. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_session_relaunch.py +0 -0
  730. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_test_verdict_backstop.py +0 -0
  731. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_token_attribution.py +0 -0
  732. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_interactive_worktree.py +0 -0
  733. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_invariant_alarms.py +0 -0
  734. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_issue_store_seam.py +0 -0
  735. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_issues_sync_status.py +0 -0
  736. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_liveness_auditor.py +0 -0
  737. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_liveness_notify.py +0 -0
  738. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_lock_contention_ratchet.py +0 -0
  739. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_machine_fault.py +0 -0
  740. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_machine_metrics.py +0 -0
  741. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_machine_onboard.py +0 -0
  742. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_machine_pause.py +0 -0
  743. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_machine_stats.py +0 -0
  744. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_merge_queue.py +0 -0
  745. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_merge_verify.py +0 -0
  746. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_milestone_chat.py +0 -0
  747. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_milestone_dispatch.py +0 -0
  748. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_milestone_gate.py +0 -0
  749. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_milestone_order.py +0 -0
  750. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_milestone_seam.py +0 -0
  751. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_mock_author.py +0 -0
  752. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_model_tiering.py +0 -0
  753. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_models.py +0 -0
  754. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_models_config_labels.py +0 -0
  755. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_needs_attention.py +0 -0
  756. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_network.py +0 -0
  757. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_new_issue_chat.py +0 -0
  758. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_next_release_tag.py +0 -0
  759. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_node_shim.py +0 -0
  760. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_baseline.py +0 -0
  761. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_cli.py +0 -0
  762. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_collect.py +0 -0
  763. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_config.py +0 -0
  764. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_drive_seam.py +0 -0
  765. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_isolation.py +0 -0
  766. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_predicate.py +0 -0
  767. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notifier_service.py +0 -0
  769. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notify.py +0 -0
  770. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_notify_drain.py +0 -0
  771. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_openapi.py +0 -0
  772. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_operational_defaults.py +0 -0
  773. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_overlap_fence.py +0 -0
  774. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_overlap_predict.py +0 -0
  775. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_packaged_deploy_units.py +0 -0
  776. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_parentage.py +0 -0
  777. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_paste_landed.py +0 -0
  778. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  779. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_pipeline.py +0 -0
  780. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_plan_followup_approve_plan_command.py +0 -0
  781. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_plan_followup_pr_command.py +0 -0
  782. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_plan_followup_review_command.py +0 -0
  783. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_plan_only.py +0 -0
  784. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_plan_parser.py +0 -0
  785. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_platform_paths.py +0 -0
  786. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_portal_bridge.py +0 -0
  787. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_portal_config.py +0 -0
  788. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_portal_store.py +0 -0
  789. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_portal_sync.py +0 -0
  790. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_pr_body_lint.py +0 -0
  791. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_prereqs.py +0 -0
  792. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_production_db_guard.py +0 -0
  793. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_progress.py +0 -0
  794. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_provider_seam.py +0 -0
  795. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_providers.py +0 -0
  796. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_providers_config_labels.py +0 -0
  797. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_providers_pty.py +0 -0
  798. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_provision_core.py +0 -0
  799. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_provision_machine.py +0 -0
  800. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_py_rust_mirror_inventory.py +0 -0
  801. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_quiet_hours.py +0 -0
  802. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_quiet_hours_store_2146.py +0 -0
  803. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reap_merged_sessions.py +0 -0
  804. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reap_stale_interactive_tick.py +0 -0
  805. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile.py +0 -0
  806. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_branch.py +0 -0
  807. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_completions.py +0 -0
  808. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  809. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_merges.py +0 -0
  810. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_no_agent_record.py +0 -0
  811. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_tick.py +0 -0
  812. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reconcile_usage_limit_done.py +0 -0
  813. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_refine_chat.py +0 -0
  814. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_cordon_2101.py +0 -0
  815. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  816. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_cordon_deadlock_2240.py +0 -0
  817. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  818. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_cordon_stuck_2490.py +0 -0
  819. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_propagate.py +0 -0
  820. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_propagate_threshold.py +0 -0
  821. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_roll_between_legs_2854.py +0 -0
  822. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_roll_window_handoff.py +0 -0
  823. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_unified_1242.py +0 -0
  824. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_verify.py +0 -0
  825. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_release_window.py +0 -0
  826. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_remote_auto_prune.py +0 -0
  827. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_remote_interactive_reaper.py +0 -0
  828. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_add.py +0 -0
  829. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_dormancy.py +0 -0
  830. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_edit_2220.py +0 -0
  831. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_graph_fleet_2237.py +0 -0
  832. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_max_parallel_3423.py +0 -0
  833. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_repo_onboard_2220.py +0 -0
  834. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_report_result_push.py +0 -0
  835. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_reports.py +0 -0
  836. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_restart_cmd.py +0 -0
  837. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_retry.py +0 -0
  838. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_retry_advisory_1606.py +0 -0
  839. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_retry_escalation_classify_3360.py +0 -0
  840. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_retry_type_1636.py +0 -0
  841. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_revalidate.py +0 -0
  842. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review.py +0 -0
  843. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_end_review_without_verdict.py +0 -0
  844. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_parse_failure_diagnostic.py +0 -0
  845. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_reaffirm.py +0 -0
  846. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_state.py +0 -0
  847. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_verdict_backstop.py +0 -0
  848. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_verdict_override_audit.py +0 -0
  849. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_verdict_relay.py +0 -0
  850. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_review_zero_commits.py +0 -0
  851. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_scoped_review_wiring.py +0 -0
  852. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_scorecard.py +0 -0
  853. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_self_health.py +0 -0
  854. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_serve.py +0 -0
  855. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_serve_app.py +0 -0
  856. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_serve_app_board_trim.py +0 -0
  857. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_serve_rest_routes.py +0 -0
  858. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_session.py +0 -0
  859. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_slice_issue_attribution.py +0 -0
  860. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_smoke.py +0 -0
  861. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  862. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_smoke_live_checkout_restore.py +0 -0
  863. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_smoke_workflow.py +0 -0
  864. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_spend_ceiling.py +0 -0
  865. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_spend_ceiling_coordinator.py +0 -0
  866. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_split.py +0 -0
  867. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_split_work.py +0 -0
  868. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_sql_dialect.py +0 -0
  869. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_sqlite_connect_ratchet.py +0 -0
  870. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stage_projection.py +0 -0
  871. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stale_busy_reviewer_697.py +0 -0
  872. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stalled_pipeline.py +0 -0
  873. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_state_review_findings_daemon.py +0 -0
  874. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_status_fleet_footer.py +0 -0
  875. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stop_1567.py +0 -0
  876. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_store_contract.py +0 -0
  877. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_store_migrate.py +0 -0
  878. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stuck.py +0 -0
  879. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  880. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_terminal_command.py +0 -0
  881. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_author.py +0 -0
  882. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_chat.py +0 -0
  883. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_orchestrator.py +0 -0
  884. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_report.py +0 -0
  885. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_verdict_parsing.py +0 -0
  886. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_test_verdict_transcript_floor.py +0 -0
  887. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_text_io_encoding_audit.py +0 -0
  888. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_thin_client_board_audit.py +0 -0
  889. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_thin_client_config_load_1080.py +0 -0
  890. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_thin_client_daemon_routing_906.py +0 -0
  891. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_throwaway_vm.py +0 -0
  892. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_tmux_host.py +0 -0
  893. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_tmux_session.py +0 -0
  894. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_transcript_floor.py +0 -0
  895. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_uat_checks.py +0 -0
  896. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_usage.py +0 -0
  897. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.526 → code_coordinator-0.5.528}/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.526
3
+ Version: 0.5.528
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.526
3
+ Version: 0.5.528
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.528",
3
+ "distance": 0,
4
+ "node": "g5d8c44f81e315b4c270cd5e0de714532c0ec9395",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-28"
8
+ }
@@ -313,6 +313,13 @@ class BoardDriveQueueEntry:
313
313
  apply_verdict: str
314
314
  apply_verdict_reason: str
315
315
  apply_verdict_at: float | None = None
316
+ # #3463: the all-time WORK_LIKE leg count this row saw when
317
+ # `enqueue_drive_queue` last (re-)declared it — see
318
+ # `coord.drive_queue.QueueEntry.legs_at_enqueue` for what it feeds.
319
+ # Default 0 — both for a row predating this column and for a thin client
320
+ # talking to a daemon that predates it — reproduces the pre-#3463
321
+ # `work_leg_count - 1` fix-round formula exactly.
322
+ legs_at_enqueue: int = 0
316
323
 
317
324
 
318
325
  # ── #3428 (#3408 item 3): concurrency ceilings + provenance + occupancy ──────
@@ -106,7 +106,6 @@ from coord.drive_queue import (
106
106
  resolve_max_parallel,
107
107
  resolve_max_parallel_per_repo,
108
108
  resolve_repo_ceilings,
109
- total_fix_round_budget,
110
109
  unreachable_wait_alert,
111
110
  validate_apply_gate,
112
111
  validate_enqueue,
@@ -1637,20 +1636,35 @@ def drive_queue_list(repo: str | None, output_json: bool, config_path: Path) ->
1637
1636
  bits.append(f"attempts={entry.attempts}")
1638
1637
  if entry.deferrals:
1639
1638
  bits.append(f"deferrals={entry.deferrals}")
1640
- # #2972: the fix-round ceiling's OWN count — total work legs (work +
1641
- # every fix round) this entry has run across every relaunch, against
1642
- # the budget `_reconcile_running` actually enforces. Only shown once
1643
- # at least one leg has been dispatched — a `waiting` entry that has
1644
- # never launched has nothing to report, same as `attempts`/
1639
+ # #2972/#3463: the fix-round ceiling's OWN count, rendered with the
1640
+ # SAME meaning `coord drive`'s own `fix round N/M` lines use
1641
+ # (`coord/drive.py`) — fix rounds SPENT against `max_fix_rounds`, not
1642
+ # "every work-like leg including the initial one" against "budget +
1643
+ # 1". `lifetime_legs` is every WORK_LIKE leg `leg_counts()` has ever
1644
+ # seen for this issue, all-time, across every predecessor row; #3463
1645
+ # narrows that to `row_legs` — legs run since THIS row was last
1646
+ # (re-)declared by `enqueue_drive_queue` (`entry.legs_at_enqueue`),
1647
+ # the SAME baseline `remaining_fix_rounds` subtracts. Only shown once
1648
+ # this row has itself dispatched at least one leg — a `waiting`
1649
+ # entry that has never launched (or a freshly re-added row that
1650
+ # hasn't relaunched yet) has nothing to report, same as `attempts`/
1645
1651
  # `deferrals` above being suppressed at 0.
1646
- work_legs = sum(
1652
+ lifetime_legs = sum(
1647
1653
  count
1648
1654
  for kind, count in all_leg_counts.get(entry.key, {}).items()
1649
1655
  if kind in WORK_LIKE
1650
1656
  )
1651
- if work_legs:
1652
- budget = total_fix_round_budget(entry, fix_round_config_default)
1653
- bits.append(f"fix_rounds={min(work_legs, budget)}/{budget}")
1657
+ row_legs = max(lifetime_legs - entry.legs_at_enqueue, 0)
1658
+ if row_legs:
1659
+ effective_max = effective_max_fix_rounds(entry, fix_round_config_default)
1660
+ fix_rounds_spent = max(row_legs - 1, 0)
1661
+ # #3463: an overrun (the #3454 leak: a row that dispatched past
1662
+ # its own ceiling before the fix landed) must stay VISIBLE as an
1663
+ # overrun, not silently clamp back down to a reassuring `N/N` —
1664
+ # a gate that can never show its own failure state is not a
1665
+ # gate (epic #2096).
1666
+ overrun = "!" if fix_rounds_spent > effective_max else ""
1667
+ bits.append(f"fix_rounds={fix_rounds_spent}/{effective_max}{overrun}")
1654
1668
  if entry.resumes:
1655
1669
  # #2230: how many times the merge-gate sweep has auto-resumed
1656
1670
  # THIS row from `blocked` — the churn signal the issue asks to be
@@ -1058,7 +1058,14 @@ def retry_on_locked(
1058
1058
  # first place" (a quadraui-style merge into a non-default branch) — both
1059
1059
  # read identically as `merged=True, issue_state="open"` otherwise. See
1060
1060
  # `coord.drive_queue.IssueFacts.landed`'s docstring.
1061
- _DB_SCHEMA_VERSION = 19
1061
+ #
1062
+ # #3463: bumped 19 -> 20 for the new `drive_queue.legs_at_enqueue` column
1063
+ # appended to `_MIGRATE_ADD_COLUMNS` below — the all-time WORK_LIKE leg
1064
+ # count a row saw at `enqueue_drive_queue` time, so `remaining_fix_rounds`
1065
+ # can measure a row's own spend from ITS baseline rather than every
1066
+ # predecessor row's lifetime total. See `coord.drive_queue.QueueEntry.
1067
+ # legs_at_enqueue`.
1068
+ _DB_SCHEMA_VERSION = 20
1062
1069
 
1063
1070
 
1064
1071
  def _read_schema_version(conn: sqlite3.Connection) -> int:
@@ -1592,6 +1599,24 @@ _SCHEMA_SQL = """
1592
1599
  -- point-in-time observation" discipline #2133's reason_at
1593
1600
  -- established for last_reason. NULL until a verdict is recorded.
1594
1601
  apply_verdict_at REAL,
1602
+ -- #3463: the all-time WORK_LIKE leg count (coord.state.
1603
+ -- leg_counts()'s per-issue figure) THIS ROW saw at the moment it
1604
+ -- was declared by `enqueue_drive_queue` — the baseline
1605
+ -- `coord.drive_queue.remaining_fix_rounds` subtracts off before
1606
+ -- comparing against `max_fix_rounds`, so a row's own spend is
1607
+ -- "legs since THIS row was enqueued", not "legs this issue has
1608
+ -- ever had across every predecessor row". Re-stamped on every
1609
+ -- `enqueue_drive_queue` call (insert OR update-in-place), which
1610
+ -- is what makes an explicit `remove` + `add` actually hand out a
1611
+ -- fresh budget as the #3454 ceiling message promises, while
1612
+ -- leaving the #2972 "no fresh budget from a bare relaunch"
1613
+ -- guarantee untouched — a relaunch never calls
1614
+ -- `enqueue_drive_queue` at all, only `update_drive_queue_entry`.
1615
+ -- 0 (NOT NULL) for every row predating this column: subtracting
1616
+ -- 0 reproduces the pre-#3463 `work_leg_count - 1` formula
1617
+ -- exactly, so an existing row's already-computed remaining
1618
+ -- budget does not change under this migration.
1619
+ legs_at_enqueue INTEGER NOT NULL DEFAULT 0,
1595
1620
  UNIQUE(repo_name, issue_number)
1596
1621
  );
1597
1622
 
@@ -2510,6 +2535,13 @@ _MIGRATE_ADD_COLUMNS: list[str] = [
2510
2535
  # auto-close the linked issue at all — both look identical as
2511
2536
  # `merged=True, issue_state="open"` without it.
2512
2537
  "ALTER TABLE issues ADD COLUMN state_reason TEXT NOT NULL DEFAULT ''",
2538
+ # #3463: see the CREATE TABLE comment above — the all-time WORK_LIKE leg
2539
+ # count a row saw at `enqueue_drive_queue` time, so a re-added row's fix
2540
+ # budget is measured from ITS OWN baseline rather than every
2541
+ # predecessor's lifetime spend. 0 for every row predating this
2542
+ # migration, which reproduces the pre-#3463 `work_leg_count - 1` formula
2543
+ # unchanged for that row.
2544
+ "ALTER TABLE drive_queue ADD COLUMN legs_at_enqueue INTEGER NOT NULL DEFAULT 0",
2513
2545
  ]
2514
2546
 
2515
2547
 
@@ -1456,6 +1456,19 @@ class QueueEntry:
1456
1456
  # `last_reason`. `None` for a row predating this column or one whose
1457
1457
  # `apply_verdict` is still unset.
1458
1458
  apply_verdict_at: float | None = None
1459
+ # #3463: the all-time WORK_LIKE leg count (the SAME per-issue figure
1460
+ # `IssueFacts.work_leg_count` carries) this row saw at the moment
1461
+ # `enqueue_drive_queue` last declared it — see
1462
+ # `coord.state._enqueue_drive_queue_local` for where it is stamped, on
1463
+ # every `add` (insert OR update-in-place), never carried forward.
1464
+ # `remaining_fix_rounds` subtracts this off `facts.work_leg_count`
1465
+ # before comparing spend against `max_fix_rounds`, so a row's own
1466
+ # budget is measured from ITS OWN baseline — "legs since THIS row was
1467
+ # last (re-)declared" — rather than the lifetime total every
1468
+ # predecessor row for this issue ever spent. `0` for every row
1469
+ # predating this column, which reproduces the pre-#3463
1470
+ # `work_leg_count - 1` formula exactly for that row.
1471
+ legs_at_enqueue: int = 0
1459
1472
 
1460
1473
  @property
1461
1474
  def key(self) -> str:
@@ -1556,6 +1569,7 @@ class QueueEntry:
1556
1569
  if row.get("apply_verdict_at") is None
1557
1570
  else float(row.get("apply_verdict_at"))
1558
1571
  ),
1572
+ legs_at_enqueue=int(row.get("legs_at_enqueue") or 0),
1559
1573
  )
1560
1574
 
1561
1575
 
@@ -1617,29 +1631,46 @@ def remaining_fix_rounds(
1617
1631
  resumes rather than restarts.
1618
1632
 
1619
1633
  ``facts.work_leg_count`` is every work-like assignment `build_board_view`
1620
- has EVER seen for this issue, across every drive session this entry has
1621
- had — not just the one that just died. Subtracting the one unconditional
1622
- initial work leg turns that into "fix rounds already spent"; subtracting
1623
- THAT from :func:`effective_max_fix_rounds`'s plain per-drive allowance
1624
- (NOT :func:`total_fix_round_budget` — that figure already has the
1625
- initial work leg folded in, and folding it in a second time here would
1626
- hand a brand-new entry, with zero legs spent, a budget one round wider
1627
- than `coord drive`'s own interactive default ever allows) is what makes
1628
- a second (or third, or fourth) relaunch get a SMALLER budget than the
1634
+ has EVER seen for this issue, across every drive session this entry (and
1635
+ every predecessor row for the same issue) has ever had. #3463: what this
1636
+ row has itself SPENT is that lifetime total minus
1637
+ ``entry.legs_at_enqueue`` — the lifetime count as of the moment THIS row
1638
+ was last (re-)declared by `enqueue_drive_queue` — not the raw lifetime
1639
+ total. Subtracting the one unconditional initial work leg turns that
1640
+ into "fix rounds already spent"; subtracting THAT from
1641
+ :func:`effective_max_fix_rounds`'s plain per-drive allowance (NOT
1642
+ :func:`total_fix_round_budget` — that figure already has the initial
1643
+ work leg folded in, and folding it in a second time here would hand a
1644
+ brand-new entry, with zero legs spent, a budget one round wider than
1645
+ `coord drive`'s own interactive default ever allows) is what makes a
1646
+ second (or third, or fourth) relaunch get a SMALLER budget than the
1629
1647
  first, instead of the same fresh one every time — the exact defect
1630
1648
  quadraui#625 reported: four work legs dispatched against a
1631
1649
  ``pipeline.max_fix_rounds`` of 2 (budget 3), because each relaunch's
1632
1650
  ``coord drive --max-fix-rounds`` was computed from `entry` alone, blind
1633
1651
  to what prior sessions had already spent. A fresh entry (``work_leg_count
1634
- == 0``) reads back exactly :func:`effective_max_fix_rounds` — unchanged
1635
- from every pre-#2972 launch.
1652
+ == legs_at_enqueue``) reads back exactly :func:`effective_max_fix_rounds`
1653
+ — unchanged from every pre-#2972 launch, and unchanged by #3463 for a row
1654
+ predating the ``legs_at_enqueue`` column (``0``, reproducing the old
1655
+ ``work_leg_count - 1`` formula exactly).
1656
+
1657
+ #3463: this is also what makes an explicit ``coord drive-queue remove``
1658
+ + ``add`` actually hand out a fresh budget, as the #3454 ceiling message
1659
+ promises — the re-added row's own ``legs_at_enqueue`` is stamped at
1660
+ THAT ``add``, not inherited from a predecessor row. It does NOT change
1661
+ the #2972 guarantee that a bare relaunch (no `add` in between) gets no
1662
+ fresh budget: a relaunch never calls `enqueue_drive_queue` at all, only
1663
+ `update_drive_queue_entry`, so `legs_at_enqueue` never moves between
1664
+ relaunches of the SAME row.
1636
1665
 
1637
1666
  Never negative — an entry that has already met or exceeded
1638
1667
  :func:`total_fix_round_budget` reads ``0`` (no more fix rounds), the
1639
1668
  signal `_reconcile_running` uses to stop relaunching altogether rather
1640
1669
  than pass a session a budget it cannot spend down further.
1641
1670
  """
1642
- fix_rounds_spent = max(facts.work_leg_count - 1, 0)
1671
+ fix_rounds_spent = max(
1672
+ facts.work_leg_count - entry.legs_at_enqueue - 1, 0
1673
+ )
1643
1674
  return max(effective_max_fix_rounds(entry, config_default) - fix_rounds_spent, 0)
1644
1675
 
1645
1676
 
@@ -5187,9 +5218,14 @@ def _reconcile_running(
5187
5218
  # showed a bare "giving up" read as "nothing more will happen or be
5188
5219
  # spent" while the fleet kept dispatching paid legs against the same
5189
5220
  # branch for hours.
5221
+ # #3463: legs run against THIS row's own baseline, not the raw
5222
+ # lifetime count — see `remaining_fix_rounds`'s docstring. Reporting
5223
+ # the raw `facts.work_leg_count` here would misstate a re-added
5224
+ # row's spend as its predecessors' lifetime total.
5225
+ row_legs = max(facts.work_leg_count - entry.legs_at_enqueue, 0)
5190
5226
  reason = (
5191
5227
  f"fix-round ceiling reached across relaunches (#2972): "
5192
- f"{facts.work_leg_count} work leg(s) already run against a "
5228
+ f"{row_legs} work leg(s) already run against this row's own "
5193
5229
  f"budget of {budget} (1 work dispatch + "
5194
5230
  f"{effective_max_fix_rounds(entry, fix_round_config_default)} fix "
5195
5231
  f"round(s)) — giving up rather than relaunching with a fresh "
@@ -5197,8 +5233,8 @@ def _reconcile_running(
5197
5233
  f"gate-clear resume, or auto-dispatched stale-rebase conflict-fix "
5198
5234
  f"(from any of this fleet's independent dispatchers) will fire "
5199
5235
  f"for this entry — `coord drive-queue remove {entry.repo} "
5200
- f"{entry.issue}` + `add` (a fresh row) is the only way to give "
5201
- f"it another attempt."
5236
+ f"{entry.issue}` + `add` (a fresh row, #3463: with its own fresh "
5237
+ f"budget) is the only way to give it another attempt."
5202
5238
  )
5203
5239
  return (
5204
5240
  Reconcile(entry.key, "exhausted", reason, occupies=False),
@@ -6426,6 +6462,29 @@ def plan_tick(
6426
6462
  # carries fresh, right below.
6427
6463
  effective_last_reason: dict[str, str] = {e.key: e.last_reason for e in ordered}
6428
6464
 
6465
+ def _refresh_only(reason: str, current: str) -> dict[str, Any]:
6466
+ """``{}`` unless *reason* is non-empty and differs from *current*.
6467
+
6468
+ #3461: a `counted=False` deferral must never bump `deferrals` or feed
6469
+ the queue-level alert (see `Deferral`'s own docstring on that flag) —
6470
+ but the descriptive TEXT still has to keep up with reality when the
6471
+ walk re-derives it for an entry that isn't actually competing for a
6472
+ slot this tick (the queue is at capacity, or this entry sits behind
6473
+ an already-chosen launch in the report-only tail). Writing ONLY on a
6474
+ real change means `reason_at` — stamped by
6475
+ `coord.state._update_drive_queue_entry_local` whenever `last_reason`
6476
+ is present in the same update, #2133 — only moves when the text
6477
+ actually does, so the `(Nm ago)` age it powers keeps meaning "how
6478
+ long this has been true" rather than "how long since some tick
6479
+ happened to re-walk this row". An empty *reason* (the fully-eligible,
6480
+ nothing-to-report shape `_Verdict(True)` returns) writes nothing —
6481
+ overwriting a real reason with blank text would be a regression, not
6482
+ a refresh.
6483
+ """
6484
+ if not reason or reason == current:
6485
+ return {}
6486
+ return {"last_reason": reason}
6487
+
6429
6488
  reconciles: list[Reconcile] = []
6430
6489
  blocked: list[Blocked] = []
6431
6490
  deferrals: list[Deferral] = []
@@ -7066,11 +7125,41 @@ def plan_tick(
7066
7125
  )
7067
7126
 
7068
7127
  if capacity - occupied <= 0:
7128
+ # #3461: at capacity is the NORMAL steady state of a deep queue, so
7129
+ # this early return can fire for many ticks in a row. Before this, it
7130
+ # produced no deferral at all, which meant a `waiting` entry's
7131
+ # `last_reason` — e.g. "waiting on X (queued, blocked, ...)" — never
7132
+ # got a chance to notice X had since flipped back to `waiting`, or
7133
+ # landed. `_resolve_prereqs` is cheap (no I/O, just the cached board
7134
+ # + this tick's `states`), so it still runs for every `waiting` entry
7135
+ # here; only the TEXT is refreshed (`_refresh_only` below is a no-op
7136
+ # unless it actually changed) and only via `counted=False` — no
7137
+ # attempt is spent, `deferrals` does not move, and the queue-level
7138
+ # alert (computed only in the launch walk below) is untouched, same
7139
+ # as every other early return in this function.
7140
+ for entry in ordered:
7141
+ if states.get(entry.key) != STATE_WAITING:
7142
+ continue
7143
+ verdict = _resolve_prereqs(
7144
+ entry,
7145
+ board,
7146
+ states,
7147
+ cycle_keys,
7148
+ held_gates,
7149
+ live_prereq_terminal,
7150
+ effective_last_reason,
7151
+ )
7152
+ updates = _refresh_only(verdict.reason, entry.last_reason)
7153
+ if not updates:
7154
+ continue
7155
+ deferrals.append(
7156
+ Deferral(entry.key, verdict.reason, counted=False, updates=updates)
7157
+ )
7069
7158
  return TickPlan(
7070
7159
  **plan_base,
7071
7160
  reconciles=tuple(reconciles),
7072
7161
  blocked=tuple(blocked),
7073
- deferrals=(),
7162
+ deferrals=tuple(deferrals),
7074
7163
  alert=None,
7075
7164
  launch=None,
7076
7165
  )
@@ -7201,17 +7290,35 @@ def plan_tick(
7201
7290
  for entry in waiting:
7202
7291
  if launch is not None:
7203
7292
  # Report-only pass over the tail of the queue. The launch above
7204
- # already won this tick, so nothing here is mutated (see
7205
- # Deferral.counted) — this exists so `--dry-run` explains the rest
7206
- # of the queue instead of going silent after the first line.
7293
+ # already won this tick, so `counted` stays `False` and neither
7294
+ # `deferrals` nor the queue-level alert moves for anything found
7295
+ # here — that part is unchanged. #3461: the descriptive TEXT is
7296
+ # no longer left frozen just because this entry never got to
7297
+ # compete for a slot — `_refresh_only` (defined near the top of
7298
+ # this function) still folds a changed reading into `updates` so
7299
+ # `--dry-run` AND a real tick both keep `last_reason` current for
7300
+ # every entry the walk reaches, not only the one that launched.
7207
7301
  cooldown = _cooldown_reason(entry)
7208
7302
  if cooldown:
7209
- deferrals.append(Deferral(entry.key, cooldown, counted=False))
7303
+ deferrals.append(
7304
+ Deferral(
7305
+ entry.key,
7306
+ cooldown,
7307
+ counted=False,
7308
+ updates=_refresh_only(cooldown, entry.last_reason),
7309
+ )
7310
+ )
7210
7311
  continue
7211
7312
  backoff = _backoff_reason(entry)
7212
7313
  if backoff:
7213
7314
  deferrals.append(
7214
- Deferral(entry.key, backoff, counted=False, backing_off=True)
7315
+ Deferral(
7316
+ entry.key,
7317
+ backoff,
7318
+ counted=False,
7319
+ backing_off=True,
7320
+ updates=_refresh_only(backoff, entry.last_reason),
7321
+ )
7215
7322
  )
7216
7323
  continue
7217
7324
  verdict = _resolve_prereqs(
@@ -7225,20 +7332,35 @@ def plan_tick(
7225
7332
  )
7226
7333
  if not verdict.satisfied:
7227
7334
  deferrals.append(
7228
- Deferral(entry.key, verdict.reason, counted=False)
7335
+ Deferral(
7336
+ entry.key,
7337
+ verdict.reason,
7338
+ counted=False,
7339
+ updates=_refresh_only(verdict.reason, entry.last_reason),
7340
+ )
7229
7341
  )
7230
7342
  continue
7231
7343
  cordoned = _cordon_reason(entry)
7232
7344
  if cordoned:
7233
7345
  deferrals.append(
7234
- Deferral(entry.key, cordoned, counted=False, cordoned=True)
7346
+ Deferral(
7347
+ entry.key,
7348
+ cordoned,
7349
+ counted=False,
7350
+ cordoned=True,
7351
+ updates=_refresh_only(cordoned, entry.last_reason),
7352
+ )
7235
7353
  )
7236
7354
  continue
7237
7355
  repo_limit = _repo_limit_reason(entry)
7238
7356
  if repo_limit:
7239
7357
  deferrals.append(
7240
7358
  Deferral(
7241
- entry.key, repo_limit, counted=False, repo_limited=True
7359
+ entry.key,
7360
+ repo_limit,
7361
+ counted=False,
7362
+ repo_limited=True,
7363
+ updates=_refresh_only(repo_limit, entry.last_reason),
7242
7364
  )
7243
7365
  )
7244
7366
  continue
@@ -8473,7 +8473,7 @@ _DRIVE_QUEUE_COLUMNS = (
8473
8473
  "enqueued_at, hold_after, hold_reason, resume_when, hold_state, "
8474
8474
  "hold_probes, launch_host, hold_scope, resumes, retry_backoff_at, "
8475
8475
  "max_fix_rounds, no_acceptance, plan_destructive, apply_verdict, "
8476
- "apply_verdict_reason, apply_verdict_at"
8476
+ "apply_verdict_reason, apply_verdict_at, legs_at_enqueue"
8477
8477
  )
8478
8478
 
8479
8479
  # Fields `update_drive_queue_entry` may write. Deliberately excludes the
@@ -8655,6 +8655,42 @@ def enqueue_drive_queue(
8655
8655
  )
8656
8656
 
8657
8657
 
8658
+ def _work_leg_count_for_issue_local(conn, repo_name: str, issue_number: int) -> int:
8659
+ """All-time WORK_LIKE assignment count for ONE issue, right now (#3463).
8660
+
8661
+ Same scope as :func:`_leg_counts_local` (both ``assignments`` and
8662
+ ``assignments_archive``, so a long-lived issue's early legs don't drop
8663
+ out of the count as they age past the archive retention window) but
8664
+ narrowed to a single ``(repo_name, issue_number)`` and run on the
8665
+ CALLER's own connection — so ``_enqueue_drive_queue_local`` can stamp
8666
+ ``legs_at_enqueue`` atomically with the very write that declares the
8667
+ row, rather than racing a second connection's transaction.
8668
+
8669
+ A NULL/empty ``type`` counts as ``"work"`` — same convention
8670
+ :func:`coord.drive_queue.compute_leg_counts` uses (``t = assignment_type
8671
+ or "work"``) — which is always in ``WORK_LIKE_TYPES``, so a bare
8672
+ ``type IS NULL`` row is counted, never silently dropped.
8673
+ """
8674
+ placeholders = ",".join("?" for _ in WORK_LIKE_TYPES)
8675
+ total = 0
8676
+ for table in ("assignments", "assignments_archive"):
8677
+ try:
8678
+ row = sql.execute(conn,
8679
+ f"SELECT COUNT(*) AS n FROM {table} WHERE repo_name = ? " # noqa: S608 — constant
8680
+ f"AND issue_number = ? AND (type IS NULL OR type IN ({placeholders}))",
8681
+ (repo_name, issue_number, *WORK_LIKE_TYPES),
8682
+ ).fetchone()
8683
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
8684
+ # Mirrors `_leg_counts_local`: `continue` on the SAME connection
8685
+ # so a missing `assignments_archive` (housekeeping never ran)
8686
+ # doesn't poison the transaction the caller's write is still
8687
+ # inside of (#2983).
8688
+ rollback_after_driver_error(conn, exc)
8689
+ continue
8690
+ total += int(row["n"]) if row is not None else 0
8691
+ return total
8692
+
8693
+
8658
8694
  def _enqueue_drive_queue_local(
8659
8695
  repo_name: str,
8660
8696
  issue_number: int,
@@ -8705,6 +8741,21 @@ def _enqueue_drive_queue_local(
8705
8741
  "SELECT id FROM drive_queue WHERE repo_name = ? AND issue_number = ?",
8706
8742
  (repo_name, issue_number),
8707
8743
  ).fetchone()
8744
+ # #3463: the all-time WORK_LIKE leg count for THIS issue, read on
8745
+ # THIS connection right before the write below commits it as the
8746
+ # row's new baseline. Recomputed on every `enqueue_drive_queue` call
8747
+ # — insert AND update-in-place — never carried forward from a prior
8748
+ # `legs_at_enqueue`, so an explicit `add` (whether it lands on a
8749
+ # brand-new row after `remove`, or refreshes an already-queued one)
8750
+ # always measures this row's spend from "legs as of right now",
8751
+ # which is what lets `remaining_fix_rounds` hand out the fresh
8752
+ # budget the #3454 ceiling message promises. A bare relaunch never
8753
+ # reaches this function at all (it goes through
8754
+ # `update_drive_queue_entry` instead), so the #2972 "no fresh
8755
+ # budget from a relaunch" guarantee is untouched.
8756
+ legs_at_enqueue = _work_leg_count_for_issue_local(
8757
+ conn, repo_name, issue_number
8758
+ )
8708
8759
  if existing is not None:
8709
8760
  # Already queued → update the operator-declared fields in place
8710
8761
  # rather than creating a second row for the same issue. Run
@@ -8720,7 +8771,7 @@ def _enqueue_drive_queue_local(
8720
8771
  "UPDATE drive_queue SET machine = ?, after_json = ?, hold_after = ?, "
8721
8772
  "hold_reason = ?, resume_when = ?, hold_state = ?, hold_probes = 0, "
8722
8773
  "hold_scope = ?, max_fix_rounds = ?, no_acceptance = ?, "
8723
- "plan_destructive = ? WHERE id = ?",
8774
+ "plan_destructive = ?, legs_at_enqueue = ? WHERE id = ?",
8724
8775
  (
8725
8776
  machine,
8726
8777
  after_json,
@@ -8732,6 +8783,7 @@ def _enqueue_drive_queue_local(
8732
8783
  max_fix_rounds,
8733
8784
  no_acceptance_int,
8734
8785
  plan_destructive_int,
8786
+ legs_at_enqueue,
8735
8787
  existing["id"],
8736
8788
  ),
8737
8789
  )
@@ -8746,8 +8798,8 @@ def _enqueue_drive_queue_local(
8746
8798
  "INSERT INTO drive_queue "
8747
8799
  "(repo_name, issue_number, position, machine, after_json, enqueued_at, "
8748
8800
  " hold_after, hold_reason, resume_when, hold_state, hold_scope, "
8749
- " max_fix_rounds, no_acceptance, plan_destructive) "
8750
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
8801
+ " max_fix_rounds, no_acceptance, plan_destructive, legs_at_enqueue) "
8802
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
8751
8803
  (
8752
8804
  repo_name,
8753
8805
  issue_number,
@@ -8763,6 +8815,7 @@ def _enqueue_drive_queue_local(
8763
8815
  max_fix_rounds,
8764
8816
  no_acceptance_int,
8765
8817
  plan_destructive_int,
8818
+ legs_at_enqueue,
8766
8819
  ),
8767
8820
  pk_column="id",
8768
8821
  )
@@ -5035,6 +5035,70 @@ def test_leg_counts_non_lock_failure_warns_and_degrades_to_zero_not_silence(
5035
5035
  assert queued(1650)["state"] == "running"
5036
5036
 
5037
5037
 
5038
+ # ── #3463: `list`'s `fix_rounds=` renders spend, not "every leg incl. the
5039
+ # initial one against budget+1" — and never clamps an overrun back to a
5040
+ # reassuring `N/N`.
5041
+
5042
+
5043
+ def test_list_renders_fix_rounds_as_spent_over_max_not_legs_over_budget_plus_one(
5044
+ cli, seed
5045
+ ):
5046
+ """`--max-fix-rounds 4` — a row that has run 1 work + 4 fix legs (5 legs
5047
+ total) must render `fix_rounds=4/4` (4 fix rounds spent of 4 allowed),
5048
+ never the pre-#3463 `5/5` (every leg, including the unconditional
5049
+ initial one, against `max_fix_rounds + 1`)."""
5050
+ seed(issues={1650: "open"})
5051
+ assert cli("add", REPO, "1650", "--max-fix-rounds", "4").exit_code == 0
5052
+ # The row's own history accrues AFTER it is declared — `legs_at_enqueue`
5053
+ # was stamped at 0 by the `add` above, so every one of these counts as
5054
+ # this row's own spend.
5055
+ seed(assignments=[
5056
+ {"issue_number": 1650, "type": "work", "status": "done"}
5057
+ for _ in range(5)
5058
+ ])
5059
+
5060
+ result = cli("list")
5061
+ assert result.exit_code == 0, result.output
5062
+ assert "fix_rounds=4/4" in result.output
5063
+ assert "fix_rounds=5/5" not in result.output
5064
+
5065
+
5066
+ def test_list_renders_zero_spent_for_a_fresh_row_with_only_its_initial_leg(
5067
+ cli, seed
5068
+ ):
5069
+ """A fresh `--max-fix-rounds 5` row with only its initial (unconditional)
5070
+ work leg has spent NO fix rounds yet — `fix_rounds=0/5`, never the
5071
+ pre-#3463 `1/6`."""
5072
+ seed(issues={1650: "open"})
5073
+ assert cli("add", REPO, "1650", "--max-fix-rounds", "5").exit_code == 0
5074
+ seed(assignments=[{"issue_number": 1650, "type": "work", "status": "running"}])
5075
+
5076
+ result = cli("list")
5077
+ assert result.exit_code == 0, result.output
5078
+ assert "fix_rounds=0/5" in result.output
5079
+ assert "fix_rounds=1/6" not in result.output
5080
+
5081
+
5082
+ def test_list_marks_an_overrun_row_rather_than_clamping_to_n_over_n(cli, seed):
5083
+ """A row that dispatched PAST its own ceiling (the #3454 leak this issue
5084
+ also reports) must stay visibly an overrun — never silently clamp back
5085
+ down to a reassuring `budget/budget`."""
5086
+ seed(issues={1650: "open"})
5087
+ assert cli("add", REPO, "1650", "--max-fix-rounds", "2").exit_code == 0
5088
+ # 1 work + 5 more legs = 6 total, 5 fix rounds spent against a 2-round
5089
+ # allowance — well past the ceiling.
5090
+ seed(assignments=[
5091
+ {"issue_number": 1650, "type": "work", "status": "done"}
5092
+ for _ in range(6)
5093
+ ])
5094
+
5095
+ result = cli("list")
5096
+ assert result.exit_code == 0, result.output
5097
+ assert "fix_rounds=5/2!" in result.output
5098
+ assert "fix_rounds=2/2" not in result.output
5099
+ assert "fix_rounds=3/3" not in result.output
5100
+
5101
+
5038
5102
  def test_a_failed_launch_is_a_consumed_attempt_not_a_running_entry(
5039
5103
  cli, seed, launches
5040
5104
  ):
@@ -2468,7 +2468,7 @@ class TestUatStateAndReasonColumns:
2468
2468
  # #3384 bumped this to (19, 97): `issues.state_reason` — GitHub's own witness
2469
2469
  # that an issue was explicitly reopened, distinguishing that from an issue
2470
2470
  # that merged without ever auto-closing.
2471
- _PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (19, 97)
2471
+ _PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (20, 98)
2472
2472
 
2473
2473
 
2474
2474
  class TestMigrateAddColumnsVersionGuard: