code-coordinator 0.5.495__tar.gz → 0.5.497__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 (899) hide show
  1. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. code_coordinator-0.5.497/code_coordinator.egg-info/scm_version.json +8 -0
  6. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/drive_queue.py +377 -24
  7. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/config.py +29 -0
  8. {code_coordinator-0.5.495 → code_coordinator-0.5.497/coord}/deploy/coord-drive-queue.service +45 -33
  9. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive_queue.py +58 -0
  10. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/overlap_predict.py +86 -0
  11. {code_coordinator-0.5.495/coord → code_coordinator-0.5.497}/deploy/coord-drive-queue.service +45 -33
  12. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_drive_queue.py +157 -1
  13. code_coordinator-0.5.497/tests/test_drive_queue_max_parallel_config.py +371 -0
  14. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_overlap_predict.py +56 -0
  15. code_coordinator-0.5.495/code_coordinator.egg-info/scm_version.json +0 -8
  16. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/board.md +0 -0
  17. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/complete-session.md +0 -0
  18. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/coordinator.md +0 -0
  19. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/_lib.sh +0 -0
  20. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-checkout +0 -0
  21. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-commit +0 -0
  22. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-merge +0 -0
  23. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/coord-ci-acceptance.yml +0 -0
  25. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/auto-release.yml +0 -0
  26. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/publish.yml +0 -0
  27. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.gitignore +0 -0
  29. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/GOAL.md +0 -0
  31. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/LICENSE +0 -0
  32. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/README.md +0 -0
  34. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/approved_work.py +0 -0
  49. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/backup.py +0 -0
  52. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_schema.py +0 -0
  54. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/claude_setup_token.py +0 -0
  66. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/client.py +0 -0
  68. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/codegen.py +0 -0
  69. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/__init__.py +0 -0
  70. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/_common.py +0 -0
  71. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/acceptance.py +0 -0
  72. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/agent_ops.py +0 -0
  73. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/audit.py +0 -0
  74. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/backup.py +0 -0
  75. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/chat.py +0 -0
  76. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/db.py +0 -0
  115. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive_state.py +0 -0
  152. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/events.py +0 -0
  153. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/failure_class.py +0 -0
  154. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/failure_classifier.py +0 -0
  155. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/filelock.py +0 -0
  156. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/fleet_config_health.py +0 -0
  157. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/forge_availability.py +0 -0
  158. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/freshness.py +0 -0
  159. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_a.py +0 -0
  160. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_b.py +0 -0
  161. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_snapshot.py +0 -0
  162. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gates.py +0 -0
  163. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gen_board_fixture.py +0 -0
  164. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/github_ops.py +0 -0
  165. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/github_throttle.py +0 -0
  166. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/goal.py +0 -0
  167. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/graph_health.py +0 -0
  168. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/__init__.py +0 -0
  169. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/aggregate.py +0 -0
  170. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/__init__.py +0 -0
  171. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/_ci_pin.py +0 -0
  172. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/agent_install.py +0 -0
  173. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/cargo_targets.py +0 -0
  174. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/claude_binary.py +0 -0
  175. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/config_drift.py +0 -0
  176. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  177. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/coord_web_ci_pin.py +0 -0
  178. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/deploy_lane_facts.py +0 -0
  179. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/disk.py +0 -0
  180. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_board.py +0 -0
  181. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  182. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_phantom.py +0 -0
  183. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_unit_drift.py +0 -0
  184. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/graph.py +0 -0
  185. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/graphify_cli.py +0 -0
  186. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/index_lock.py +0 -0
  187. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/issues_sync_staleness.py +0 -0
  188. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/plan_usage.py +0 -0
  189. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/pr_churn.py +0 -0
  190. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/release_cordon.py +0 -0
  191. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/repo_state.py +0 -0
  192. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/spawned_coord.py +0 -0
  193. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/stalled_pipeline.py +0 -0
  194. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/timer_active.py +0 -0
  195. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/toolchain.py +0 -0
  196. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/unit_drift.py +0 -0
  197. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/unit_enablement.py +0 -0
  198. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/wedged_drive_queue.py +0 -0
  199. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/worktrees.py +0 -0
  200. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/cli.py +0 -0
  201. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/context.py +0 -0
  202. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/fleet_snapshot.py +0 -0
  203. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/models.py +0 -0
  204. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/pypi.py +0 -0
  205. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/registry.py +0 -0
  206. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/render.py +0 -0
  207. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/units.py +0 -0
  208. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/hooks.py +0 -0
  209. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/housekeeping.py +0 -0
  210. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/interactive.py +0 -0
  211. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/invariant_alarms.py +0 -0
  212. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/issue_store.py +0 -0
  213. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/issues_sync_status.py +0 -0
  214. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/liveness_auditor.py +0 -0
  215. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_fault.py +0 -0
  216. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_metrics.py +0 -0
  217. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_onboard.py +0 -0
  218. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_pause.py +0 -0
  219. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_stats.py +0 -0
  220. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/merge_queue.py +0 -0
  221. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_chat.py +0 -0
  222. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_dispatch.py +0 -0
  223. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_gate.py +0 -0
  224. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_order.py +0 -0
  225. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/mock_author.py +0 -0
  226. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/models.py +0 -0
  227. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/network.py +0 -0
  228. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/new_issue_chat.py +0 -0
  229. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/__init__.py +0 -0
  230. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/baseline.py +0 -0
  231. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/cli.py +0 -0
  232. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/collect.py +0 -0
  233. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/digest.py +0 -0
  234. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/models.py +0 -0
  235. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/predicate.py +0 -0
  236. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/service.py +0 -0
  237. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/store.py +0 -0
  238. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/transport.py +0 -0
  239. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notify.py +0 -0
  240. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/openapi.py +0 -0
  241. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/overlap_fence.py +0 -0
  242. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/parentage.py +0 -0
  243. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/parentage_github.py +0 -0
  244. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/pipeline.py +0 -0
  245. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/plan_parser.py +0 -0
  246. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/plans.py +0 -0
  247. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/platform_paths.py +0 -0
  248. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_bridge.py +0 -0
  249. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_store.py +0 -0
  250. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_sync.py +0 -0
  251. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/pr_body_lint.py +0 -0
  252. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/prereqs.py +0 -0
  253. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/progress.py +0 -0
  254. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/__init__.py +0 -0
  255. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/base.py +0 -0
  256. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/claude.py +0 -0
  257. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/claude_pty.py +0 -0
  258. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/opencode.py +0 -0
  259. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/queue_diagnose.py +0 -0
  260. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reconcile.py +0 -0
  261. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reconcile_tick.py +0 -0
  262. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/refine_chat.py +0 -0
  263. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_cordon.py +0 -0
  264. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_propagate.py +0 -0
  265. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_verify.py +0 -0
  266. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_window.py +0 -0
  267. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_dormancy.py +0 -0
  268. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_edit.py +0 -0
  269. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_onboard.py +0 -0
  270. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reports.py +0 -0
  271. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/rest_schema.py +0 -0
  272. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/revalidate.py +0 -0
  273. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/review.py +0 -0
  274. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/scorecard.py +0 -0
  275. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/self_health.py +0 -0
  276. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/serve_app.py +0 -0
  277. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  278. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  279. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  280. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  281. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/portal-followup/SKILL.md +0 -0
  283. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/release-now/SKILL.md +0 -0
  284. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  285. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  286. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/update-issue/SKILL.md +0 -0
  287. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/smoke.py +0 -0
  288. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/spend_ceiling.py +0 -0
  289. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/split_work.py +0 -0
  290. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/sql.py +0 -0
  291. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/stage_projection.py +0 -0
  292. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/state.py +0 -0
  293. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/store_migrate.py +0 -0
  294. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/store_parity.py +0 -0
  295. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/templates/deploy-cloudflare.node.yml +0 -0
  296. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_author.py +0 -0
  297. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_chat.py +0 -0
  298. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_orchestrator.py +0 -0
  299. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_report.py +0 -0
  300. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/tui_release.py +0 -0
  301. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/uat_checks.py +0 -0
  302. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage.py +0 -0
  303. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage_limits.py +0 -0
  304. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage_rollup.py +0 -0
  305. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/worker_events.py +0 -0
  306. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coordinator.example.yml +0 -0
  307. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-agent.service +0 -0
  308. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-backup.service +0 -0
  309. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-backup.timer +0 -0
  310. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.service +0 -0
  311. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.sh +0 -0
  312. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.timer +0 -0
  313. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-dr-verify.service +0 -0
  314. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-dr-verify.timer +0 -0
  315. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-drive-queue.timer +0 -0
  316. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-failure-notify.service +0 -0
  317. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-failure-notify.sh +0 -0
  318. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-fleet-watchdog.service +0 -0
  319. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-fleet-watchdog.timer +0 -0
  320. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-notify.service +0 -0
  321. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-notify.timer +0 -0
  322. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-propagate.service +0 -0
  323. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-propagate.timer +0 -0
  324. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-window.service +0 -0
  325. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-window.timer +0 -0
  326. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-serve.service +0 -0
  327. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.service +0 -0
  328. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.sh +0 -0
  329. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.timer +0 -0
  330. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-rollback.sh +0 -0
  331. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web.service +0 -0
  332. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/node-shim.sh +0 -0
  333. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_TUI_CI.md +0 -0
  334. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  335. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_CI.md +0 -0
  336. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_DIST.md +0 -0
  337. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  338. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/AGENT_OPERATIONS.md +0 -0
  339. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ARCHITECTURE.md +0 -0
  340. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ARCH_SECURITY_GATES.md +0 -0
  341. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/COCKPIT.md +0 -0
  342. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CONTROL_CENTER.md +0 -0
  343. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/COST_DISCIPLINE.md +0 -0
  344. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CROSS_PLATFORM.md +0 -0
  345. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CUSTOMER_FACING_APPS.md +0 -0
  346. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CUSTOMER_PORTAL.md +0 -0
  347. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DATA_STORE_SELECTION.md +0 -0
  348. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DISASTER_RECOVERY.md +0 -0
  349. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DRIVE_QUEUE.md +0 -0
  350. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/EPHEMERAL_WORKERS.md +0 -0
  351. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/FORGE_MIGRATION.md +0 -0
  352. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/GRAPHIFY_SETUP.md +0 -0
  353. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ISSUE_GUIDANCE.md +0 -0
  354. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/MAC_MINI.md +0 -0
  355. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  356. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/NOTIFIER.md +0 -0
  357. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPENCODE_VERIFICATION.md +0 -0
  358. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPERATING_GOTCHAS.md +0 -0
  359. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPERATOR_GUIDES.md +0 -0
  360. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ORACLE_LOOP.md +0 -0
  361. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PHONE_WEBAPP.md +0 -0
  362. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PIPELINE_V2.md +0 -0
  363. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PLATFORM_EVOLUTION.md +0 -0
  364. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/SECOND_BACKEND.md +0 -0
  365. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/STORE_SERVICE.md +0 -0
  366. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  367. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/WEB_CONTROL_CENTER.md +0 -0
  368. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/WSL_WINDOWS_WORKER.md +0 -0
  369. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/README.md +0 -0
  370. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/_tokens.css +0 -0
  371. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/issue-detail.html +0 -0
  372. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/pipeline-narrow.html +0 -0
  373. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/pipeline-wide.html +0 -0
  374. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/graphify-out/.gitignore +0 -0
  375. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/install-agent.sh +0 -0
  376. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/pyproject.toml +0 -0
  377. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/audit_review_verdict_overrides.py +0 -0
  378. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  379. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/build-worker-image.sh +0 -0
  380. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/coordinator-machine.py +0 -0
  381. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/dr-down.sh +0 -0
  382. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/dr-up.sh +0 -0
  383. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/epic-down.sh +0 -0
  384. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/epic-up.sh +0 -0
  385. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/preflight.sh +0 -0
  386. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/provision-server.sh +0 -0
  387. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/provision-worker.sh +0 -0
  388. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  389. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  390. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/throwaway-vm.sh +0 -0
  391. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/verify-github-token.sh +0 -0
  392. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/check_gh_argv_containment.py +0 -0
  393. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/codegen.py +0 -0
  394. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-test-runner.sh +0 -0
  395. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  396. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  397. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  398. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  399. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-venv-rollback.sh +0 -0
  400. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/drive-batch.sh +0 -0
  401. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/extract-coord-tui.sh +0 -0
  402. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/fleet_watchdog.py +0 -0
  403. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/gen_board_fixture.py +0 -0
  404. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/gen_mock_index.py +0 -0
  405. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/lib/provision-core.sh +0 -0
  406. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/next_release_tag.py +0 -0
  407. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/provision-machine.sh +0 -0
  408. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/run_tests_in_populated_home.sh +0 -0
  409. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/run_tests_without_gh.sh +0 -0
  410. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/setup-macmini.sh +0 -0
  411. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/smoke_437_interactive.py +0 -0
  412. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify-provision-noble.sh +0 -0
  413. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_878_review_capture.py +0 -0
  414. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_release_published.py +0 -0
  415. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_release_wheel.py +0 -0
  416. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/setup.cfg +0 -0
  417. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/SMOKE_SET.md +0 -0
  418. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/__init__.py +0 -0
  419. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/conftest.py +0 -0
  420. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/contract.md +0 -0
  421. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/manifest.yml +0 -0
  422. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  423. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  424. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/contract.md +0 -0
  425. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  426. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  427. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/manifest.yml +0 -0
  428. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/tsconfig.json +0 -0
  430. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  431. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/backends.py +0 -0
  432. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/conftest.py +0 -0
  433. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/board-pipeline-basic.json +0 -0
  434. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  435. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  436. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  437. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  438. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/all_pass.json +0 -0
  439. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  440. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/mixed_fail.json +0 -0
  441. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  442. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  443. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/skip.json +0 -0
  444. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/truncated.json +0 -0
  445. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  446. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  447. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  448. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  449. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  450. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  451. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  452. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_acceptance.py +0 -0
  454. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_acceptance_drivers.py +0 -0
  455. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent.py +0 -0
  456. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_api_error.py +0 -0
  457. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_app.py +0 -0
  458. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_branch_base.py +0 -0
  459. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_branch_capture.py +0 -0
  460. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_config_free_1712.py +0 -0
  461. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_deploy_units_endpoint.py +0 -0
  462. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_dirty_worktree.py +0 -0
  463. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  464. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_graph_self_heal.py +0 -0
  465. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_health_h3.py +0 -0
  466. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_idle_restart.py +0 -0
  467. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_push_failure.py +0 -0
  468. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_reap.py +0 -0
  469. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_repos_and_pull.py +0 -0
  470. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_restart_services_endpoint.py +0 -0
  471. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_skills_self_heal.py +0 -0
  472. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_startup_diagnostics.py +0 -0
  473. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_update.py +0 -0
  474. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_update_bluegreen.py +0 -0
  475. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_usage_limit.py +0 -0
  476. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_zero_commit.py +0 -0
  477. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ambient_home_isolation.py +0 -0
  478. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_capability_reroute_3241.py +0 -0
  479. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_dependency_busy_2804.py +0 -0
  480. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_reject_plan.py +0 -0
  481. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_usage_gate.py +0 -0
  482. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approved_work_2532.py +0 -0
  483. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approved_work_2996.py +0 -0
  484. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_assignment_already_recorded_daemon.py +0 -0
  485. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_log.py +0 -0
  486. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_outcome.py +0 -0
  487. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_query.py +0 -0
  488. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_auto_loop.py +0 -0
  489. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_auto_release_publish_2035.py +0 -0
  490. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_backend_selection.py +0 -0
  491. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_backup.py +0 -0
  492. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_base_checkout_restore.py +0 -0
  493. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_block_log.py +0 -0
  494. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_cap_762.py +0 -0
  495. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_fixture.py +0 -0
  496. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_read_path.py +0 -0
  497. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_schema.py +0 -0
  498. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_service.py +0 -0
  499. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_state.py +0 -0
  500. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_wire.py +0 -0
  501. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_brain.py +0 -0
  502. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_branch_model.py +0 -0
  503. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_bug_intake.py +0 -0
  504. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_build_worker_image_env_update.py +0 -0
  505. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cargo_cache.py +0 -0
  506. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_check_gh_argv_containment.py +0 -0
  507. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_acceptance_gate_1950.py +0 -0
  508. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_fix.py +0 -0
  509. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_github.py +0 -0
  510. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_gitlab.py +0 -0
  511. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_parity_2091.py +0 -0
  512. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_store.py +0 -0
  513. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claim.py +0 -0
  514. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claude_md_budget.py +0 -0
  515. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claude_setup_token.py +0 -0
  516. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_acceptance.py +0 -0
  517. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign.py +0 -0
  518. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  519. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_interactive_remote.py +0 -0
  520. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_provider.py +0 -0
  521. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  522. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_audit.py +0 -0
  523. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_chat_continue.py +0 -0
  524. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_codegen.py +0 -0
  525. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_decide.py +0 -0
  526. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_capability_rules.py +0 -0
  527. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_config_provenance.py +0 -0
  528. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_forge_availability.py +0 -0
  529. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_graph.py +0 -0
  530. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_self.py +0 -0
  531. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_test_coverage.py +0 -0
  532. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor.py +0 -0
  533. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_config_free_1801.py +0 -0
  534. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  535. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  536. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_drive.py +0 -0
  537. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_escalate.py +0 -0
  538. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_fix_headless_review.py +0 -0
  539. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_gate_a.py +0 -0
  540. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_install_drift.py +0 -0
  541. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_install_skills.py +0 -0
  542. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_comment.py +0 -0
  543. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_create_label.py +0 -0
  544. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_reopen.py +0 -0
  545. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_view_list.py +0 -0
  546. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_merge.py +0 -0
  547. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_assign.py +0 -0
  548. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_capture.py +0 -0
  549. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_chat_add_child.py +0 -0
  550. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_dispatch.py +0 -0
  551. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_gate_b.py +0 -0
  552. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_gate_c.py +0 -0
  553. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_order.py +0 -0
  554. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  555. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_ship.py +0 -0
  556. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_network.py +0 -0
  557. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_new_issue_chat.py +0 -0
  558. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_plans.py +0 -0
  559. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_portal.py +0 -0
  560. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_pr.py +0 -0
  561. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_pull_artifact.py +0 -0
  562. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_queue.py +0 -0
  563. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_reattach_sessions.py +0 -0
  564. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_refine_board.py +0 -0
  565. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_preflight.py +0 -0
  566. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_propagate.py +0 -0
  567. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_window.py +0 -0
  568. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_repo_2220.py +0 -0
  569. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  570. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_scorecard.py +0 -0
  571. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_serve_store_backend_3084.py +0 -0
  572. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_set_review_findings.py +0 -0
  573. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_advisory_terminal.py +0 -0
  574. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_contested_tag.py +0 -0
  575. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_invariant_alarms.py +0 -0
  576. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_machine_fault.py +0 -0
  577. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_merge_queue.py +0 -0
  578. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_provider.py +0 -0
  579. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_retried_3340.py +0 -0
  580. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_review_finalizing.py +0 -0
  581. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_test_failed_tag.py +0 -0
  582. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_usage_limit.py +0 -0
  583. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_sync_comments_873.py +0 -0
  584. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_test_plan.py +0 -0
  585. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_track.py +0 -0
  586. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_tui_update.py +0 -0
  587. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_wait.py +0 -0
  588. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client.py +0 -0
  589. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_base_install.py +0 -0
  590. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_config_cache_atomic_3052.py +0 -0
  591. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_resource_migration_1946.py +0 -0
  592. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_commands_common.py +0 -0
  593. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_comments.py +0 -0
  594. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_completion_summary.py +0 -0
  595. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config.py +0 -0
  596. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_acceptance.py +0 -0
  597. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_audit.py +0 -0
  598. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_drift_check.py +0 -0
  599. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_pricing.py +0 -0
  600. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  601. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_usage_gate.py +0 -0
  602. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_confirm_test.py +0 -0
  603. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_conflict_fix.py +0 -0
  604. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_conflict_fix_semantic.py +0 -0
  605. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  606. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test.py +0 -0
  607. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  608. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_baseline.py +0 -0
  609. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_populated_home.py +0 -0
  610. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_routing.py +0 -0
  611. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_toolchain.py +0 -0
  612. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_uat.py +0 -0
  613. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_web_sse_restart_live.py +0 -0
  614. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coordinator_machine.py +0 -0
  615. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cross_platform_imports.py +0 -0
  616. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dao.py +0 -0
  617. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard.py +0 -0
  618. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_api.py +0 -0
  619. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_fixture.py +0 -0
  620. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_server.py +0 -0
  621. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_terminal.py +0 -0
  622. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_terminal_live.py +0 -0
  623. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_db.py +0 -0
  624. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dead_end.py +0 -0
  625. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_decomposition_chat.py +0 -0
  626. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_db_backup.py +0 -0
  627. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_web_dist.py +0 -0
  628. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_web_rollback.py +0 -0
  629. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_db_backup_unit.py +0 -0
  630. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_drive_queue_unit.py +0 -0
  631. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_failure_notify_unit.py +0 -0
  632. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_manifest.py +0 -0
  633. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_notify_unit.py +0 -0
  634. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_units_lane.py +0 -0
  635. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_web_unit.py +0 -0
  636. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deprecation_telemetry.py +0 -0
  637. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deps.py +0 -0
  638. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_diagnose.py +0 -0
  639. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch.py +0 -0
  640. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_liveness.py +0 -0
  641. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_target_validation.py +0 -0
  642. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_workers.py +0 -0
  643. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dist_name.py +0 -0
  644. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_done_housekeeping.py +0 -0
  645. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_azure_scripts.py +0 -0
  646. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_promote.py +0 -0
  647. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_verify.py +0 -0
  648. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive.py +0 -0
  649. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_machine_fault.py +0 -0
  650. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue.py +0 -0
  651. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_blocked_rendering.py +0 -0
  652. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_launch_argv.py +0 -0
  653. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  654. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_roll_pending.py +0 -0
  655. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  656. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_state.py +0 -0
  657. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_tmux.py +0 -0
  658. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_capability_detection.py +0 -0
  659. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  660. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_image_provenance.py +0 -0
  661. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_errors.py +0 -0
  662. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_events.py +0 -0
  663. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_failure_class.py +0 -0
  664. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_failure_classifier.py +0 -0
  665. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_filelock.py +0 -0
  666. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  667. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fix_escalation_classifier.py +0 -0
  668. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fix_of_force_override.py +0 -0
  669. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_config_health.py +0 -0
  670. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_health_probes.py +0 -0
  671. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_health_snapshot.py +0 -0
  672. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_watchdog.py +0 -0
  673. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_forge_availability.py +0 -0
  674. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_freshness.py +0 -0
  675. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_a.py +0 -0
  676. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_b.py +0 -0
  677. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_snapshot_staleness.py +0 -0
  678. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gates.py +0 -0
  679. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  680. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gen_mock_index.py +0 -0
  681. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_rust_fixture.py +0 -0
  682. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_rust_requests.py +0 -0
  683. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_types_fixture.py +0 -0
  684. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_github_ops.py +0 -0
  685. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_github_throttle.py +0 -0
  686. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_goal.py +0 -0
  687. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_graph_health.py +0 -0
  688. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_graph_selfheal_absent_2237.py +0 -0
  689. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_handoff.py +0 -0
  690. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_checks.py +0 -0
  691. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_cli.py +0 -0
  692. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_cli_graph.py +0 -0
  693. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_config.py +0 -0
  694. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_context.py +0 -0
  695. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_coord_tui_ci_pin.py +0 -0
  696. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_coord_web_ci_pin.py +0 -0
  697. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_deploy_lane_facts.py +0 -0
  698. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_fix.py +0 -0
  699. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_incident_regression.py +0 -0
  700. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_issues_sync_staleness.py +0 -0
  701. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_pr_churn.py +0 -0
  702. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_pypi.py +0 -0
  703. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_registry.py +0 -0
  704. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_release_cordon_probe.py +0 -0
  705. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_timer_active.py +0 -0
  706. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_toolchain.py +0 -0
  707. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_unit_drift.py +0 -0
  708. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_unit_enablement.py +0 -0
  709. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_wedged_drive_queue.py +0 -0
  710. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_hooks.py +0 -0
  711. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_housekeeping.py +0 -0
  712. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_human_attended_437.py +0 -0
  713. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_init.py +0 -0
  714. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_install_agent_venv_2911.py +0 -0
  715. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_integration.py +0 -0
  716. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_briefing_echo.py +0 -0
  717. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_pane_log_2541.py +0 -0
  718. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_prefill_state.py +0 -0
  719. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_session_relaunch.py +0 -0
  720. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_test_verdict_backstop.py +0 -0
  721. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_token_attribution.py +0 -0
  722. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_worktree.py +0 -0
  723. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_invariant_alarms.py +0 -0
  724. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_issue_store_seam.py +0 -0
  725. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_issues_sync_status.py +0 -0
  726. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_liveness_auditor.py +0 -0
  727. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_liveness_notify.py +0 -0
  728. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_lock_contention_ratchet.py +0 -0
  729. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_fault.py +0 -0
  730. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_metrics.py +0 -0
  731. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_onboard.py +0 -0
  732. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_pause.py +0 -0
  733. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_stats.py +0 -0
  734. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_merge_queue.py +0 -0
  735. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_merge_verify.py +0 -0
  736. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_chat.py +0 -0
  737. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_dispatch.py +0 -0
  738. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_gate.py +0 -0
  739. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_order.py +0 -0
  740. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_seam.py +0 -0
  741. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_mock_author.py +0 -0
  742. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_model_tiering.py +0 -0
  743. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_models.py +0 -0
  744. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_models_config_labels.py +0 -0
  745. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_needs_attention.py +0 -0
  746. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_network.py +0 -0
  747. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_new_issue_chat.py +0 -0
  748. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_next_release_tag.py +0 -0
  749. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_node_shim.py +0 -0
  750. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_baseline.py +0 -0
  751. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_cli.py +0 -0
  752. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_collect.py +0 -0
  753. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_config.py +0 -0
  754. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_drive_seam.py +0 -0
  755. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_isolation.py +0 -0
  756. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_predicate.py +0 -0
  757. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_quiet_hours.py +0 -0
  758. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_service.py +0 -0
  759. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notify.py +0 -0
  760. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notify_drain.py +0 -0
  761. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_openapi.py +0 -0
  762. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_operational_defaults.py +0 -0
  763. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_overlap_fence.py +0 -0
  764. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_packaged_deploy_units.py +0 -0
  765. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_parentage.py +0 -0
  766. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_paste_landed.py +0 -0
  767. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  768. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_pipeline.py +0 -0
  769. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_approve_plan_command.py +0 -0
  770. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_pr_command.py +0 -0
  771. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_review_command.py +0 -0
  772. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_only.py +0 -0
  773. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_parser.py +0 -0
  774. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_platform_paths.py +0 -0
  775. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_bridge.py +0 -0
  776. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_config.py +0 -0
  777. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_store.py +0 -0
  778. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_sync.py +0 -0
  779. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_pr_body_lint.py +0 -0
  780. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_prereqs.py +0 -0
  781. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_production_db_guard.py +0 -0
  782. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_progress.py +0 -0
  783. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provider_seam.py +0 -0
  784. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers.py +0 -0
  785. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers_config_labels.py +0 -0
  786. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers_pty.py +0 -0
  787. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provision_core.py +0 -0
  788. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provision_machine.py +0 -0
  789. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_py_rust_mirror_inventory.py +0 -0
  790. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_quiet_hours.py +0 -0
  791. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_quiet_hours_store_2146.py +0 -0
  792. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reap_merged_sessions.py +0 -0
  793. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reap_stale_interactive_tick.py +0 -0
  794. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile.py +0 -0
  795. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_branch.py +0 -0
  796. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_completions.py +0 -0
  797. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  798. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_merges.py +0 -0
  799. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_no_agent_record.py +0 -0
  800. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_tick.py +0 -0
  801. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_usage_limit_done.py +0 -0
  802. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_refine_chat.py +0 -0
  803. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_2101.py +0 -0
  804. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  805. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_deadlock_2240.py +0 -0
  806. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  807. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_stuck_2490.py +0 -0
  808. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_propagate.py +0 -0
  809. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_propagate_threshold.py +0 -0
  810. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_roll_between_legs_2854.py +0 -0
  811. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_roll_window_handoff.py +0 -0
  812. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_unified_1242.py +0 -0
  813. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_verify.py +0 -0
  814. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_window.py +0 -0
  815. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_remote_auto_prune.py +0 -0
  816. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_remote_interactive_reaper.py +0 -0
  817. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_add.py +0 -0
  818. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_dormancy.py +0 -0
  819. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_edit_2220.py +0 -0
  820. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_graph_fleet_2237.py +0 -0
  821. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_onboard_2220.py +0 -0
  822. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_report_result_push.py +0 -0
  823. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reports.py +0 -0
  824. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry.py +0 -0
  825. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_advisory_1606.py +0 -0
  826. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_escalation_classify_3360.py +0 -0
  827. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_type_1636.py +0 -0
  828. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_revalidate.py +0 -0
  829. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review.py +0 -0
  830. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_end_review_without_verdict.py +0 -0
  831. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_parse_failure_diagnostic.py +0 -0
  832. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_reaffirm.py +0 -0
  833. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_state.py +0 -0
  834. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_backstop.py +0 -0
  835. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_override_audit.py +0 -0
  836. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_relay.py +0 -0
  837. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_zero_commits.py +0 -0
  838. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_scoped_review_wiring.py +0 -0
  839. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_scorecard.py +0 -0
  840. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_self_health.py +0 -0
  841. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve.py +0 -0
  842. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_app.py +0 -0
  843. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_app_board_trim.py +0 -0
  844. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_rest_routes.py +0 -0
  845. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_session.py +0 -0
  846. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_slice_issue_attribution.py +0 -0
  847. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke.py +0 -0
  848. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  849. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_live_checkout_restore.py +0 -0
  850. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_workflow.py +0 -0
  851. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_spend_ceiling.py +0 -0
  852. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_spend_ceiling_coordinator.py +0 -0
  853. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_split.py +0 -0
  854. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_split_work.py +0 -0
  855. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_sql_dialect.py +0 -0
  856. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_sqlite_connect_ratchet.py +0 -0
  857. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stage_projection.py +0 -0
  858. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stale_busy_reviewer_697.py +0 -0
  859. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stalled_pipeline.py +0 -0
  860. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_state.py +0 -0
  861. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_state_review_findings_daemon.py +0 -0
  862. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_status_fleet_footer.py +0 -0
  863. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stop_1567.py +0 -0
  864. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_store_contract.py +0 -0
  865. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_store_migrate.py +0 -0
  866. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stuck.py +0 -0
  867. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  868. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_terminal_command.py +0 -0
  869. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_author.py +0 -0
  870. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_chat.py +0 -0
  871. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_orchestrator.py +0 -0
  872. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_report.py +0 -0
  873. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_verdict_parsing.py +0 -0
  874. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_verdict_transcript_floor.py +0 -0
  875. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_text_io_encoding_audit.py +0 -0
  876. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_board_audit.py +0 -0
  877. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_config_load_1080.py +0 -0
  878. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_daemon_routing_906.py +0 -0
  879. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_throwaway_vm.py +0 -0
  880. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_tmux_host.py +0 -0
  881. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_tmux_session.py +0 -0
  882. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_transcript_floor.py +0 -0
  883. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_uat_checks.py +0 -0
  884. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage.py +0 -0
  885. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage_limits.py +0 -0
  886. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage_rollup.py +0 -0
  887. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_venv_live_install_2121.py +0 -0
  888. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_version_single_source.py +0 -0
  889. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_watch.py +0 -0
  890. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  891. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_env_venv_isolation.py +0 -0
  892. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_events.py +0 -0
  893. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_image_pin_sync.py +0 -0
  894. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_safety.py +0 -0
  895. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_test_scoping.py +0 -0
  896. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worktree.py +0 -0
  897. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  898. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_write_parity.py +0 -0
  899. {code_coordinator-0.5.495 → code_coordinator-0.5.497}/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.495
3
+ Version: 0.5.497
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.495
3
+ Version: 0.5.497
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
@@ -613,6 +613,7 @@ tests/test_drive_machine_fault.py
613
613
  tests/test_drive_queue.py
614
614
  tests/test_drive_queue_blocked_rendering.py
615
615
  tests/test_drive_queue_launch_argv.py
616
+ tests/test_drive_queue_max_parallel_config.py
616
617
  tests/test_drive_queue_max_parallel_per_repo_config.py
617
618
  tests/test_drive_queue_roll_pending.py
618
619
  tests/test_drive_queue_self_cordon_escalation.py
@@ -639,6 +639,7 @@
639
639
  "tests/test_drive_queue.py",
640
640
  "tests/test_drive_queue_blocked_rendering.py",
641
641
  "tests/test_drive_queue_launch_argv.py",
642
+ "tests/test_drive_queue_max_parallel_config.py",
642
643
  "tests/test_drive_queue_max_parallel_per_repo_config.py",
643
644
  "tests/test_drive_queue_roll_pending.py",
644
645
  "tests/test_drive_queue_self_cordon_escalation.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.497",
3
+ "distance": 0,
4
+ "node": "gd05a81b74292333679389936cf7cdb3edea6fd12",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-19"
8
+ }
@@ -35,7 +35,7 @@ import socket
35
35
  import subprocess
36
36
  import time
37
37
  from pathlib import Path
38
- from typing import TYPE_CHECKING, Any, Mapping
38
+ from typing import TYPE_CHECKING, Any, Mapping, Sequence
39
39
 
40
40
  import click
41
41
 
@@ -46,6 +46,7 @@ from coord.drive_queue import (
46
46
  APPLY_APPLIED,
47
47
  APPLY_FAILED,
48
48
  DEFAULT_MAX_ATTEMPTS,
49
+ DEFAULT_MAX_PARALLEL,
49
50
  DEFAULT_MAX_PARALLEL_PER_REPO,
50
51
  HOLD_FIRED,
51
52
  HOLD_RELEASED,
@@ -77,6 +78,7 @@ from coord.drive_queue import (
77
78
  add_preflight_notice,
78
79
  apply_gate_status,
79
80
  build_board_view,
81
+ default_max_parallel,
80
82
  detect_unreachable_waits,
81
83
  diagnose_blocked_after,
82
84
  effective_max_fix_rounds,
@@ -109,6 +111,7 @@ from coord.overlap_predict import (
109
111
  EVENT_SCORED,
110
112
  OUTCOME_UNKNOWN,
111
113
  SOURCE_DECLARED,
114
+ Overlap,
112
115
  Prediction,
113
116
  classify_outcome,
114
117
  collect_candidate_files,
@@ -116,6 +119,7 @@ from coord.overlap_predict import (
116
119
  fanout_warnings,
117
120
  inflight_footprints,
118
121
  malformed_files_warning,
122
+ overlap_would_run_before,
119
123
  parse_declared_files,
120
124
  predict_overlap,
121
125
  predictions_from_audit,
@@ -463,12 +467,38 @@ def drive_queue_add(
463
467
  malformed_note = ""
464
468
  auto_after: list[str] = []
465
469
  rejected_after: list[str] = []
470
+ # #3395 rule 2: overlaps against an already-queued, not-yet-dispatched
471
+ # entry that THIS add is positioning ahead of — the edge for those goes
472
+ # on the INCUMBENT (`entry --after this add`), applied further down once
473
+ # this add's own row exists, never on `after` above (that would chain
474
+ # this add behind an entry it is about to run in front of).
475
+ reverse_candidates: list[tuple[QueueEntry, Overlap]] = []
476
+ reverse_rejected: list[str] = []
466
477
  if not no_predict_overlap:
467
478
  prediction, staleness_note, malformed_note = _predict_overlap(
468
479
  config_path, repo, issue, existing_entries
469
480
  )
481
+ effective_position = _resolve_effective_new_position(position, previous)
482
+ forward_keys, all_reverse = _partition_overlap_after(
483
+ existing_entries,
484
+ effective_position,
485
+ prediction,
486
+ previous_position=previous.position if previous is not None else None,
487
+ )
488
+ # #2603's --reject-after is the same narrower escape hatch for a
489
+ # REVERSED edge too — it names the OTHER entry's key either way, so
490
+ # an operator does not need to know which direction rule 2 picked to
491
+ # veto it.
492
+ reverse_candidates = [
493
+ (entry, overlap) for entry, overlap in all_reverse
494
+ if entry.key not in reject_after
495
+ ]
496
+ reverse_rejected = [
497
+ entry.key for entry, _overlap in all_reverse if entry.key in reject_after
498
+ ]
470
499
  candidate_after = _applicable_auto_after(
471
- existing_entries, repo, issue, after, prediction
500
+ existing_entries, repo, issue, after, prediction,
501
+ candidate_keys=forward_keys,
472
502
  )
473
503
  # #2603: --reject-after is the narrower escape hatch — it drops only
474
504
  # the named edge(s) from what actually gets applied, never the whole
@@ -491,6 +521,18 @@ def drive_queue_add(
491
521
  no_acceptance=no_acceptance,
492
522
  plan_destructive=plan_destructive,
493
523
  )
524
+ # #3395: apply the REVERSED edges rule 2 selected — writing to the
525
+ # INCUMBENT entry's own row, now that this add's row exists to name as
526
+ # its `--after`. Must run after the write above: it names `entry_key
527
+ # (repo, issue)` as a pre-req, and while nothing here checks the row for
528
+ # existence, doing this first keeps the audit trail (both events land in
529
+ # enqueue order, not out of order relative to `queued ...`) intuitive to
530
+ # read back.
531
+ reverse_applied: list[tuple[QueueEntry, Overlap]] = []
532
+ if reverse_candidates:
533
+ reverse_applied = _apply_reversed_overlap_after(
534
+ existing_entries, entry_key(repo, issue), after, reverse_candidates,
535
+ )
494
536
  # #2839: queueing a drive is a strictly STRONGER statement than "send to
495
537
  # Pipeline" (`coord track`), so it must never leave the issue in a
496
538
  # weaker label state — apply the same `coord` + `status:ready` labels
@@ -540,13 +582,22 @@ def drive_queue_add(
540
582
  # --reject-after confirmation above: an author who wrote a declaration
541
583
  # that never took must not see output byte-identical to "declared
542
584
  # nothing".
585
+ # #3395: plus, for every REVERSED edge rule 2 applied, a line naming the
586
+ # INCUMBENT entry and why the direction is flipped from #2247's usual
587
+ # "ordered --after" reading — an unexplained edge on a row OTHER than
588
+ # the one this `add` named is exactly the kind of surprise an operator
589
+ # needs the reason for immediately, not by going and reading that row's
590
+ # own `last_reason` separately.
543
591
  overlap_notes: list[str] = []
544
592
  if auto_after:
545
593
  overlap_notes.append(prediction.reason)
546
594
  overlap_notes.extend(_declared_overlap_age_notes(prediction, auto_after))
547
- if rejected_after:
595
+ for entry, overlap in reverse_applied:
596
+ overlap_notes.append(_reverse_overlap_reason(entry_key(repo, issue), overlap))
597
+ all_rejected = [*rejected_after, *reverse_rejected]
598
+ if all_rejected:
548
599
  overlap_notes.append(
549
- "rejected via --reject-after (not applied): " + ", ".join(rejected_after)
600
+ "rejected via --reject-after (not applied): " + ", ".join(all_rejected)
550
601
  )
551
602
  overlap_notes.extend(fanout_warnings(prediction))
552
603
  if malformed_note:
@@ -923,6 +974,8 @@ def _applicable_auto_after(
923
974
  issue: int,
924
975
  after: list[str],
925
976
  prediction: Prediction,
977
+ *,
978
+ candidate_keys: Sequence[str] | None = None,
926
979
  ) -> list[str]:
927
980
  """The predicted pre-reqs that are actually safe to add.
928
981
 
@@ -931,9 +984,20 @@ def _applicable_auto_after(
931
984
  dropped if it would self-edge or close a cycle — the opposite posture to
932
985
  `validate_enqueue`'s treatment of an operator-declared `--after`, which is
933
986
  a typo worth reporting.
987
+
988
+ #3395: *candidate_keys* narrows which of `prediction.after_keys` this
989
+ call even considers — `None` (the default, unused by `drive_queue_add`'s
990
+ own call today but kept for a caller that wants pre-#3395 behaviour, or
991
+ a future direct test) keeps the pre-#3395 behaviour of trying all of
992
+ them. `drive_queue_add` passes the FORWARD subset only:
993
+ `_partition_overlap_after` has already routed the REVERSED ones (a
994
+ newcomer positioned ahead of an overlapping, not-yet-dispatched entry) to
995
+ `_apply_reversed_overlap_after` instead, and chaining this entry after
996
+ them TOO would apply rule 2's edge twice, in both directions.
934
997
  """
998
+ keys = prediction.after_keys if candidate_keys is None else tuple(candidate_keys)
935
999
  applied: list[str] = []
936
- for candidate_key in prediction.after_keys:
1000
+ for candidate_key in keys:
937
1001
  if candidate_key in after or candidate_key in applied:
938
1002
  continue
939
1003
  try:
@@ -946,6 +1010,226 @@ def _applicable_auto_after(
946
1010
  return applied
947
1011
 
948
1012
 
1013
+ def _resolve_effective_new_position(
1014
+ position: int | None, previous: QueueEntry | None,
1015
+ ) -> int | None:
1016
+ """#3395: the position this `add` actually leaves the entry at, for
1017
+ :func:`coord.overlap_predict.overlap_would_run_before` to compare against.
1018
+
1019
+ An explicit ``--position`` wins outright. Otherwise, re-adding an
1020
+ already-queued entry keeps its CURRENT position — `enqueue_drive_queue`
1021
+ never moves a row unless `position` is given — so that position is what
1022
+ the entry will actually run at. A brand-new entry with no `--position`
1023
+ appends at the tail (``None``, `overlap_would_run_before`'s own "never
1024
+ ahead of anything" case) — there is no meaningful position yet.
1025
+ """
1026
+ if position is not None:
1027
+ return position
1028
+ if previous is not None:
1029
+ return previous.position
1030
+ return None
1031
+
1032
+
1033
+ def _partition_overlap_after(
1034
+ existing_entries: list[QueueEntry],
1035
+ effective_position: int | None,
1036
+ prediction: Prediction,
1037
+ *,
1038
+ previous_position: int | None = None,
1039
+ ) -> tuple[list[str], list[tuple[QueueEntry, Overlap]]]:
1040
+ """#3395 rule 2: split predicted overlaps by which direction the
1041
+ ``--after`` edge belongs in.
1042
+
1043
+ FORWARD (returned as plain keys, same shape `_applicable_auto_after`
1044
+ always took) is correct whenever the other side either is already
1045
+ running (`[branch]` — it started before this `add` regardless of queue
1046
+ position) or is queued but will still dispatch no earlier than this
1047
+ newcomer. REVERSE (returned paired with the other side's own
1048
+ `QueueEntry`, since applying it means writing to THAT row, not this one)
1049
+ is the case the issue is about: a `[declared]` overlap against an entry
1050
+ that is still queued but is about to be pushed BEHIND this newcomer in
1051
+ dispatch order. Chaining the newcomer after it there would force the
1052
+ newcomer to run last despite the operator's own `--position`, while the
1053
+ incumbent — now scheduled first — would carry no edge stopping it from
1054
+ colliding with the newcomer's fresher files.
1055
+
1056
+ An overlap naming a key with no matching `QueueEntry` (the declared
1057
+ footprint disappeared between prediction and this call — a `remove` race,
1058
+ vanishingly rare) falls back to FORWARD: the safe, pre-#3395 default.
1059
+
1060
+ ``previous_position`` is the target's OWN position before this call —
1061
+ `None` for a brand-new entry, the row's current position when this
1062
+ `add` is REPOSITIONING an already-queued entry. Passed straight through
1063
+ to `overlap_would_run_before`, which needs it to account for
1064
+ `_move_drive_queue_entry_local`'s remove-then-reinsert shift: without
1065
+ it, the direction decision compares `other`'s stale pre-removal
1066
+ position and can pick the REVERSE edge when FORWARD is actually correct
1067
+ (or vice versa) — see that function's docstring for the full case
1068
+ analysis.
1069
+ """
1070
+ entries_by_key = {e.key: e for e in existing_entries}
1071
+ forward: list[str] = []
1072
+ reverse: list[tuple[QueueEntry, Overlap]] = []
1073
+ for overlap in prediction.overlaps:
1074
+ other = entries_by_key.get(overlap.key)
1075
+ if (
1076
+ overlap.source == SOURCE_DECLARED
1077
+ and other is not None
1078
+ and overlap_would_run_before(
1079
+ effective_position,
1080
+ other.position,
1081
+ previous_position=previous_position,
1082
+ )
1083
+ ):
1084
+ reverse.append((other, overlap))
1085
+ else:
1086
+ forward.append(overlap.key)
1087
+ return forward, reverse
1088
+
1089
+
1090
+ def _apply_reversed_overlap_after(
1091
+ existing_entries: list[QueueEntry],
1092
+ new_key: str,
1093
+ new_key_after: Sequence[str],
1094
+ reverse_candidates: list[tuple[QueueEntry, Overlap]],
1095
+ ) -> list[tuple[QueueEntry, Overlap]]:
1096
+ """#3395: apply the REVERSED edges `_partition_overlap_after` identified
1097
+ — chain each incumbent entry ``--after`` the newcomer, since the
1098
+ newcomer is the one that will actually dispatch first.
1099
+
1100
+ Same fail-safe posture as `_applicable_auto_after`: a would-be cycle is
1101
+ silently dropped rather than failing this `add` (an INFERRED edge must
1102
+ never be able to refuse an operator's own `--position`), and an edge that
1103
+ already exists on the incumbent is left alone (no redundant write).
1104
+ Every OTHER operator-declared field on the incumbent's row (`machine`,
1105
+ the hold gate, `max_fix_rounds`, ...) is carried through unchanged —
1106
+ `enqueue_drive_queue` fully replaces those columns on every call, so
1107
+ omitting one here would silently clear it off a row this `add` was never
1108
+ asked to touch.
1109
+
1110
+ ``new_key_after`` is the newcomer's OWN final ``--after`` list from this
1111
+ same `add` (operator-declared plus rule 1's forward auto-chains). The
1112
+ cycle check below builds its own edge graph rather than reusing
1113
+ `validate_enqueue` directly, because `existing_entries` is the pre-write
1114
+ snapshot: it never contains the newcomer's row (a brand-new entry) and,
1115
+ on a reposition, contains only its STALE pre-`add` edges — so a
1116
+ `validate_enqueue` call scoped to just the incumbent's candidate edge
1117
+ cannot see the newcomer's own outgoing edges and would miss a two-node
1118
+ cycle this single `add` invocation introduces (rule 1 chains the
1119
+ newcomer after an overlapping incumbent, rule 2 separately wants that
1120
+ same incumbent chained after the newcomer). Including `new_key_after` as
1121
+ the newcomer's node in the graph here closes that gap; the tick's own
1122
+ full-graph `find_cycle` would otherwise be the only thing to catch it,
1123
+ after the fact.
1124
+ """
1125
+ from coord.state import enqueue_drive_queue # noqa: PLC0415
1126
+
1127
+ applied: list[tuple[QueueEntry, Overlap]] = []
1128
+ base_edges: dict[str, list[str]] = {
1129
+ e.key: list(e.after) for e in existing_entries if e.key != new_key
1130
+ }
1131
+ base_edges[new_key] = [str(a) for a in new_key_after]
1132
+ for entry, overlap in reverse_candidates:
1133
+ if new_key in entry.after:
1134
+ applied.append((entry, overlap))
1135
+ continue
1136
+ new_after = [*entry.after, new_key]
1137
+ trial_edges = dict(base_edges)
1138
+ trial_edges[entry.key] = new_after
1139
+ if find_cycle(trial_edges) is not None:
1140
+ continue
1141
+ enqueue_drive_queue(
1142
+ entry.repo,
1143
+ entry.issue,
1144
+ machine=entry.machine or None,
1145
+ after=new_after,
1146
+ position=None,
1147
+ hold_after=entry.hold_after,
1148
+ hold_reason=entry.hold_reason,
1149
+ resume_when=entry.resume_when,
1150
+ hold_scope=entry.hold_scope,
1151
+ max_fix_rounds=entry.max_fix_rounds,
1152
+ no_acceptance=entry.no_acceptance,
1153
+ plan_destructive=entry.plan_destructive,
1154
+ )
1155
+ applied.append((entry, overlap))
1156
+ _record_reverse_overlap_prediction(entry.repo, entry.issue, new_key, overlap)
1157
+ return applied
1158
+
1159
+
1160
+ def _reverse_overlap_reason(new_key: str, overlap: Overlap) -> str:
1161
+ """#3395: the one sentence shared by `add`'s stdout, the audit summary,
1162
+ and the INCUMBENT's own `last_reason` for a REVERSED edge — so all three
1163
+ surfaces agree on why a row this `add` never named got a new `after=`.
1164
+ """
1165
+ return (
1166
+ "predicted file overlap (#2247) — ordered "
1167
+ + overlap.describe_reversed(new_key)
1168
+ + " (#3395: this add was positioned ahead of an existing queued entry)"
1169
+ )
1170
+
1171
+
1172
+ def _record_reverse_overlap_prediction(
1173
+ repo: str, issue: int, new_key: str, overlap: Overlap,
1174
+ ) -> None:
1175
+ """#3395: the audit + `last_reason` twin of `_record_overlap_prediction`
1176
+ for a REVERSED edge — recorded against *repo*/*issue*, the INCUMBENT
1177
+ entry that actually got the new `after=` write, not the entry `add` was
1178
+ called for. Mirrors `_record_overlap_prediction`'s two sinks (a durable
1179
+ audit row, plus the `last_reason` column an operator reading `coord
1180
+ drive-queue list` sees immediately) for the same reason: a `last_reason`
1181
+ the next tick attempt will overwrite is not durable, so the claim also
1182
+ needs a permanent home to be scored later.
1183
+
1184
+ Kept as its own event rather than reusing `Prediction.audit_details()`
1185
+ verbatim: that payload's `after` list and `predicted_files` are framed
1186
+ from the CANDIDATE's point of view (`_predict_overlap` computed them
1187
+ that way), and reusing it here unedited would misrepresent whose files
1188
+ were actually being ordered against whose.
1189
+ """
1190
+ reason = _reverse_overlap_reason(new_key, overlap)
1191
+ details = {
1192
+ "predicted_files": list(overlap.files),
1193
+ "overlaps": [
1194
+ {
1195
+ "key": new_key,
1196
+ "source": overlap.source,
1197
+ "branch": overlap.branch,
1198
+ "head_sha": overlap.head_sha,
1199
+ "synced_at": overlap.synced_at,
1200
+ "liveness_checked": overlap.liveness_checked,
1201
+ "files": list(overlap.files),
1202
+ }
1203
+ ],
1204
+ "after": [new_key],
1205
+ # #3395: the one field with no forward-edge equivalent — lets a later
1206
+ # reader (a human, `overlap-report`) tell this row's `after=` was
1207
+ # rule 2's reversal, not an ordinary same-direction prediction.
1208
+ "reversed": True,
1209
+ }
1210
+ try:
1211
+ from coord.audit import record_audit # noqa: PLC0415
1212
+
1213
+ record_audit(
1214
+ tier="business",
1215
+ category=AUDIT_CATEGORY,
1216
+ event_type=EVENT_PREDICTED,
1217
+ actor="drive-queue",
1218
+ summary=reason,
1219
+ repo=repo,
1220
+ issue=issue,
1221
+ details=details,
1222
+ )
1223
+ except Exception: # noqa: BLE001 — recording must never fail the enqueue
1224
+ pass
1225
+ try:
1226
+ from coord.state import update_drive_queue_entry # noqa: PLC0415
1227
+
1228
+ update_drive_queue_entry(repo, issue, last_reason=reason)
1229
+ except Exception: # noqa: BLE001 — same
1230
+ pass
1231
+
1232
+
949
1233
  def _record_overlap_prediction(
950
1234
  repo: str, issue: int, prediction: Prediction, applied: list[str],
951
1235
  ) -> None:
@@ -5248,12 +5532,25 @@ def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str)
5248
5532
  @click.option(
5249
5533
  "--max-parallel",
5250
5534
  type=int,
5251
- default=1,
5252
- show_default=True,
5535
+ default=None,
5253
5536
  help=(
5254
- "Concurrency ceiling. Capacity is counted from BOARD state, not from a "
5255
- "session count, so a drive whose observer hit its deadline (#1660) "
5256
- "still occupies a slot."
5537
+ "Global concurrency ceiling. Capacity is counted from BOARD state, "
5538
+ "not from a session count, so a drive whose observer hit its "
5539
+ "deadline (#1660) still occupies a slot. Omit this flag to use "
5540
+ "pipeline.max_parallel from coordinator.yml (or, absent that, a "
5541
+ "derivation from the fleet's own shape — repo count times the "
5542
+ "resolved --max-parallel-per-repo, clamped to "
5543
+ "concurrency.max_workers, see coord.drive_queue."
5544
+ "default_max_parallel; falling back further, if the config itself "
5545
+ f"can't be read, to {DEFAULT_MAX_PARALLEL}, #3388) — passing it "
5546
+ "explicitly always wins over both. #3388: a hardcoded constant here "
5547
+ "(coord-drive-queue.service used to pin --max-parallel 4) silently "
5548
+ "starves every repo but the first couple once "
5549
+ "--max-parallel-per-repo can exceed 1 — prefer the config setting "
5550
+ "over a systemd drop-in for the same reason #2573 gives for "
5551
+ "--max-parallel-per-repo: a drop-in has to restate the packaged "
5552
+ "unit's whole ExecStart= to change just this flag, and that copy "
5553
+ "silently drifts from the packaged unit's other flags over time."
5257
5554
  ),
5258
5555
  )
5259
5556
  @click.option(
@@ -5301,7 +5598,7 @@ def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str)
5301
5598
  )
5302
5599
  @_CONFIG_OPTION
5303
5600
  def drive_queue_tick(
5304
- max_parallel: int,
5601
+ max_parallel: int | None,
5305
5602
  max_parallel_per_repo: int | None,
5306
5603
  dry_run: bool,
5307
5604
  reconcile_only: bool,
@@ -5338,6 +5635,20 @@ def drive_queue_tick(
5338
5635
  reverted #2314's pinned-venv `ExecStart=` right back to a
5339
5636
  worker-overwritable path as an unnoticed side effect).
5340
5637
 
5638
+ #3388: `--max-parallel` resolves the SAME way, one level up — the flag on
5639
+ THIS invocation, when given; else `pipeline.max_parallel` from
5640
+ `coordinator.yml`; else `coord.drive_queue.default_max_parallel`'s
5641
+ derivation from the fleet's own shape (repo count times the
5642
+ ALREADY-RESOLVED `--max-parallel-per-repo` above, clamped to
5643
+ `concurrency.max_workers`); else, only if the config itself could not be
5644
+ read at all, `coord.drive_queue.DEFAULT_MAX_PARALLEL` (1). A hardcoded
5645
+ `--max-parallel` on the deployed systemd unit is exactly the failure mode
5646
+ this closes: #2012 set it to the repo count when `--max-parallel-per-repo`
5647
+ always defaulted to 1, #2057 raised it once by hand for a fifth repo, and
5648
+ neither update survived #2573 letting the per-repo ceiling exceed 1 — two
5649
+ repos alone then reach a stale global ceiling and starve every other repo
5650
+ in the fleet, forever, however deep their own queues are.
5651
+
5341
5652
  `--max-parallel 0` (or `--reconcile-only`, the readable spelling of the
5342
5653
  same thing — #2110) reconciles every `running` entry against the board and
5343
5654
  then stops: no capacity walk, no deferrals, no queue-level alert, no
@@ -5369,24 +5680,37 @@ def drive_queue_tick(
5369
5680
  from coord.filelock import FileLock, LockBusy, drive_queue_lock_path # noqa: PLC0415
5370
5681
  from coord.state import list_drive_queue, update_drive_queue_entry # noqa: PLC0415
5371
5682
 
5372
- if max_parallel < 0:
5373
- raise click.ClickException(
5374
- "--max-parallel must be at least 0 (0 = reconcile-only, launch "
5375
- "nothing this run — see --reconcile-only)"
5376
- )
5683
+ # Loaded at most once, shared by both ceilings' config-default resolution
5684
+ # below (#3388's `max_parallel` derivation needs the same config
5685
+ # `max_parallel_per_repo` already reads, plus `repos`/`concurrency`) —
5686
+ # `None` on the documented fail-open path, same posture as every other
5687
+ # best-effort config read on this path (an unreadable config must never
5688
+ # abort the tick).
5689
+ _resolved_config: Config | None = None
5690
+ _config_load_attempted = False
5691
+
5692
+ def _config_for_defaults() -> Config | None:
5693
+ nonlocal _resolved_config, _config_load_attempted
5694
+ if not _config_load_attempted:
5695
+ _config_load_attempted = True
5696
+ try:
5697
+ from coord.commands._common import _load_config # noqa: PLC0415
5698
+
5699
+ _resolved_config = _load_config(config_path)
5700
+ except Exception: # noqa: BLE001 — an unreadable config must not abort the tick
5701
+ _resolved_config = None
5702
+ return _resolved_config
5377
5703
 
5378
5704
  # #2573: an explicit `--max-parallel-per-repo` always wins; otherwise
5379
5705
  # fall back to the fleet-wide `pipeline.max_parallel_per_repo` in
5380
5706
  # coordinator.yml, and only then to the hardcoded default. Resolved
5381
- # BEFORE validation below so a bad value from either source is caught
5382
- # the same way regardless of which one supplied it.
5707
+ # BEFORE `--max-parallel` (#3388's derivation multiplies BY this
5708
+ # already-resolved value) and before validation below, so a bad value
5709
+ # from either source is caught the same way regardless of which one
5710
+ # supplied it.
5383
5711
  if max_parallel_per_repo is None:
5384
- try:
5385
- from coord.commands._common import _load_config # noqa: PLC0415
5386
-
5387
- config_default = _load_config(config_path).pipeline.max_parallel_per_repo
5388
- except Exception: # noqa: BLE001 — an unreadable config must not abort the tick
5389
- config_default = None
5712
+ _cfg = _config_for_defaults()
5713
+ config_default = None if _cfg is None else _cfg.pipeline.max_parallel_per_repo
5390
5714
  max_parallel_per_repo = (
5391
5715
  DEFAULT_MAX_PARALLEL_PER_REPO if config_default is None else config_default
5392
5716
  )
@@ -5396,6 +5720,35 @@ def drive_queue_tick(
5396
5720
  "--max-parallel-per-repo must be 0 (no per-repo ceiling) or more"
5397
5721
  )
5398
5722
 
5723
+ # #3388: an explicit `--max-parallel` always wins; otherwise
5724
+ # `pipeline.max_parallel` from coordinator.yml; otherwise derive it from
5725
+ # the fleet's own shape (repo count * the per-repo ceiling just resolved
5726
+ # above, clamped to the fleet's real worker capacity) rather than fall
5727
+ # back to a hand-maintained constant that goes stale the moment either
5728
+ # side changes — see `coord.drive_queue.default_max_parallel`. Only when
5729
+ # the config itself could not be read at all (so neither the fleet
5730
+ # default nor the fleet shape is known) does this fall back to the
5731
+ # hardcoded `DEFAULT_MAX_PARALLEL`.
5732
+ if max_parallel is None:
5733
+ _cfg = _config_for_defaults()
5734
+ config_max_parallel = None if _cfg is None else _cfg.pipeline.max_parallel
5735
+ if config_max_parallel is not None:
5736
+ max_parallel = config_max_parallel
5737
+ elif _cfg is not None:
5738
+ max_parallel = default_max_parallel(
5739
+ repo_count=len(_cfg.repos),
5740
+ max_parallel_per_repo=max_parallel_per_repo,
5741
+ max_workers_cap=_cfg.concurrency.max_workers,
5742
+ )
5743
+ else:
5744
+ max_parallel = DEFAULT_MAX_PARALLEL
5745
+
5746
+ if max_parallel < 0:
5747
+ raise click.ClickException(
5748
+ "--max-parallel must be at least 0 (0 = reconcile-only, launch "
5749
+ "nothing this run — see --reconcile-only)"
5750
+ )
5751
+
5399
5752
  # #2110: `--reconcile-only` and `--max-parallel 0` are the same request —
5400
5753
  # one flag is a mnemonic for the other rather than a second code path, so
5401
5754
  # there is exactly one way this behaves, not two that could drift apart.
@@ -1232,6 +1232,21 @@ class PipelineConfig:
1232
1232
  :data:`_DEFAULT_STALL_THRESHOLDS` for the shape and the evidence behind
1233
1233
  its two seeded entries, and :meth:`stall_threshold_secs` for how a type
1234
1234
  absent from the table falls back to the drive's flat ``--stall`` value.
1235
+
1236
+ ``max_parallel`` (#3388) is the fleet-wide default for ``coord
1237
+ drive-queue tick``'s GLOBAL concurrency ceiling (``--max-parallel``) —
1238
+ the sibling of ``max_parallel_per_repo`` above, added for the same
1239
+ reason: a systemd unit's hardcoded ``--max-parallel 4`` encoded a fact
1240
+ about the fleet (repo count times per-repo ceiling) that nobody revisited
1241
+ when either side changed, and two repos alone starved the other twelve
1242
+ once ``max_parallel_per_repo`` could exceed 1 (#2012, #2057, #2573).
1243
+ ``None`` (the default) leaves the ceiling at
1244
+ ``coord.drive_queue.default_max_parallel``'s derivation — ``repo_count *
1245
+ max_parallel_per_repo``, clamped to ``concurrency.max_workers`` — rather
1246
+ than a hand-maintained constant. An explicit ``coord drive-queue tick
1247
+ --max-parallel N`` on the command line always wins over this, exactly
1248
+ mirroring ``max_parallel_per_repo``'s own resolution order — see
1249
+ ``coord.commands.drive_queue.drive_queue_tick``.
1235
1250
  """
1236
1251
 
1237
1252
  default_gates: list[str] = field(default_factory=lambda: ["test", "review", "merge"])
@@ -1267,6 +1282,9 @@ class PipelineConfig:
1267
1282
  stall_thresholds: dict[str, float] = field(
1268
1283
  default_factory=lambda: dict(_DEFAULT_STALL_THRESHOLDS)
1269
1284
  )
1285
+ # #3388 — None means "derive from the fleet shape", see
1286
+ # coord.drive_queue.default_max_parallel. See the class docstring.
1287
+ max_parallel: int | None = None
1270
1288
 
1271
1289
  def attention_threshold_for(
1272
1290
  self,
@@ -3641,6 +3659,17 @@ def _parse_pipeline(raw: Any) -> PipelineConfig:
3641
3659
  )
3642
3660
  cfg.max_parallel_per_repo = value
3643
3661
 
3662
+ if "max_parallel" in raw:
3663
+ value = raw["max_parallel"]
3664
+ if value is not None and (
3665
+ not isinstance(value, int) or isinstance(value, bool) or value < 0
3666
+ ):
3667
+ raise ConfigError(
3668
+ "pipeline.max_parallel must be a non-negative integer or "
3669
+ "null (0 = reconcile-only, launch nothing)"
3670
+ )
3671
+ cfg.max_parallel = value
3672
+
3644
3673
  if "stall_thresholds" in raw:
3645
3674
  value = raw["stall_thresholds"]
3646
3675
  if not isinstance(value, dict):