code-coordinator 0.5.507__tar.gz → 0.5.509__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 (905) hide show
  1. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/CLAUDE.md +37 -61
  2. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/SOURCES.txt +1 -0
  5. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/scm_file_list.json +1 -0
  6. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agent.py +134 -18
  8. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/drive_queue.py +38 -10
  9. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/setup.py +38 -4
  10. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/config.py +24 -0
  11. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/drive_queue.py +210 -35
  12. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/models.py +26 -0
  13. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/providers/claude.py +18 -20
  14. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coordinator.example.yml +22 -0
  15. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ARCHITECTURE.md +15 -0
  16. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/DRIVE_QUEUE.md +49 -0
  17. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/OPERATOR_GUIDES.md +23 -0
  18. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent.py +123 -3
  19. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_claude_md_budget.py +9 -5
  20. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_providers.py +104 -0
  21. code_coordinator-0.5.509/tests/test_repo_max_parallel_3423.py +637 -0
  22. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.github/workflows/test.yml +0 -0
  34. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/.gitignore +0 -0
  35. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/GOAL.md +0 -0
  36. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/LICENSE +0 -0
  37. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/MANIFEST.in +0 -0
  38. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/README.md +0 -0
  39. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/dependency_links.txt +0 -0
  40. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/entry_points.txt +0 -0
  41. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/requires.txt +0 -0
  42. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/code_coordinator.egg-info/top_level.txt +0 -0
  43. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/__init__.py +0 -0
  44. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/_board_mapping.py +0 -0
  45. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/acceptance.py +0 -0
  46. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/acceptance_drivers.py +0 -0
  47. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/backup.py +0 -0
  56. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/ci_fix.py +0 -0
  65. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/ci_github.py +0 -0
  66. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/ci_gitlab.py +0 -0
  67. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/claude_setup_token.py +0 -0
  70. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/client.py +0 -0
  72. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/codegen.py +0 -0
  73. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/__init__.py +0 -0
  74. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/_common.py +0 -0
  75. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/acceptance.py +0 -0
  76. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/agent_ops.py +0 -0
  77. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/audit.py +0 -0
  78. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/backup.py +0 -0
  79. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/ci.py +0 -0
  81. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/codegen.py +0 -0
  82. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/dispatch.py +0 -0
  83. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/dispatch_workers.py +0 -0
  84. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/dr.py +0 -0
  85. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/drive.py +0 -0
  86. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/gate_a.py +0 -0
  87. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/gates.py +0 -0
  88. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/issues.py +0 -0
  89. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/lifecycle.py +0 -0
  90. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/machine.py +0 -0
  91. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/merge.py +0 -0
  92. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/milestone.py +0 -0
  93. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/plan_followup.py +0 -0
  94. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/plans.py +0 -0
  95. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/portal.py +0 -0
  96. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/pr.py +0 -0
  97. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/release.py +0 -0
  98. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/repo.py +0 -0
  99. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/report.py +0 -0
  100. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/review.py +0 -0
  101. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/scorecard.py +0 -0
  102. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/sessions.py +0 -0
  103. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/status.py +0 -0
  104. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/store_migrate.py +0 -0
  105. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/test_gate.py +0 -0
  107. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/commands/tui.py +0 -0
  108. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/comments.py +0 -0
  109. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/config_reload.py +0 -0
  110. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/confirm_test.py +0 -0
  111. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/conflict_fix.py +0 -0
  112. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dao.py +0 -0
  113. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dashboard/__init__.py +0 -0
  114. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dashboard/fixture.py +0 -0
  115. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dashboard/index.html +0 -0
  116. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dashboard/server.py +0 -0
  117. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dashboard/terminal.py +0 -0
  118. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/db.py +0 -0
  119. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dead_end.py +0 -0
  120. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/decomposition_chat.py +0 -0
  121. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/README.md +0 -0
  122. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-agent.service +0 -0
  123. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-backup.service +0 -0
  124. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-backup.timer +0 -0
  125. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-db-backup.service +0 -0
  126. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-db-backup.sh +0 -0
  127. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-db-backup.timer +0 -0
  128. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-dr-verify.service +0 -0
  129. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-dr-verify.timer +0 -0
  130. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-drive-queue.service +0 -0
  131. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-drive-queue.timer +0 -0
  132. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-failure-notify.service +0 -0
  133. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-fleet-watchdog.service +0 -0
  134. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  135. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-notify.service +0 -0
  136. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-notify.timer +0 -0
  137. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-release-propagate.service +0 -0
  138. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-release-propagate.timer +0 -0
  139. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-release-window.service +0 -0
  140. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-release-window.timer +0 -0
  141. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-serve.service +0 -0
  142. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-web-dist-build.service +0 -0
  143. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-web-dist-build.timer +0 -0
  144. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy/coord-web.service +0 -0
  145. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy_manifest.py +0 -0
  146. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deploy_units.py +0 -0
  147. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deprecation_telemetry.py +0 -0
  148. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/deps.py +0 -0
  149. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/diagnose.py +0 -0
  150. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dispatch.py +0 -0
  151. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dispatch_liveness.py +0 -0
  152. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dist_name.py +0 -0
  153. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dr_promote.py +0 -0
  154. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/dr_verify.py +0 -0
  155. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/drive.py +0 -0
  156. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/drive_state.py +0 -0
  157. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/events.py +0 -0
  158. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/failure_class.py +0 -0
  159. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/failure_classifier.py +0 -0
  160. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/filelock.py +0 -0
  161. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/fleet_config_health.py +0 -0
  162. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/forge_availability.py +0 -0
  163. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/freshness.py +0 -0
  164. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/gate_a.py +0 -0
  165. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/gate_b.py +0 -0
  166. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/gate_snapshot.py +0 -0
  167. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/gates.py +0 -0
  168. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/gen_board_fixture.py +0 -0
  169. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/github_ops.py +0 -0
  170. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/github_throttle.py +0 -0
  171. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/goal.py +0 -0
  172. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/graph_health.py +0 -0
  173. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/__init__.py +0 -0
  174. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/aggregate.py +0 -0
  175. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/__init__.py +0 -0
  176. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/_ci_pin.py +0 -0
  177. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/agent_install.py +0 -0
  178. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/cargo_targets.py +0 -0
  179. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/claude_binary.py +0 -0
  180. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/config_drift.py +0 -0
  181. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  182. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/coord_web_ci_pin.py +0 -0
  183. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/deploy_lane_facts.py +0 -0
  184. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/disk.py +0 -0
  185. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/fleet_board.py +0 -0
  186. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  187. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/fleet_phantom.py +0 -0
  188. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/fleet_unit_drift.py +0 -0
  189. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/graph.py +0 -0
  190. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/graphify_cli.py +0 -0
  191. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/index_lock.py +0 -0
  192. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/issues_sync_staleness.py +0 -0
  193. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/plan_usage.py +0 -0
  194. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/pr_churn.py +0 -0
  195. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/release_cordon.py +0 -0
  196. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/repo_state.py +0 -0
  197. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/spawned_coord.py +0 -0
  198. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/stalled_pipeline.py +0 -0
  199. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/timer_active.py +0 -0
  200. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/toolchain.py +0 -0
  201. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/unit_drift.py +0 -0
  202. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/unit_enablement.py +0 -0
  203. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/wedged_drive_queue.py +0 -0
  204. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/checks/worktrees.py +0 -0
  205. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/cli.py +0 -0
  206. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/context.py +0 -0
  207. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/fleet_snapshot.py +0 -0
  208. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/models.py +0 -0
  209. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/pypi.py +0 -0
  210. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/registry.py +0 -0
  211. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/render.py +0 -0
  212. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/health/units.py +0 -0
  213. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/hooks.py +0 -0
  214. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/housekeeping.py +0 -0
  215. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/interactive.py +0 -0
  216. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/invariant_alarms.py +0 -0
  217. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/issue_store.py +0 -0
  218. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/issues_sync_status.py +0 -0
  219. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/liveness_auditor.py +0 -0
  220. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/machine_fault.py +0 -0
  221. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/machine_metrics.py +0 -0
  222. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/machine_onboard.py +0 -0
  223. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/machine_pause.py +0 -0
  224. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/machine_stats.py +0 -0
  225. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/merge_queue.py +0 -0
  226. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/milestone_chat.py +0 -0
  227. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/milestone_dispatch.py +0 -0
  228. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/milestone_gate.py +0 -0
  229. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/milestone_order.py +0 -0
  230. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/mock_author.py +0 -0
  231. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/network.py +0 -0
  232. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/new_issue_chat.py +0 -0
  233. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/__init__.py +0 -0
  234. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/baseline.py +0 -0
  235. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/cli.py +0 -0
  236. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/collect.py +0 -0
  237. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/digest.py +0 -0
  238. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/models.py +0 -0
  239. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/predicate.py +0 -0
  240. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/service.py +0 -0
  241. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/store.py +0 -0
  242. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notifier/transport.py +0 -0
  243. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/notify.py +0 -0
  244. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/openapi.py +0 -0
  245. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/overlap_fence.py +0 -0
  246. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/overlap_predict.py +0 -0
  247. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/parentage.py +0 -0
  248. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/parentage_github.py +0 -0
  249. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/pipeline.py +0 -0
  250. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/plan_parser.py +0 -0
  251. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/plans.py +0 -0
  252. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/platform_paths.py +0 -0
  253. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/portal_bridge.py +0 -0
  254. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/portal_store.py +0 -0
  255. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/portal_sync.py +0 -0
  256. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/pr_body_lint.py +0 -0
  257. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/prereqs.py +0 -0
  258. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/progress.py +0 -0
  259. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/providers/__init__.py +0 -0
  260. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/providers/base.py +0 -0
  261. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/providers/claude_pty.py +0 -0
  262. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/providers/opencode.py +0 -0
  263. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/queue_diagnose.py +0 -0
  264. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/reconcile.py +0 -0
  265. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/reconcile_tick.py +0 -0
  266. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/refine_chat.py +0 -0
  267. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/release_cordon.py +0 -0
  268. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/release_propagate.py +0 -0
  269. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/release_verify.py +0 -0
  270. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/release_window.py +0 -0
  271. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/repo_dormancy.py +0 -0
  272. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/repo_edit.py +0 -0
  273. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/repo_onboard.py +0 -0
  274. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/reports.py +0 -0
  275. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/rest_schema.py +0 -0
  276. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/restart_cmd.py +0 -0
  277. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/revalidate.py +0 -0
  278. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/review.py +0 -0
  279. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/serve_app.py +0 -0
  282. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  283. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  284. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  285. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/portal-followup/SKILL.md +0 -0
  288. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/release-now/SKILL.md +0 -0
  289. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  290. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  291. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/skills/update-issue/SKILL.md +0 -0
  292. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/smoke.py +0 -0
  293. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/spend_ceiling.py +0 -0
  294. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/split_work.py +0 -0
  295. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/sql.py +0 -0
  296. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/stage_projection.py +0 -0
  297. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/state.py +0 -0
  298. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/store_migrate.py +0 -0
  299. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/store_parity.py +0 -0
  300. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/templates/deploy-cloudflare.node.yml +0 -0
  301. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/test_author.py +0 -0
  302. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/test_chat.py +0 -0
  303. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/test_orchestrator.py +0 -0
  304. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/test_report.py +0 -0
  305. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/tui_release.py +0 -0
  306. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/uat_checks.py +0 -0
  307. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/usage.py +0 -0
  308. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/usage_limits.py +0 -0
  309. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/usage_rollup.py +0 -0
  310. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/coord/worker_events.py +0 -0
  311. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-agent.service +0 -0
  312. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-backup.service +0 -0
  313. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-backup.timer +0 -0
  314. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-db-backup.service +0 -0
  315. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-db-backup.sh +0 -0
  316. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-db-backup.timer +0 -0
  317. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-dr-verify.service +0 -0
  318. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-dr-verify.timer +0 -0
  319. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-drive-queue.service +0 -0
  320. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-drive-queue.timer +0 -0
  321. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-failure-notify.service +0 -0
  322. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-failure-notify.sh +0 -0
  323. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-fleet-watchdog.service +0 -0
  324. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-fleet-watchdog.timer +0 -0
  325. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-notify.service +0 -0
  326. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-notify.timer +0 -0
  327. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-release-propagate.service +0 -0
  328. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-release-propagate.timer +0 -0
  329. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-release-window.service +0 -0
  330. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-release-window.timer +0 -0
  331. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-serve.service +0 -0
  332. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-web-dist-build.service +0 -0
  333. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-web-dist-build.sh +0 -0
  334. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-web-dist-build.timer +0 -0
  335. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-web-rollback.sh +0 -0
  336. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/coord-web.service +0 -0
  337. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/deploy/node-shim.sh +0 -0
  338. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ADR_COORD_TUI_CI.md +0 -0
  339. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  340. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ADR_COORD_WEB_CI.md +0 -0
  341. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ADR_COORD_WEB_DIST.md +0 -0
  342. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  343. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/AGENT_OPERATIONS.md +0 -0
  344. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ARCH_SECURITY_GATES.md +0 -0
  345. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/COCKPIT.md +0 -0
  346. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/CONTROL_CENTER.md +0 -0
  347. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/COST_DISCIPLINE.md +0 -0
  348. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/CROSS_PLATFORM.md +0 -0
  349. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/CUSTOMER_FACING_APPS.md +0 -0
  350. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/CUSTOMER_PORTAL.md +0 -0
  351. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/DATA_STORE_SELECTION.md +0 -0
  352. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/DISASTER_RECOVERY.md +0 -0
  353. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/EPHEMERAL_WORKERS.md +0 -0
  354. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/FORGE_MIGRATION.md +0 -0
  355. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/GRAPHIFY_SETUP.md +0 -0
  356. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ISSUE_GUIDANCE.md +0 -0
  357. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/MAC_MINI.md +0 -0
  358. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  359. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/NOTIFIER.md +0 -0
  360. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/OPENCODE_VERIFICATION.md +0 -0
  361. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/OPERATING_GOTCHAS.md +0 -0
  362. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/ORACLE_LOOP.md +0 -0
  363. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/PHONE_WEBAPP.md +0 -0
  364. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/PIPELINE_V2.md +0 -0
  365. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/PLATFORM_EVOLUTION.md +0 -0
  366. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/SECOND_BACKEND.md +0 -0
  367. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/STORE_SERVICE.md +0 -0
  368. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  369. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/WEB_CONTROL_CENTER.md +0 -0
  370. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/WSL_WINDOWS_WORKER.md +0 -0
  371. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/mocks/web/README.md +0 -0
  372. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/mocks/web/_tokens.css +0 -0
  373. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/mocks/web/issue-detail.html +0 -0
  374. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/mocks/web/pipeline-narrow.html +0 -0
  375. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/docs/mocks/web/pipeline-wide.html +0 -0
  376. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/graphify-out/.gitignore +0 -0
  377. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/install-agent.sh +0 -0
  378. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/pyproject.toml +0 -0
  379. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/audit_review_verdict_overrides.py +0 -0
  380. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  381. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/build-worker-image.sh +0 -0
  382. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/coordinator-machine.py +0 -0
  383. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/dr-down.sh +0 -0
  384. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/dr-up.sh +0 -0
  385. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/epic-down.sh +0 -0
  386. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/epic-up.sh +0 -0
  387. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/preflight.sh +0 -0
  388. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/provision-server.sh +0 -0
  389. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/provision-worker.sh +0 -0
  390. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  391. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  392. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/throwaway-vm.sh +0 -0
  393. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/azure-workers/verify-github-token.sh +0 -0
  394. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/check_gh_argv_containment.py +0 -0
  395. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/codegen.py +0 -0
  396. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-test-runner.sh +0 -0
  397. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  398. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  399. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  400. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  401. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/coord-venv-rollback.sh +0 -0
  402. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/drive-batch.sh +0 -0
  403. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/extract-coord-tui.sh +0 -0
  404. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/fleet_watchdog.py +0 -0
  405. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/gen_board_fixture.py +0 -0
  406. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/gen_mock_index.py +0 -0
  407. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/lib/provision-core.sh +0 -0
  408. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/next_release_tag.py +0 -0
  409. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/provision-machine.sh +0 -0
  410. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/run_tests_in_populated_home.sh +0 -0
  411. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/run_tests_without_gh.sh +0 -0
  412. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/setup-macmini.sh +0 -0
  413. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/smoke_437_interactive.py +0 -0
  414. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/verify-provision-noble.sh +0 -0
  415. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/verify_878_review_capture.py +0 -0
  416. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/verify_release_published.py +0 -0
  417. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/scripts/verify_release_wheel.py +0 -0
  418. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/setup.cfg +0 -0
  419. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/SMOKE_SET.md +0 -0
  420. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/__init__.py +0 -0
  421. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-37/conftest.py +0 -0
  422. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-37/contract.md +0 -0
  423. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-37/manifest.yml +0 -0
  424. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  425. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  426. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/contract.md +0 -0
  427. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  428. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  429. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/manifest.yml +0 -0
  430. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  431. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-51/tsconfig.json +0 -0
  432. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/backends.py +0 -0
  434. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/conftest.py +0 -0
  435. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/board-pipeline-basic.json +0 -0
  436. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  437. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  438. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  439. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  440. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/all_pass.json +0 -0
  441. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  442. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/mixed_fail.json +0 -0
  443. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  444. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  445. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/skip.json +0 -0
  446. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/playwright/truncated.json +0 -0
  447. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  448. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  449. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  450. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  451. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  452. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  453. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  454. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  455. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_acceptance.py +0 -0
  456. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_acceptance_drivers.py +0 -0
  457. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_api_error.py +0 -0
  458. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_app.py +0 -0
  459. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_branch_base.py +0 -0
  460. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_branch_capture.py +0 -0
  461. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_config_free_1712.py +0 -0
  462. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_deploy_units_endpoint.py +0 -0
  463. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_dirty_worktree.py +0 -0
  464. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  465. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_graph_self_heal.py +0 -0
  466. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_health_h3.py +0 -0
  467. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_idle_restart.py +0 -0
  468. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_push_failure.py +0 -0
  469. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_reap.py +0 -0
  470. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_repos_and_pull.py +0 -0
  471. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_restart_services_endpoint.py +0 -0
  472. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_skills_self_heal.py +0 -0
  473. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_startup_diagnostics.py +0 -0
  474. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_update.py +0 -0
  475. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_update_bluegreen.py +0 -0
  476. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_usage_limit.py +0 -0
  477. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_agent_zero_commit.py +0 -0
  478. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ambient_home_isolation.py +0 -0
  479. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approve_capability_reroute_3241.py +0 -0
  480. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approve_dependency_busy_2804.py +0 -0
  481. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approve_reject_plan.py +0 -0
  482. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approve_usage_gate.py +0 -0
  483. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approved_work_2532.py +0 -0
  484. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_approved_work_2996.py +0 -0
  485. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_assignment_already_recorded_daemon.py +0 -0
  486. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_audit_log.py +0 -0
  487. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_audit_outcome.py +0 -0
  488. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_audit_query.py +0 -0
  489. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_auto_loop.py +0 -0
  490. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_auto_release_publish_2035.py +0 -0
  491. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_backend_selection.py +0 -0
  492. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_backup.py +0 -0
  493. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_base_checkout_restore.py +0 -0
  494. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_block_log.py +0 -0
  495. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_schema.py +0 -0
  499. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_board_wire.py +0 -0
  502. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_brain.py +0 -0
  503. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_branch_model.py +0 -0
  504. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_bug_intake.py +0 -0
  505. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_build_worker_image_env_update.py +0 -0
  506. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cargo_cache.py +0 -0
  507. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_check_gh_argv_containment.py +0 -0
  508. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_acceptance_gate_1950.py +0 -0
  509. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_fix.py +0 -0
  510. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_github.py +0 -0
  511. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_gitlab.py +0 -0
  512. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_parity_2091.py +0 -0
  513. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_ci_store.py +0 -0
  514. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_claim.py +0 -0
  515. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_claude_setup_token.py +0 -0
  516. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_acceptance.py +0 -0
  517. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_assign.py +0 -0
  518. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  519. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_assign_interactive_remote.py +0 -0
  520. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_assign_provider.py +0 -0
  521. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  522. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_audit.py +0 -0
  523. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_chat_continue.py +0 -0
  524. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_ci.py +0 -0
  525. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_codegen.py +0 -0
  526. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_decide.py +0 -0
  527. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_capability_rules.py +0 -0
  528. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_config_provenance.py +0 -0
  529. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_forge_availability.py +0 -0
  530. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_graph.py +0 -0
  531. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_self.py +0 -0
  532. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_diagnose_test_coverage.py +0 -0
  533. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_doctor.py +0 -0
  534. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_doctor_config_free_1801.py +0 -0
  535. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  536. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  537. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_fix_headless_review.py +0 -0
  541. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_gate_a.py +0 -0
  542. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_install_drift.py +0 -0
  543. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_install_skills.py +0 -0
  544. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_issue_comment.py +0 -0
  545. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_issue_create_label.py +0 -0
  546. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_issue_reopen.py +0 -0
  547. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_issue_view_list.py +0 -0
  548. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_pr.py +0 -0
  563. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_pull_artifact.py +0 -0
  564. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_queue.py +0 -0
  565. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_reattach_sessions.py +0 -0
  566. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_refine_board.py +0 -0
  567. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_release_preflight.py +0 -0
  568. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_release_propagate.py +0 -0
  569. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_release_window.py +0 -0
  570. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_repo_2220.py +0 -0
  571. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  572. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_scorecard.py +0 -0
  573. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_serve_store_backend_3084.py +0 -0
  574. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_set_review_findings.py +0 -0
  575. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_advisory_terminal.py +0 -0
  576. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_contested_tag.py +0 -0
  577. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_invariant_alarms.py +0 -0
  578. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_machine_fault.py +0 -0
  579. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_merge_queue.py +0 -0
  580. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_provider.py +0 -0
  581. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_retried_3340.py +0 -0
  582. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_review_finalizing.py +0 -0
  583. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_supervisor_3366.py +0 -0
  584. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_test_failed_tag.py +0 -0
  585. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_status_usage_limit.py +0 -0
  586. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_sync_comments_873.py +0 -0
  587. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_test_plan.py +0 -0
  588. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_track.py +0 -0
  589. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_tui_update.py +0 -0
  590. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cli_wait.py +0 -0
  591. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_client.py +0 -0
  592. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_client_base_install.py +0 -0
  593. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_client_config_cache_atomic_3052.py +0 -0
  594. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_client_resource_migration_1946.py +0 -0
  595. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_commands_common.py +0 -0
  596. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_comments.py +0 -0
  597. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_completion_summary.py +0 -0
  598. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config.py +0 -0
  599. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_acceptance.py +0 -0
  600. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_audit.py +0 -0
  601. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_drift_check.py +0 -0
  602. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_effective.py +0 -0
  603. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_pricing.py +0 -0
  604. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  605. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_config_usage_gate.py +0 -0
  606. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_confirm_test.py +0 -0
  607. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_conflict_fix.py +0 -0
  608. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_conflict_fix_semantic.py +0 -0
  609. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  610. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test.py +0 -0
  611. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  612. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test_runner_baseline.py +0 -0
  613. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test_runner_populated_home.py +0 -0
  614. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test_runner_routing.py +0 -0
  615. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_test_runner_toolchain.py +0 -0
  616. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_uat.py +0 -0
  617. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coord_web_sse_restart_live.py +0 -0
  618. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_coordinator_machine.py +0 -0
  619. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_cross_platform_imports.py +0 -0
  620. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dao.py +0 -0
  621. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard.py +0 -0
  622. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard_api.py +0 -0
  623. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard_fixture.py +0 -0
  624. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard_server.py +0 -0
  625. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard_terminal.py +0 -0
  626. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dashboard_terminal_live.py +0 -0
  627. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_db.py +0 -0
  628. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dead_end.py +0 -0
  629. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_decomposition_chat.py +0 -0
  630. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_coord_db_backup.py +0 -0
  631. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_coord_web_dist.py +0 -0
  632. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_coord_web_rollback.py +0 -0
  633. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_db_backup_unit.py +0 -0
  634. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_drive_queue_unit.py +0 -0
  635. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_failure_notify_unit.py +0 -0
  636. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_manifest.py +0 -0
  637. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_notify_unit.py +0 -0
  638. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_units_lane.py +0 -0
  639. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deploy_web_unit.py +0 -0
  640. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deprecation_telemetry.py +0 -0
  641. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_deps.py +0 -0
  642. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_diagnose.py +0 -0
  643. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dispatch.py +0 -0
  644. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dispatch_liveness.py +0 -0
  645. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dispatch_target_validation.py +0 -0
  646. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dispatch_workers.py +0 -0
  647. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dist_name.py +0 -0
  648. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_done_housekeeping.py +0 -0
  649. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dr_azure_scripts.py +0 -0
  650. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dr_promote.py +0 -0
  651. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_dr_verify.py +0 -0
  652. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive.py +0 -0
  653. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_machine_fault.py +0 -0
  654. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue.py +0 -0
  655. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_blocked_rendering.py +0 -0
  656. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_launch_argv.py +0 -0
  657. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_max_parallel_config.py +0 -0
  658. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  659. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_roll_pending.py +0 -0
  660. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  661. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_state.py +0 -0
  662. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_drive_tmux.py +0 -0
  663. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_epic_up_capability_detection.py +0 -0
  664. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  665. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_epic_up_image_provenance.py +0 -0
  666. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_errors.py +0 -0
  667. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_events.py +0 -0
  668. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_failure_class.py +0 -0
  669. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_failure_classifier.py +0 -0
  670. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_filelock.py +0 -0
  671. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  672. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fix_escalation_classifier.py +0 -0
  673. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fix_of_force_override.py +0 -0
  674. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fleet_config_health.py +0 -0
  675. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fleet_health_probes.py +0 -0
  676. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fleet_health_snapshot.py +0 -0
  677. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_fleet_watchdog.py +0 -0
  678. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_forge_availability.py +0 -0
  679. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_freshness.py +0 -0
  680. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gate_a.py +0 -0
  681. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gate_b.py +0 -0
  682. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gate_snapshot_staleness.py +0 -0
  683. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gates.py +0 -0
  684. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  685. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_gen_mock_index.py +0 -0
  686. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_generated_rust_fixture.py +0 -0
  687. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_generated_rust_requests.py +0 -0
  688. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_generated_types_fixture.py +0 -0
  689. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_github_ops.py +0 -0
  690. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_github_throttle.py +0 -0
  691. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_goal.py +0 -0
  692. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_graph_health.py +0 -0
  693. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_graph_selfheal_absent_2237.py +0 -0
  694. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_handoff.py +0 -0
  695. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_checks.py +0 -0
  696. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_cli.py +0 -0
  697. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_cli_graph.py +0 -0
  698. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_config.py +0 -0
  699. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_context.py +0 -0
  700. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_coord_tui_ci_pin.py +0 -0
  701. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_coord_web_ci_pin.py +0 -0
  702. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_deploy_lane_facts.py +0 -0
  703. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_fix.py +0 -0
  704. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_incident_regression.py +0 -0
  705. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_issues_sync_staleness.py +0 -0
  706. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_pr_churn.py +0 -0
  707. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_pypi.py +0 -0
  708. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_registry.py +0 -0
  709. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_release_cordon_probe.py +0 -0
  710. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_timer_active.py +0 -0
  711. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_toolchain.py +0 -0
  712. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_unit_drift.py +0 -0
  713. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_unit_enablement.py +0 -0
  714. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_health_wedged_drive_queue.py +0 -0
  715. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_hooks.py +0 -0
  716. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_housekeeping.py +0 -0
  717. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_human_attended_437.py +0 -0
  718. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_init.py +0 -0
  719. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_install_agent_venv_2911.py +0 -0
  720. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_integration.py +0 -0
  721. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_briefing_echo.py +0 -0
  722. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_pane_log_2541.py +0 -0
  723. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_prefill_state.py +0 -0
  724. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_session_relaunch.py +0 -0
  725. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_test_verdict_backstop.py +0 -0
  726. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_token_attribution.py +0 -0
  727. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_interactive_worktree.py +0 -0
  728. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_invariant_alarms.py +0 -0
  729. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_issue_store_seam.py +0 -0
  730. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_issues_sync_status.py +0 -0
  731. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_liveness_auditor.py +0 -0
  732. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_liveness_notify.py +0 -0
  733. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_lock_contention_ratchet.py +0 -0
  734. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_machine_fault.py +0 -0
  735. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_machine_metrics.py +0 -0
  736. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_machine_onboard.py +0 -0
  737. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_machine_pause.py +0 -0
  738. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_machine_stats.py +0 -0
  739. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_merge_queue.py +0 -0
  740. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_merge_verify.py +0 -0
  741. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_milestone_chat.py +0 -0
  742. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_milestone_dispatch.py +0 -0
  743. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_milestone_gate.py +0 -0
  744. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_milestone_order.py +0 -0
  745. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_milestone_seam.py +0 -0
  746. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_mock_author.py +0 -0
  747. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_model_tiering.py +0 -0
  748. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_models.py +0 -0
  749. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_models_config_labels.py +0 -0
  750. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_needs_attention.py +0 -0
  751. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_network.py +0 -0
  752. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_new_issue_chat.py +0 -0
  753. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_next_release_tag.py +0 -0
  754. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_node_shim.py +0 -0
  755. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_baseline.py +0 -0
  756. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_cli.py +0 -0
  757. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_collect.py +0 -0
  758. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_config.py +0 -0
  759. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_drive_seam.py +0 -0
  760. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_isolation.py +0 -0
  761. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_predicate.py +0 -0
  762. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_quiet_hours.py +0 -0
  763. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notifier_service.py +0 -0
  764. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notify.py +0 -0
  765. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_notify_drain.py +0 -0
  766. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_openapi.py +0 -0
  767. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_operational_defaults.py +0 -0
  768. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_overlap_fence.py +0 -0
  769. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_overlap_predict.py +0 -0
  770. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_packaged_deploy_units.py +0 -0
  771. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_parentage.py +0 -0
  772. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_paste_landed.py +0 -0
  773. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  774. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_pipeline.py +0 -0
  775. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_plan_followup_approve_plan_command.py +0 -0
  776. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_plan_followup_pr_command.py +0 -0
  777. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_plan_followup_review_command.py +0 -0
  778. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_plan_only.py +0 -0
  779. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_plan_parser.py +0 -0
  780. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_platform_paths.py +0 -0
  781. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_portal_bridge.py +0 -0
  782. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_portal_config.py +0 -0
  783. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_portal_store.py +0 -0
  784. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_portal_sync.py +0 -0
  785. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_pr_body_lint.py +0 -0
  786. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_prereqs.py +0 -0
  787. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_production_db_guard.py +0 -0
  788. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_progress.py +0 -0
  789. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_provider_seam.py +0 -0
  790. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_providers_config_labels.py +0 -0
  791. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_providers_pty.py +0 -0
  792. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_provision_core.py +0 -0
  793. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_provision_machine.py +0 -0
  794. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_py_rust_mirror_inventory.py +0 -0
  795. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_quiet_hours.py +0 -0
  796. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_quiet_hours_store_2146.py +0 -0
  797. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reap_merged_sessions.py +0 -0
  798. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reap_stale_interactive_tick.py +0 -0
  799. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile.py +0 -0
  800. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_branch.py +0 -0
  801. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_completions.py +0 -0
  802. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  803. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_merges.py +0 -0
  804. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_no_agent_record.py +0 -0
  805. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_tick.py +0 -0
  806. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reconcile_usage_limit_done.py +0 -0
  807. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_refine_chat.py +0 -0
  808. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_cordon_2101.py +0 -0
  809. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  810. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_cordon_deadlock_2240.py +0 -0
  811. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  812. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_cordon_stuck_2490.py +0 -0
  813. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_propagate.py +0 -0
  814. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_propagate_threshold.py +0 -0
  815. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_roll_between_legs_2854.py +0 -0
  816. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_roll_window_handoff.py +0 -0
  817. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_unified_1242.py +0 -0
  818. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_verify.py +0 -0
  819. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_release_window.py +0 -0
  820. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_remote_auto_prune.py +0 -0
  821. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_remote_interactive_reaper.py +0 -0
  822. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_repo_add.py +0 -0
  823. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_repo_dormancy.py +0 -0
  824. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_repo_edit_2220.py +0 -0
  825. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_repo_graph_fleet_2237.py +0 -0
  826. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_repo_onboard_2220.py +0 -0
  827. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_report_result_push.py +0 -0
  828. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_reports.py +0 -0
  829. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_restart_cmd.py +0 -0
  830. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_retry.py +0 -0
  831. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_retry_advisory_1606.py +0 -0
  832. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_retry_escalation_classify_3360.py +0 -0
  833. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_retry_type_1636.py +0 -0
  834. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_revalidate.py +0 -0
  835. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review.py +0 -0
  836. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_end_review_without_verdict.py +0 -0
  837. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_parse_failure_diagnostic.py +0 -0
  838. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_reaffirm.py +0 -0
  839. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_state.py +0 -0
  840. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_verdict_backstop.py +0 -0
  841. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_verdict_override_audit.py +0 -0
  842. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_verdict_relay.py +0 -0
  843. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_review_zero_commits.py +0 -0
  844. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_scoped_review_wiring.py +0 -0
  845. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_scorecard.py +0 -0
  846. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_self_health.py +0 -0
  847. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_serve.py +0 -0
  848. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_serve_app.py +0 -0
  849. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_serve_app_board_trim.py +0 -0
  850. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_serve_rest_routes.py +0 -0
  851. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_session.py +0 -0
  852. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_slice_issue_attribution.py +0 -0
  853. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_smoke.py +0 -0
  854. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  855. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_smoke_live_checkout_restore.py +0 -0
  856. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_smoke_workflow.py +0 -0
  857. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_spend_ceiling.py +0 -0
  858. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_spend_ceiling_coordinator.py +0 -0
  859. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_split.py +0 -0
  860. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_split_work.py +0 -0
  861. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_sql_dialect.py +0 -0
  862. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_sqlite_connect_ratchet.py +0 -0
  863. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stage_projection.py +0 -0
  864. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stale_busy_reviewer_697.py +0 -0
  865. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stalled_pipeline.py +0 -0
  866. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_state.py +0 -0
  867. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_state_review_findings_daemon.py +0 -0
  868. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_status_fleet_footer.py +0 -0
  869. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stop_1567.py +0 -0
  870. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_store_contract.py +0 -0
  871. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_store_migrate.py +0 -0
  872. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stuck.py +0 -0
  873. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  874. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_terminal_command.py +0 -0
  875. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_author.py +0 -0
  876. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_chat.py +0 -0
  877. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_orchestrator.py +0 -0
  878. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_report.py +0 -0
  879. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_verdict_parsing.py +0 -0
  880. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_test_verdict_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_text_io_encoding_audit.py +0 -0
  882. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_thin_client_board_audit.py +0 -0
  883. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_thin_client_config_load_1080.py +0 -0
  884. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_thin_client_daemon_routing_906.py +0 -0
  885. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_throwaway_vm.py +0 -0
  886. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_tmux_host.py +0 -0
  887. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_tmux_session.py +0 -0
  888. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_transcript_floor.py +0 -0
  889. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_uat_checks.py +0 -0
  890. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_usage.py +0 -0
  891. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_usage_limits.py +0 -0
  892. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_usage_rollup.py +0 -0
  893. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_venv_live_install_2121.py +0 -0
  894. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_version_single_source.py +0 -0
  895. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_watch.py +0 -0
  896. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  897. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worker_env_venv_isolation.py +0 -0
  898. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worker_events.py +0 -0
  899. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worker_image_pin_sync.py +0 -0
  900. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worker_safety.py +0 -0
  901. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worker_test_scoping.py +0 -0
  902. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worktree.py +0 -0
  903. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  904. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/test_write_parity.py +0 -0
  905. {code_coordinator-0.5.507 → code_coordinator-0.5.509}/tests/write_parity.py +0 -0
@@ -2,20 +2,21 @@
2
2
 
3
3
  CLI tool + per-machine agent server that coordinates Claude Code workers across multiple machines and repos over Tailscale.
4
4
 
5
- > **Scope of this file (#2195).** This is the **worker- and reviewer-facing** rulebook: it is
6
- > loaded into every worker leg, every review leg, and every coordinator session — and re-read on
7
- > every turn of each — so it holds only what someone *editing this repo* must act on. Operator
8
- > runbooks live in [`docs/`](docs/), indexed by
9
- > [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md). Settled design rationale lives in
10
- > [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
11
- > Keep it that way: **if a new rule does not change what a worker does, it belongs in `docs/`.**
12
- > Operator sessions — the "dispatch, don't do" rule now lives in
13
- > [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md); read it before hand-editing any tracked
14
- > repo. If you're a worker or reviewer leg, that one isn't for you.
15
-
16
- ## Current Goal — read first
17
-
18
- **[`GOAL.md`](GOAL.md) holds the current north-star objective** — the living, cross-repo / cross-machine goal that should bias all planning, triage, and dispatch. It is meta-level (above any single issue, repo, or session) and changes as priorities evolve: read it first, plan against it, and keep it current. `coordinator.yml` is the source of truth for *topology*; `GOAL.md` is the source of truth for *intent*.
5
+ > **Scope of this file (#2195, #2817).** This is the **worker- and reviewer-facing**
6
+ > rulebook: it is loaded into every worker leg, every review leg and every coordinator
7
+ > session — and re-read on **every turn** of each, so every byte here is a recurring
8
+ > fleet-wide cost. It holds only what someone *editing this repo* must act on.
9
+ > **If a new rule does not change what a worker does, it belongs in [`docs/`](docs/).**
10
+ > `tests/test_claude_md_budget.py` enforces that with a byte cap — move a section out
11
+ > rather than raise it.
12
+ >
13
+ > Not here: operator runbooks ([`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md)) ·
14
+ > settled design rationale
15
+ > ([`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale)) ·
16
+ > the `coord` command reference (`coord <cmd> --help`) · operator cost rules and
17
+ > "dispatch, don't do" ([`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md)) ·
18
+ > the current north-star objective ([`GOAL.md`](GOAL.md) — read it in a coordinator
19
+ > session when planning or triaging; a worker or reviewer leg does not need it).
19
20
 
20
21
  ## Codebase navigation — query the graph first
21
22
 
@@ -64,22 +65,11 @@ Query the **graphify graph** (`graphify-out/`) for the full module map + relatio
64
65
 
65
66
  ## Commands
66
67
 
67
- `coord <cmd> --help` documents every command + flags. The core loop:
68
-
69
- ```bash
70
- coord plan # Brain proposes assignments for idle machines
71
- coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
72
- coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
73
- coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
74
- coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
75
- coord notify # Poll agents, post completion/failure comments to GitHub
76
- coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
77
- coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
78
- coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
79
- coord retry|stop|resume <id> # Recovery; `coord done` ends the session
80
- ```
81
-
82
- Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier`, `coord repo add` / `coord repo doctor`.
68
+ `coord <cmd> --help` documents every command and flag — that is the reference, not this
69
+ file. The operator-facing core loop (`plan`/`approve`/`assign`/`status`/`merge`/...) is in
70
+ [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md#the-core-loop). The one `coord` command
71
+ a **worker** runs is `coord acceptance run --issue N`, in an oracle-loop round (see Testing
72
+ below).
83
73
 
84
74
  ## Development
85
75
 
@@ -133,34 +123,22 @@ computes the routing without actually building or testing anything.
133
123
 
134
124
  ## Key Design Decisions
135
125
 
136
- One line each — the reasoning behind them is in
137
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
138
-
139
- - **No API key needed.** Everything uses `claude -p`, which runs on a Max/Pro subscription via OAuth.
140
- - **Agent servers are dumb dispatchers.** They spawn `claude -p` and track the subprocess; all intelligence is in the coordinator brain.
141
- - **GitHub issue comments are the message bus.** Briefings, completion notices and failure reports are comments, carrying `<!-- coord:... -->` markers for machine parsing.
142
- - **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
143
- - **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
144
- - **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
145
- - **Conflict rules are inferred, not configured.** There is no `file_groups`/`exclusive_files` config and never will be. `coord drive-queue add` compares an issue's own `## Files` declaration against the **real diffs** of in-flight branches in that repo (`coord/overlap_predict.py`, #2247) and, on an overlap, chains the newcomer `--after` the incumbent. **It ORDERS, never refuses** — a false positive costs latency, a refusal costs work. Accuracy is measured, not assumed: `coord drive-queue overlap-report`.
146
- - **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
147
- - **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
148
- - **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
149
- - **Mechanical merge conflicts auto-rebase (#241).** A `type="conflict-fix"` worker rebases and resolves additive merges; semantic conflicts are left for a human.
150
- - **Smoke tests validate on capable hardware.** `smoke_tests.capability_rules` map changed files to required machine capabilities (e.g. GTK changes → a machine with GTK).
151
- - **Progress streaming from workers.** Workers emit `STATUS:` and `STUCK:` lines; the coordinator parses these for real-time progress in `coord status` and the dashboard.
152
- - **The notifier tells you when NOBODY IS COMING — and nothing else (#1632).** Advisory, isolated, off by default; it is not an error channel and not a progress feed.
153
-
154
- ## Review Prompt Assembly
155
-
156
- The reviewer gets a prompt built from:
157
- 1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
158
- 2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
159
- 3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
160
- 4. **The diff** — `gh pr diff` of the worker's branch vs base
161
- 5. **The issue** — title and body for intent verification
162
-
163
- The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
126
+ These are the ones a **diff** can violate. The full set, with the reasoning behind each, is
127
+ in [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
128
+
129
+ - **`coordinator.yml` is the single source of truth** for repo topology, machine
130
+ capabilities, dependencies, concurrency limits, review settings, smoke-test rules and the
131
+ pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo
132
+ checkout.
133
+ - **Conflict rules are inferred, not configured.** There is no `file_groups` /
134
+ `exclusive_files` config and never will be — `coord drive-queue add` compares an issue's
135
+ own `## Files` declaration against the **real diffs** of in-flight branches
136
+ (`coord/overlap_predict.py`, #2247). **It ORDERS, never refuses.** Do not add such config.
137
+ - **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the
138
+ headless auto-loop holds review dispatch until there is a `passed`/`skipped` verdict.
139
+ - **Adversarial reviews are rule-enforcing, not rubber-stamping.** A fresh `claude -p`
140
+ session on a *different* machine reviews your diff against this file, with **zero shared
141
+ context with you** — so your diff and final message must stand on their own.
164
142
 
165
143
  ## Rules for workers
166
144
 
@@ -212,7 +190,5 @@ versus keep in the coordinator session, and the coordinator session's own
212
190
 
213
191
  ## Operating the fleet — operator-facing
214
192
 
215
- **Not needed to work on this repo.** A worker or reviewer can stop reading here. Every operator
216
- runbook — the pre-flight gotchas, agent installs and releases, the drive queue, the customer
217
- portal, and the two deploy facts that bite most often — is indexed in
193
+ **Not needed to work on this repo.** Every operator runbook is indexed in
218
194
  [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.507
3
+ Version: 0.5.509
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.507
3
+ Version: 0.5.509
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
@@ -788,6 +788,7 @@ tests/test_repo_add.py
788
788
  tests/test_repo_dormancy.py
789
789
  tests/test_repo_edit_2220.py
790
790
  tests/test_repo_graph_fleet_2237.py
791
+ tests/test_repo_max_parallel_3423.py
791
792
  tests/test_repo_onboard_2220.py
792
793
  tests/test_report_result_push.py
793
794
  tests/test_reports.py
@@ -814,6 +814,7 @@
814
814
  "tests/test_repo_dormancy.py",
815
815
  "tests/test_repo_edit_2220.py",
816
816
  "tests/test_repo_graph_fleet_2237.py",
817
+ "tests/test_repo_max_parallel_3423.py",
817
818
  "tests/test_repo_onboard_2220.py",
818
819
  "tests/test_report_result_push.py",
819
820
  "tests/test_reports.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.507",
2
+ "tag": "0.5.509",
3
3
  "distance": 0,
4
- "node": "g77eaf6af7d9e29387584dbfe661ea201eb62e524",
4
+ "node": "gace3f38afa44e85a17064892c36412cab13d0d34",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-20"
@@ -5062,6 +5062,136 @@ def _claude_md_system_prompt_suffix(repo_path: str) -> str:
5062
5062
  return "\n\n## Project rules (from CLAUDE.md)\n\n" + claude_md.strip() + "\n"
5063
5063
 
5064
5064
 
5065
+ # #3420: every `claude -p` leg loads the full JSON schema for all built-in
5066
+ # tools regardless of `--allowedTools`, which is a *permission* filter, not a
5067
+ # tool-surface one — a leg with `Read,Bash` in `--allowedTools` still pays
5068
+ # the prompt-token cost of the `Workflow`/`Skill`/etc. schemas it can never
5069
+ # call. Measured with controlled `claude -p` probes on this repo's own
5070
+ # `default_worker_command` flags (Claude Code 2.1.278, `type="work"`): the
5071
+ # schemas for these tools cost 12,134 tokens/turn (44% of the static
5072
+ # prefix), re-read at cache-read rates on every turn of every leg. None of
5073
+ # them has a legitimate use from a headless coord leg:
5074
+ # - `Workflow`: requires explicit user opt-in; a headless leg has no user.
5075
+ # - `Skill`: all `coord` skills are operator-only runbooks.
5076
+ # - `ScheduleWakeup`: every leg is one-shot (WORKER_SYSTEM_PROMPT's
5077
+ # ONE-SHOT section, #1394) — there is no future turn to wake up into.
5078
+ # - `Task`: CLAUDE.md mandates `graphify query` + grep for navigation
5079
+ # instead of spawning a subagent.
5080
+ # - `ReportFindings`, `ListAgents`: unreferenced by any coord system
5081
+ # prompt; no fleet-messaging or review-findings-reporting surface is
5082
+ # exposed to a leg.
5083
+ # - The remainder (`Cron*`, `DesignSync`, `EnterWorktree`/`ExitWorktree`,
5084
+ # `NotebookEdit`, `PushNotification`, `RemoteTrigger`, `SendMessage`):
5085
+ # operator/coordinator-session tools with no worker-leg counterpart —
5086
+ # already deferred behind `ToolSearch` so each costs only ~6-9 tokens,
5087
+ # but included for a consistent, minimal tool surface.
5088
+ #
5089
+ # Deliberately EXCLUDED, despite being equally unusable:
5090
+ # - `Monitor`: 0 marginal token cost, and WORKER_SYSTEM_PROMPT's ONE-SHOT
5091
+ # polling guidance depends on it (it's the sanctioned way to await a
5092
+ # backgrounded command in bounded steps).
5093
+ # - `ToolSearch`: cheap on its own, and removing it is untested — it's the
5094
+ # mechanism that resolves every deferred tool name at all.
5095
+ # - `TaskOutput`/`TaskStop`: look like `Task`'s output/cancel pair at
5096
+ # first glance, but WORKER_SYSTEM_PROMPT's ONE-SHOT section and
5097
+ # coord/smoke.py's SMOKE_SYSTEM_PROMPT both explicitly teach
5098
+ # `TaskOutput` as the bounded-poll alternative to `Monitor` for a
5099
+ # backgrounded Bash command (`run_in_background`) — disallowing it
5100
+ # would make that documented guidance a dead end. `TaskStop` is kept
5101
+ # alongside it since it's the same background-job-management pair.
5102
+ # - `WebFetch`/`WebSearch`: ~6 tokens each either way (negligible), and a
5103
+ # worker may legitimately need to look up library docs or an error
5104
+ # message mid-task — kept allowed rather than trading real capability
5105
+ # for a rounding error in prompt size.
5106
+ UNUSABLE_TOOL_SCHEMAS: list[str] = [
5107
+ "Workflow",
5108
+ "Skill",
5109
+ "ScheduleWakeup",
5110
+ "Task",
5111
+ "ReportFindings",
5112
+ "ListAgents",
5113
+ "CronCreate",
5114
+ "CronDelete",
5115
+ "CronList",
5116
+ "DesignSync",
5117
+ "EnterWorktree",
5118
+ "ExitWorktree",
5119
+ "NotebookEdit",
5120
+ "PushNotification",
5121
+ "RemoteTrigger",
5122
+ "SendMessage",
5123
+ ]
5124
+
5125
+
5126
+ def worker_disallowed_tools(spec: AssignmentSpec, allowed_tools: str) -> list[str]:
5127
+ """Return the ordered ``--disallowedTools`` entries for *spec*.
5128
+
5129
+ **Single source of truth.** Both argv builders that emit
5130
+ ``--disallowedTools`` — :func:`default_worker_command` and
5131
+ :meth:`coord.providers.claude.ClaudeProvider.build_command` — call
5132
+ this, rather than each reimplementing the same four-layer stack. The
5133
+ two previously transcribed the logic independently, which is exactly
5134
+ how #3420's ``UNUSABLE_TOOL_SCHEMAS`` layer landed in one and not the
5135
+ other; the parity suite in ``tests/test_providers.py`` caught it, but
5136
+ a shared function makes the divergence unrepresentable instead of
5137
+ merely detectable.
5138
+
5139
+ Layers, in argv order (each skips entries an earlier layer already
5140
+ added, so the result is de-duplicated but order-stable):
5141
+
5142
+ 1. #3420 ``UNUSABLE_TOOL_SCHEMAS`` — unconditional, every spec type.
5143
+ 2. #1315 sealed-oracle write guard, from ``spec.files_forbidden``.
5144
+ 3. #1642 base-checkout write guard — only when *allowed_tools*
5145
+ actually grants ``Edit``; for the Read/Bash-only chat types the
5146
+ guard would be a no-op cluttering the argv.
5147
+ 4. #2461 ``REVIEW_DENY_COMMANDS`` — only for ``spec.type ==
5148
+ "review"``, wiring the mutating-command deny list into the
5149
+ CLI-enforced flag and not just the soft prompt reminder.
5150
+
5151
+ Args:
5152
+ spec: The assignment being dispatched.
5153
+ allowed_tools: The ``--allowedTools`` value computed for this
5154
+ spec — inspected for ``Edit`` to decide layer 3. Passing the
5155
+ caller's own computed value (rather than re-deriving it here)
5156
+ keeps the two flags consistent even when a caller overrides
5157
+ ``--allowedTools`` explicitly, as ``build_command`` allows.
5158
+
5159
+ Returns:
5160
+ A fresh list; callers may mutate it. Empty only in the
5161
+ impossible case where every layer contributes nothing — since
5162
+ #3420, layer 1 is unconditional, so in practice this is always
5163
+ non-empty and ``--disallowedTools`` is always emitted.
5164
+ """
5165
+ # #3420: strip the unusable-tool schemas from every spec type, including
5166
+ # the Read/Bash-only chat legs (plan, refinement, test-chat,
5167
+ # new-issue-chat, smoke, review) — they carry the same
5168
+ # Workflow/Skill/Task/etc. schemas as a work leg and benefit identically.
5169
+ # This is FIRST so the guards below, which each append to this same
5170
+ # list, keep working unchanged.
5171
+ disallowed_tools = list(UNUSABLE_TOOL_SCHEMAS)
5172
+ # #1315: structural sealing enforcement — see _sealed_write_guard_tools.
5173
+ for pattern in _sealed_write_guard_tools(spec.files_forbidden):
5174
+ if pattern not in disallowed_tools:
5175
+ disallowed_tools.append(pattern)
5176
+ # #1642: block Edit/Write on the shared base checkout for any spec.type
5177
+ # that actually gets Edit/Write in --allowedTools — the Read/Bash-only
5178
+ # chat types can't touch files regardless, and adding the guard there
5179
+ # would be a no-op cluttering their argv for nothing.
5180
+ if "Edit" in allowed_tools:
5181
+ for pattern in _base_checkout_write_guard_tools(spec.repo_path):
5182
+ if pattern not in disallowed_tools:
5183
+ disallowed_tools.append(pattern)
5184
+ # #2461: review gets its mutating-command deny list wired into
5185
+ # --disallowedTools too, not just the soft system-prompt reminder from
5186
+ # build_deny_prompt — the CLI enforces this one even if the model
5187
+ # decides to ignore its own prompt.
5188
+ if spec.type == "review":
5189
+ for pattern in REVIEW_DENY_COMMANDS:
5190
+ if pattern not in disallowed_tools:
5191
+ disallowed_tools.append(pattern)
5192
+ return disallowed_tools
5193
+
5194
+
5065
5195
  def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER_BINARY) -> list[str]:
5066
5196
  """Build the argv for invoking the worker on this assignment.
5067
5197
 
@@ -5347,24 +5477,10 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
5347
5477
  ]
5348
5478
  if spec.model:
5349
5479
  argv.extend(["--model", spec.model])
5350
- # #1315: structural sealing enforcement — see _sealed_write_guard_tools.
5351
- disallowed_tools = _sealed_write_guard_tools(spec.files_forbidden)
5352
- # #1642: block Edit/Write on the shared base checkout for any spec.type
5353
- # that actually gets Edit/Write in --allowedTools — the Read/Bash-only
5354
- # chat types above can't touch files regardless, and adding the guard
5355
- # there would be a no-op cluttering their argv for nothing.
5356
- if "Edit" in allowed_tools:
5357
- for pattern in _base_checkout_write_guard_tools(spec.repo_path):
5358
- if pattern not in disallowed_tools:
5359
- disallowed_tools.append(pattern)
5360
- # #2461: review gets its mutating-command deny list wired into
5361
- # --disallowedTools too, not just the soft system-prompt reminder from
5362
- # build_deny_prompt above — the CLI enforces this one even if the model
5363
- # decides to ignore its own prompt.
5364
- if spec.type == "review":
5365
- for pattern in REVIEW_DENY_COMMANDS:
5366
- if pattern not in disallowed_tools:
5367
- disallowed_tools.append(pattern)
5480
+ # #3420 / #1315 / #1642 / #2461: all four --disallowedTools layers live
5481
+ # in worker_disallowed_tools, shared with ClaudeProvider.build_command so
5482
+ # the two argv builders cannot drift apart (see that function's docstring).
5483
+ disallowed_tools = worker_disallowed_tools(spec, allowed_tools)
5368
5484
  if disallowed_tools:
5369
5485
  argv.extend(["--disallowedTools", ",".join(disallowed_tools)])
5370
5486
  # #315: when resuming a prior chat session, load the prior conversation so
@@ -101,8 +101,10 @@ from coord.drive_queue import (
101
101
  plan_tick,
102
102
  remaining_fix_rounds,
103
103
  render_plan,
104
+ effective_repo_capacities,
104
105
  resolve_max_parallel,
105
106
  resolve_max_parallel_per_repo,
107
+ resolve_repo_ceilings,
106
108
  total_fix_round_budget,
107
109
  unreachable_wait_alert,
108
110
  validate_apply_gate,
@@ -6226,25 +6228,45 @@ def drive_queue_tick(
6226
6228
  _config_max_parallel_per_repo = (
6227
6229
  None if _cfg is None else _cfg.pipeline.max_parallel_per_repo
6228
6230
  )
6229
- _shadow_warning = flag_shadows_config_warning(
6230
- flag_name="max-parallel-per-repo",
6231
- override_value=max_parallel_per_repo,
6232
- config_key="pipeline.max_parallel_per_repo",
6233
- config_value=_config_max_parallel_per_repo,
6234
- )
6235
- if _shadow_warning:
6236
- click.echo(_shadow_warning)
6237
- max_parallel_per_repo = resolve_max_parallel_per_repo(
6231
+ _flag_max_parallel_per_repo = max_parallel_per_repo
6232
+ _per_repo_resolution = resolve_max_parallel_per_repo(
6238
6233
  override_value=max_parallel_per_repo,
6239
6234
  override_source="--max-parallel-per-repo flag",
6240
6235
  config_value=_config_max_parallel_per_repo,
6241
- ).value
6236
+ )
6237
+ max_parallel_per_repo = _per_repo_resolution.value
6242
6238
 
6243
6239
  if max_parallel_per_repo < 0:
6244
6240
  raise click.ClickException(
6245
6241
  "--max-parallel-per-repo must be 0 (no per-repo ceiling) or more"
6246
6242
  )
6247
6243
 
6244
+ # #3423: each repo's OWN ceiling (`repos[].max_parallel`), layered on the
6245
+ # fleet-wide answer just resolved. Only the repos that actually DIFFER
6246
+ # are carried into the tick, so a fleet with no overrides produces the
6247
+ # identical `TickPlan` (and identical `render_plan` output) it did
6248
+ # before. `resolve_repo_ceilings` is the SAME function `coord config
6249
+ # --effective` reports through, for the same reason as the two ceilings
6250
+ # above: one resolution order, not two that could drift (#2085).
6251
+ _repo_ceilings = resolve_repo_ceilings(
6252
+ {} if _cfg is None else {r.name: r.max_parallel for r in _cfg.repos},
6253
+ fleet=_per_repo_resolution,
6254
+ )
6255
+ repo_max_parallel = effective_repo_capacities(
6256
+ _repo_ceilings, fleet_value=max_parallel_per_repo
6257
+ )
6258
+ # Emitted after the per-repo table exists so the #3408 warning can name
6259
+ # the repos whose own ceiling beats the flag anyway (#3423).
6260
+ _shadow_warning = flag_shadows_config_warning(
6261
+ flag_name="max-parallel-per-repo",
6262
+ override_value=_flag_max_parallel_per_repo,
6263
+ config_key="pipeline.max_parallel_per_repo",
6264
+ config_value=_config_max_parallel_per_repo,
6265
+ overridden_repos=sorted(repo_max_parallel),
6266
+ )
6267
+ if _shadow_warning:
6268
+ click.echo(_shadow_warning)
6269
+
6248
6270
  # #3388/#3408: an explicit `--max-parallel` always wins; otherwise
6249
6271
  # `pipeline.max_parallel` from coordinator.yml; otherwise derive it from
6250
6272
  # the fleet's own shape (repo count * the per-repo ceiling just resolved
@@ -6272,6 +6294,11 @@ def drive_queue_tick(
6272
6294
  max_parallel_per_repo=max_parallel_per_repo,
6273
6295
  max_workers_cap=0 if _cfg is None else _cfg.concurrency.max_workers,
6274
6296
  config_readable=_cfg is not None,
6297
+ # #3423: the derivation must sum the per-repo ceilings, not multiply
6298
+ # by the fleet default — raising one repo to 2 without widening the
6299
+ # global ceiling to match re-creates exactly the starvation #3388
6300
+ # was opened for.
6301
+ repo_overrides=repo_max_parallel,
6275
6302
  ).value
6276
6303
 
6277
6304
  if max_parallel < 0:
@@ -6522,6 +6549,7 @@ def drive_queue_tick(
6522
6549
  board,
6523
6550
  effective_capacity,
6524
6551
  max_parallel_per_repo=max_parallel_per_repo,
6552
+ repo_max_parallel=repo_max_parallel,
6525
6553
  probes=probes,
6526
6554
  now=now,
6527
6555
  local_host=_local_host_id(),
@@ -20,6 +20,8 @@ from coord.commands._common import _CONFIG_OPTION, _load_config
20
20
  import json
21
21
 
22
22
  if TYPE_CHECKING: # pragma: no cover — typing only
23
+ from collections.abc import Mapping
24
+
23
25
  from coord.config import Config
24
26
  from coord.drive_queue import CeilingResolution
25
27
 
@@ -183,10 +185,12 @@ def _print_effective_concurrency(
183
185
  machine's own installed systemd unit, if any.
184
186
  """
185
187
  from coord.drive_queue import ( # noqa: PLC0415
188
+ effective_repo_capacities,
186
189
  flag_shadows_config_warning,
187
190
  read_systemd_max_parallel_flags,
188
191
  resolve_max_parallel,
189
192
  resolve_max_parallel_per_repo,
193
+ resolve_repo_ceilings,
190
194
  )
191
195
 
192
196
  systemd_flags = read_systemd_max_parallel_flags()
@@ -202,11 +206,26 @@ def _print_effective_concurrency(
202
206
  override_source=per_repo_source,
203
207
  config_value=cfg.pipeline.max_parallel_per_repo,
204
208
  )
209
+ # #3423: each repo's own `repos[].max_parallel`, layered on the
210
+ # fleet-wide answer above. Reported per repo below — a single
211
+ # `max_parallel_per_repo` line stopped being the whole truth the moment
212
+ # one repo could disagree with it, and "which ceiling actually applies
213
+ # to MY repo" is the same question #3408 was opened to answer.
214
+ repo_resolutions = resolve_repo_ceilings(
215
+ {r.name: r.max_parallel for r in cfg.repos}, fleet=per_repo_resolution
216
+ )
217
+ repo_overrides = effective_repo_capacities(
218
+ repo_resolutions, fleet_value=per_repo_resolution.value
219
+ )
205
220
  per_repo_warning = flag_shadows_config_warning(
206
221
  flag_name="max-parallel-per-repo",
207
222
  override_value=per_repo_override,
208
223
  config_key="pipeline.max_parallel_per_repo",
209
224
  config_value=cfg.pipeline.max_parallel_per_repo,
225
+ # #3423: computed after the per-repo table above so the warning can
226
+ # name the repos that beat the flag — "always wins" would otherwise
227
+ # be contradicted by the very next line this function prints.
228
+ overridden_repos=sorted(repo_overrides),
210
229
  )
211
230
 
212
231
  max_parallel_override = sim_max_parallel
@@ -222,6 +241,7 @@ def _print_effective_concurrency(
222
241
  repo_count=len(cfg.repos),
223
242
  max_parallel_per_repo=per_repo_resolution.value,
224
243
  max_workers_cap=cfg.concurrency.max_workers,
244
+ repo_overrides=repo_overrides,
225
245
  )
226
246
  global_warning = flag_shadows_config_warning(
227
247
  flag_name="max-parallel",
@@ -239,16 +259,26 @@ def _print_effective_concurrency(
239
259
  _echo_ceiling(per_repo_resolution)
240
260
  if per_repo_warning:
241
261
  click.echo(f" {per_repo_warning}")
262
+ # #3423: only the repos that actually override the fleet default are
263
+ # listed. Printing all fourteen would bury the two that differ, which is
264
+ # the opposite of what this report is for.
265
+ for name in sorted(repo_overrides):
266
+ _echo_ceiling(repo_resolutions[name], indent=" ")
242
267
  click.echo(
243
268
  f" {'concurrency.max_workers':<24} {cfg.concurrency.max_workers}"
244
269
  " <- coordinator.yml concurrency.max_workers"
245
270
  )
246
271
  click.echo("")
247
- click.echo(_effective_usage_line(cfg, global_resolution, per_repo_resolution))
272
+ click.echo(
273
+ _effective_usage_line(
274
+ cfg, global_resolution, per_repo_resolution, repo_overrides
275
+ )
276
+ )
248
277
 
249
278
 
250
- def _echo_ceiling(resolution: "CeilingResolution") -> None:
251
- line = f" {resolution.name:<24} {resolution.value} <- {resolution.source}"
279
+ def _echo_ceiling(resolution: "CeilingResolution", *, indent: str = " ") -> None:
280
+ width = 26 - len(indent)
281
+ line = f"{indent}{resolution.name:<{width}} {resolution.value} <- {resolution.source}"
252
282
  if resolution.losing:
253
283
  losers = ", ".join(f"{name}: {value}" for name, value in resolution.losing)
254
284
  line += f" (losing: {losers})"
@@ -259,6 +289,7 @@ def _effective_usage_line(
259
289
  cfg: "Config",
260
290
  global_resolution: "CeilingResolution",
261
291
  per_repo_resolution: "CeilingResolution",
292
+ repo_overrides: "Mapping[str, int] | None" = None,
262
293
  ) -> str:
263
294
  """Current in-flight usage against the two resolved ceilings above
264
295
  (#3408 acceptance: "a queue at its global ceiling reports N/N rather
@@ -291,8 +322,11 @@ def _effective_usage_line(
291
322
  return f"in flight unavailable ({exc})"
292
323
 
293
324
  line = f"in flight {occupied}/{global_resolution.value} global"
325
+ # #3423: count each repo against ITS OWN ceiling — against the fleet
326
+ # default, an overridden repo reports "2/1" and reads as a bug.
327
+ overrides = repo_overrides or {}
294
328
  per_repo_bits = " · ".join(
295
- f"{repo} {count}/{per_repo_resolution.value}"
329
+ f"{repo} {count}/{overrides.get(repo, per_repo_resolution.value)}"
296
330
  for repo, count in sorted(repo_occupied.items())
297
331
  )
298
332
  if per_repo_bits:
@@ -2536,6 +2536,7 @@ _KNOWN_REPO_KEYS = frozenset(
2536
2536
  "uat_live_preview",
2537
2537
  "uat_checks",
2538
2538
  "requires",
2539
+ "max_parallel",
2539
2540
  }
2540
2541
  )
2541
2542
 
@@ -2831,6 +2832,28 @@ def _parse_repos(raw: Any) -> tuple[list[Repo], list[str]]:
2831
2832
  if not isinstance(requires, list) or not all(isinstance(r, str) for r in requires):
2832
2833
  raise ConfigError(f"repos[{i}].requires must be a list of strings")
2833
2834
 
2835
+ # #3423: max_parallel — THIS repo's own drive-queue concurrency
2836
+ # ceiling, overriding the fleet-wide `pipeline.max_parallel_per_repo`.
2837
+ # Absent (None) means "no opinion", i.e. exactly the pre-#3423
2838
+ # behaviour for that repo. See `Repo.max_parallel`'s docstring for
2839
+ # why this one override outranks an explicit CLI/systemd flag, and
2840
+ # `coord.drive_queue.resolve_repo_max_parallel` for the resolution.
2841
+ # `bool` is rejected explicitly: YAML's `max_parallel: true` parses
2842
+ # as a bool, which `isinstance(x, int)` would otherwise wave through
2843
+ # as 1 — a silently-wrong ceiling rather than a config error.
2844
+ repo_max_parallel = entry.get("max_parallel")
2845
+ if repo_max_parallel is not None:
2846
+ if isinstance(repo_max_parallel, bool) or not isinstance(repo_max_parallel, int):
2847
+ raise ConfigError(
2848
+ f"repos[{i}].max_parallel must be an integer "
2849
+ "(omit the key entirely to use pipeline.max_parallel_per_repo)"
2850
+ )
2851
+ if repo_max_parallel < 0:
2852
+ raise ConfigError(
2853
+ f"repos[{i}].max_parallel must be 0 (no per-repo ceiling "
2854
+ "for this repo) or more"
2855
+ )
2856
+
2834
2857
  repos.append(
2835
2858
  Repo(
2836
2859
  name=name,
@@ -2853,6 +2876,7 @@ def _parse_repos(raw: Any) -> tuple[list[Repo], list[str]]:
2853
2876
  uat_live_preview=uat_live_preview_raw,
2854
2877
  uat_checks=uat_checks,
2855
2878
  requires=list(requires),
2879
+ max_parallel=repo_max_parallel,
2856
2880
  )
2857
2881
  )
2858
2882
  return repos, warnings