code-coordinator 0.5.586__tar.gz → 0.5.587__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 (936) hide show
  1. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/dispatch.py +6 -0
  7. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/dispatch_workers.py +17 -1
  8. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/config.py +138 -2
  9. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dispatch.py +30 -12
  10. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/milestone_dispatch.py +9 -0
  11. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/review.py +10 -2
  12. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coordinator.example.yml +15 -0
  13. code_coordinator-0.5.587/tests/test_models_pinned_1650.py +300 -0
  14. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/.gitignore +0 -0
  27. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/GOAL.md +0 -0
  29. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/LICENSE +0 -0
  30. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/README.md +0 -0
  32. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/backup.py +0 -0
  50. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/board_schema.py +0 -0
  52. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/bugbash.py +0 -0
  58. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/client.py +0 -0
  67. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/bugbash.py +0 -0
  75. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/chat.py +0 -0
  76. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/ci.py +0 -0
  77. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/codegen.py +0 -0
  78. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/reports.html +0 -0
  113. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/db.py +0 -0
  116. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-backup.service +0 -0
  121. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-backup.timer +0 -0
  122. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-dr-verify.service +0 -0
  126. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-dr-verify.timer +0 -0
  127. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deprecation_telemetry.py +0 -0
  145. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/deps.py +0 -0
  146. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/diagnose.py +0 -0
  147. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dirlink.py +0 -0
  148. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dispatch_liveness.py +0 -0
  149. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dr_promote.py +0 -0
  151. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/dr_verify.py +0 -0
  152. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/drive.py +0 -0
  153. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/drive_queue.py +0 -0
  154. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/drive_sessions_snapshot.py +0 -0
  155. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/drive_state.py +0 -0
  156. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/events.py +0 -0
  157. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/failure_class.py +0 -0
  158. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/failure_classifier.py +0 -0
  159. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/filelock.py +0 -0
  160. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/fleet_config_health.py +0 -0
  161. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/forge_availability.py +0 -0
  162. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/freshness.py +0 -0
  163. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gate_a.py +0 -0
  164. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gate_b.py +0 -0
  165. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gate_snapshot.py +0 -0
  166. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gates.py +0 -0
  167. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gen_board_fixture.py +0 -0
  168. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/github_ops.py +0 -0
  169. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/github_throttle.py +0 -0
  170. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/goal.py +0 -0
  171. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/graph_health.py +0 -0
  172. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/gtk_native_driver.py +0 -0
  173. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/__init__.py +0 -0
  174. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/aggregate.py +0 -0
  175. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/__init__.py +0 -0
  176. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/_ci_pin.py +0 -0
  177. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/agent_install.py +0 -0
  178. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/cargo_targets.py +0 -0
  179. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/claude_binary.py +0 -0
  180. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/config_drift.py +0 -0
  181. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  182. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/coord_web_ci_pin.py +0 -0
  183. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/deploy_lane_facts.py +0 -0
  184. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/disk.py +0 -0
  185. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/fleet_board.py +0 -0
  186. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  187. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/fleet_phantom.py +0 -0
  188. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/fleet_unit_drift.py +0 -0
  189. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/graph.py +0 -0
  190. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/graphify_cli.py +0 -0
  191. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/index_lock.py +0 -0
  192. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/issues_sync_staleness.py +0 -0
  193. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/local_machine_identity.py +0 -0
  194. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/plan_usage.py +0 -0
  195. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/pr_churn.py +0 -0
  196. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/release_cordon.py +0 -0
  197. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/repo_state.py +0 -0
  198. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/spawned_coord.py +0 -0
  199. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/stalled_pipeline.py +0 -0
  200. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/timer_active.py +0 -0
  201. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/toolchain.py +0 -0
  202. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/unit_drift.py +0 -0
  203. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/unit_enablement.py +0 -0
  204. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/wedged_drive_queue.py +0 -0
  205. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/checks/worktrees.py +0 -0
  206. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/cli.py +0 -0
  207. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/context.py +0 -0
  208. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/fleet_snapshot.py +0 -0
  209. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/models.py +0 -0
  210. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/pypi.py +0 -0
  211. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/registry.py +0 -0
  212. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/render.py +0 -0
  213. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/health/units.py +0 -0
  214. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/hooks.py +0 -0
  215. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/housekeeping.py +0 -0
  216. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/interactive.py +0 -0
  217. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/invariant_alarms.py +0 -0
  218. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/issue_store.py +0 -0
  219. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/issues_sync_status.py +0 -0
  220. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/liveness_auditor.py +0 -0
  221. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/mac_native_driver.py +0 -0
  222. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/machine_fault.py +0 -0
  223. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/machine_metrics.py +0 -0
  224. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/machine_onboard.py +0 -0
  225. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/machine_pause.py +0 -0
  226. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/machine_stats.py +0 -0
  227. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/merge_queue.py +0 -0
  228. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/milestone_chat.py +0 -0
  229. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/milestone_gate.py +0 -0
  230. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/milestone_order.py +0 -0
  231. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/mock_author.py +0 -0
  232. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/models.py +0 -0
  233. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/network.py +0 -0
  234. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/new_issue_chat.py +0 -0
  235. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/__init__.py +0 -0
  236. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/baseline.py +0 -0
  237. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/cli.py +0 -0
  238. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/collect.py +0 -0
  239. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/digest.py +0 -0
  240. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/models.py +0 -0
  241. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/predicate.py +0 -0
  242. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/service.py +0 -0
  243. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/store.py +0 -0
  244. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notifier/transport.py +0 -0
  245. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/notify.py +0 -0
  246. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/openapi.py +0 -0
  247. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/overlap_fence.py +0 -0
  248. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/overlap_predict.py +0 -0
  249. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/parentage.py +0 -0
  250. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/parentage_github.py +0 -0
  251. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/pipeline.py +0 -0
  252. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/plan_parser.py +0 -0
  253. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/plans.py +0 -0
  254. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/platform_paths.py +0 -0
  255. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/portal_bridge.py +0 -0
  256. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/portal_store.py +0 -0
  257. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/portal_sync.py +0 -0
  258. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/pr_body_lint.py +0 -0
  259. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/prereqs.py +0 -0
  260. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/progress.py +0 -0
  261. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/providers/__init__.py +0 -0
  262. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/providers/base.py +0 -0
  263. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/providers/claude.py +0 -0
  264. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/providers/claude_pty.py +0 -0
  265. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/providers/opencode.py +0 -0
  266. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/queue_diagnose.py +0 -0
  267. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/reconcile.py +0 -0
  268. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/reconcile_tick.py +0 -0
  269. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/refine_chat.py +0 -0
  270. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/release_cordon.py +0 -0
  271. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/release_gate.py +0 -0
  272. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/release_propagate.py +0 -0
  273. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/release_verify.py +0 -0
  274. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/release_window.py +0 -0
  275. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/repo_dormancy.py +0 -0
  276. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/repo_edit.py +0 -0
  277. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/repo_onboard.py +0 -0
  278. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/reports.py +0 -0
  279. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/rest_schema.py +0 -0
  280. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/restart_cmd.py +0 -0
  281. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/revalidate.py +0 -0
  282. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/scorecard.py +0 -0
  283. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/self_health.py +0 -0
  284. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/serve_app.py +0 -0
  285. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  286. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  287. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  288. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  290. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/portal-followup/SKILL.md +0 -0
  291. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/release-now/SKILL.md +0 -0
  292. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  293. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  294. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/skills/update-issue/SKILL.md +0 -0
  295. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/smoke.py +0 -0
  296. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/smoke_tags.py +0 -0
  297. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/spend_ceiling.py +0 -0
  298. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/split_work.py +0 -0
  299. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/sql.py +0 -0
  300. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/stage_projection.py +0 -0
  301. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/state.py +0 -0
  302. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/store_migrate.py +0 -0
  303. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/store_parity.py +0 -0
  304. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/templates/deploy-cloudflare.node.yml +0 -0
  305. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/test_author.py +0 -0
  306. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/test_chat.py +0 -0
  307. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/test_orchestrator.py +0 -0
  308. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/test_report.py +0 -0
  309. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/tui_pty_driver.py +0 -0
  310. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/tui_release.py +0 -0
  311. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/uat_checks.py +0 -0
  312. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/usage.py +0 -0
  313. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/usage_limits.py +0 -0
  314. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/usage_rollup.py +0 -0
  315. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/win_native_bridge.py +0 -0
  316. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/win_native_driver.py +0 -0
  317. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/coord/worker_events.py +0 -0
  318. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/setup.cfg +0 -0
  429. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_bugbash.py +0 -0
  518. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_check_gh_argv_containment.py +0 -0
  521. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_acceptance_gate_1950.py +0 -0
  522. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_fix.py +0 -0
  523. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_github.py +0 -0
  524. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_gitlab.py +0 -0
  525. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_claude_md_budget.py +0 -0
  529. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_claude_setup_token.py +0 -0
  530. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_acceptance.py +0 -0
  531. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_assign.py +0 -0
  532. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  533. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_assign_interactive_remote.py +0 -0
  534. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_assign_provider.py +0 -0
  535. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  536. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_audit.py +0 -0
  537. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_chat_continue.py +0 -0
  538. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_ci.py +0 -0
  539. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_codegen.py +0 -0
  540. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_decide.py +0 -0
  541. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_capability_rules.py +0 -0
  542. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_config_provenance.py +0 -0
  543. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_forge_availability.py +0 -0
  544. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_graph.py +0 -0
  545. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_self.py +0 -0
  546. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_diagnose_test_coverage.py +0 -0
  547. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  551. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_issue_comment.py +0 -0
  559. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_issue_view_list.py +0 -0
  562. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_issues.py +0 -0
  563. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_merge.py +0 -0
  564. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_assign.py +0 -0
  565. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_capture.py +0 -0
  566. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_chat_add_child.py +0 -0
  567. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_dispatch.py +0 -0
  568. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_gate_b.py +0 -0
  569. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_gate_c.py +0 -0
  570. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_order.py +0 -0
  571. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  572. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_milestone_ship.py +0 -0
  573. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_network.py +0 -0
  574. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_new_issue_chat.py +0 -0
  575. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_plans.py +0 -0
  576. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_portal.py +0 -0
  577. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_pr.py +0 -0
  578. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  587. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_scorecard.py +0 -0
  588. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_serve_store_backend_3084.py +0 -0
  589. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_contested_tag.py +0 -0
  592. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_invariant_alarms.py +0 -0
  593. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_machine_fault.py +0 -0
  594. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_retried_3340.py +0 -0
  597. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_supervisor_3366.py +0 -0
  599. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_test_failed_tag.py +0 -0
  600. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_status_usage_limit.py +0 -0
  601. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_sync_comments_873.py +0 -0
  602. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_test_plan.py +0 -0
  603. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_track.py +0 -0
  604. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_tui_update.py +0 -0
  605. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cli_wait.py +0 -0
  606. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_client.py +0 -0
  607. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_client_base_install.py +0 -0
  608. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_client_config_cache_atomic_3052.py +0 -0
  609. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_client_resource_migration_1946.py +0 -0
  610. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_commands_common.py +0 -0
  611. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_comments.py +0 -0
  612. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_completion_summary.py +0 -0
  613. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config.py +0 -0
  614. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_acceptance.py +0 -0
  615. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_audit.py +0 -0
  616. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_drift_check.py +0 -0
  617. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_effective.py +0 -0
  618. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_pricing.py +0 -0
  619. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  620. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_config_usage_gate.py +0 -0
  621. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_confirm_test.py +0 -0
  622. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_conflict_fix.py +0 -0
  623. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_conflict_fix_semantic.py +0 -0
  624. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  625. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test.py +0 -0
  626. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  627. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test_runner_baseline.py +0 -0
  628. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test_runner_populated_home.py +0 -0
  629. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test_runner_routing.py +0 -0
  630. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_test_runner_toolchain.py +0 -0
  631. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_uat.py +0 -0
  632. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dao.py +0 -0
  636. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard.py +0 -0
  637. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_api.py +0 -0
  638. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_fixture.py +0 -0
  639. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_reports.py +0 -0
  640. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_server.py +0 -0
  641. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_terminal.py +0 -0
  642. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dashboard_terminal_live.py +0 -0
  643. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_db.py +0 -0
  644. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dead_end.py +0 -0
  645. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_decomposition_chat.py +0 -0
  646. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_coord_db_backup.py +0 -0
  647. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_coord_web_dist.py +0 -0
  648. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_coord_web_rollback.py +0 -0
  649. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_db_backup_unit.py +0 -0
  650. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_drive_queue_unit.py +0 -0
  651. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_failure_notify_unit.py +0 -0
  652. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_manifest.py +0 -0
  653. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_notify_unit.py +0 -0
  654. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_units_lane.py +0 -0
  655. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deploy_web_unit.py +0 -0
  656. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deprecation_telemetry.py +0 -0
  657. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_deps.py +0 -0
  658. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_diagnose.py +0 -0
  659. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dirlink.py +0 -0
  660. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dispatch.py +0 -0
  661. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dispatch_liveness.py +0 -0
  662. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dispatch_target_validation.py +0 -0
  663. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dispatch_workers.py +0 -0
  664. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dist_name.py +0 -0
  665. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_done_housekeeping.py +0 -0
  666. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dr_azure_scripts.py +0 -0
  667. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dr_promote.py +0 -0
  668. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_dr_verify.py +0 -0
  669. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive.py +0 -0
  670. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_machine_fault.py +0 -0
  671. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue.py +0 -0
  672. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_blocked_rendering.py +0 -0
  673. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_launch_argv.py +0 -0
  674. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_max_parallel_config.py +0 -0
  675. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  676. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_roll_pending.py +0 -0
  677. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  678. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_sessions_snapshot.py +0 -0
  679. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_state.py +0 -0
  680. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_drive_tmux.py +0 -0
  681. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_epic_up_capability_detection.py +0 -0
  682. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  683. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_epic_up_image_provenance.py +0 -0
  684. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_errors.py +0 -0
  685. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_events.py +0 -0
  686. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_failure_class.py +0 -0
  687. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_failure_classifier.py +0 -0
  688. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_filelock.py +0 -0
  689. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  690. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fix_escalation_classifier.py +0 -0
  691. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fix_of_force_override.py +0 -0
  692. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fleet_config_health.py +0 -0
  693. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fleet_health_probes.py +0 -0
  694. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fleet_health_snapshot.py +0 -0
  695. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_fleet_watchdog.py +0 -0
  696. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_forge_availability.py +0 -0
  697. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_freshness.py +0 -0
  698. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gate_a.py +0 -0
  699. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gate_b.py +0 -0
  700. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gate_snapshot_staleness.py +0 -0
  701. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gates.py +0 -0
  702. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  703. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gen_mock_index.py +0 -0
  704. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_generated_rust_fixture.py +0 -0
  705. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_generated_rust_requests.py +0 -0
  706. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_generated_types_fixture.py +0 -0
  707. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_github_ops.py +0 -0
  708. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_github_throttle.py +0 -0
  709. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_goal.py +0 -0
  710. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_graph_health.py +0 -0
  711. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_graph_selfheal_absent_2237.py +0 -0
  712. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_gtk_native_driver.py +0 -0
  713. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_handoff.py +0 -0
  714. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_checks.py +0 -0
  715. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_cli.py +0 -0
  716. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_cli_graph.py +0 -0
  717. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_config.py +0 -0
  718. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_context.py +0 -0
  719. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_coord_tui_ci_pin.py +0 -0
  720. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_coord_web_ci_pin.py +0 -0
  721. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_deploy_lane_facts.py +0 -0
  722. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_fix.py +0 -0
  723. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_incident_regression.py +0 -0
  724. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_issues_sync_staleness.py +0 -0
  725. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_pr_churn.py +0 -0
  726. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_pypi.py +0 -0
  727. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_registry.py +0 -0
  728. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_release_cordon_probe.py +0 -0
  729. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_timer_active.py +0 -0
  730. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_toolchain.py +0 -0
  731. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_unit_drift.py +0 -0
  732. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_unit_enablement.py +0 -0
  733. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_health_wedged_drive_queue.py +0 -0
  734. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_hooks.py +0 -0
  735. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_housekeeping.py +0 -0
  736. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_human_attended_437.py +0 -0
  737. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_init.py +0 -0
  738. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_install_agent_capabilities_3515.py +0 -0
  739. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_install_agent_venv_2911.py +0 -0
  740. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  741. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_integration.py +0 -0
  742. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive.py +0 -0
  743. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_briefing_echo.py +0 -0
  744. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_pane_log_2541.py +0 -0
  745. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_prefill_state.py +0 -0
  746. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_session_relaunch.py +0 -0
  747. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_test_verdict_backstop.py +0 -0
  748. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_token_attribution.py +0 -0
  749. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_interactive_worktree.py +0 -0
  750. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_invariant_alarms.py +0 -0
  751. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_issue_store_seam.py +0 -0
  752. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_issues_sync_status.py +0 -0
  753. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_liveness_auditor.py +0 -0
  754. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_liveness_notify.py +0 -0
  755. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_lock_contention_ratchet.py +0 -0
  756. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_mac_native_driver.py +0 -0
  757. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_machine_fault.py +0 -0
  758. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_machine_metrics.py +0 -0
  759. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_machine_onboard.py +0 -0
  760. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_machine_pause.py +0 -0
  761. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_machine_stats.py +0 -0
  762. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_merge_queue.py +0 -0
  763. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_merge_verification.py +0 -0
  764. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_merge_verify.py +0 -0
  765. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_milestone_chat.py +0 -0
  766. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_milestone_dispatch.py +0 -0
  767. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_milestone_gate.py +0 -0
  768. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_milestone_order.py +0 -0
  769. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_milestone_seam.py +0 -0
  770. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_mock_author.py +0 -0
  771. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_model_tiering.py +0 -0
  772. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_models.py +0 -0
  773. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_models_config_labels.py +0 -0
  774. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_needs_attention.py +0 -0
  775. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_network.py +0 -0
  776. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_new_issue_chat.py +0 -0
  777. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_next_release_tag.py +0 -0
  778. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_node_shim.py +0 -0
  779. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_baseline.py +0 -0
  780. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_cli.py +0 -0
  781. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_collect.py +0 -0
  782. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_config.py +0 -0
  783. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_drive_seam.py +0 -0
  784. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_isolation.py +0 -0
  785. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_predicate.py +0 -0
  786. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_quiet_hours.py +0 -0
  787. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notifier_service.py +0 -0
  788. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notify.py +0 -0
  789. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_notify_drain.py +0 -0
  790. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_openapi.py +0 -0
  791. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_operational_defaults.py +0 -0
  792. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_overlap_fence.py +0 -0
  793. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_overlap_predict.py +0 -0
  794. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_packaged_deploy_units.py +0 -0
  795. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_parentage.py +0 -0
  796. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_paste_landed.py +0 -0
  797. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  798. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_pipeline.py +0 -0
  799. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_plan_followup_approve_plan_command.py +0 -0
  800. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_plan_followup_pr_command.py +0 -0
  801. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_plan_followup_review_command.py +0 -0
  802. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_plan_only.py +0 -0
  803. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_plan_parser.py +0 -0
  804. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_platform_paths.py +0 -0
  805. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_portal_bridge.py +0 -0
  806. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_portal_config.py +0 -0
  807. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_portal_store.py +0 -0
  808. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_portal_sync.py +0 -0
  809. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_pr_body_lint.py +0 -0
  810. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_prereqs.py +0 -0
  811. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_production_db_guard.py +0 -0
  812. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_progress.py +0 -0
  813. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_provider_seam.py +0 -0
  814. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_providers.py +0 -0
  815. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_providers_config_labels.py +0 -0
  816. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_providers_pty.py +0 -0
  817. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_provision_core.py +0 -0
  818. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_provision_machine.py +0 -0
  819. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_py_rust_mirror_inventory.py +0 -0
  820. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_quiet_hours.py +0 -0
  821. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_quiet_hours_store_2146.py +0 -0
  822. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reap_merged_sessions.py +0 -0
  823. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reap_stale_interactive_tick.py +0 -0
  824. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile.py +0 -0
  825. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_branch.py +0 -0
  826. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_completions.py +0 -0
  827. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  828. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_merges.py +0 -0
  829. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_no_agent_record.py +0 -0
  830. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_tick.py +0 -0
  831. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reconcile_usage_limit_done.py +0 -0
  832. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_refine_chat.py +0 -0
  833. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_cordon_2101.py +0 -0
  834. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  835. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_cordon_deadlock_2240.py +0 -0
  836. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  837. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_cordon_stuck_2490.py +0 -0
  838. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_gate.py +0 -0
  839. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_propagate.py +0 -0
  840. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_propagate_threshold.py +0 -0
  841. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_roll_between_legs_2854.py +0 -0
  842. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_roll_window_handoff.py +0 -0
  843. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_unified_1242.py +0 -0
  844. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_verify.py +0 -0
  845. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_release_window.py +0 -0
  846. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_remote_auto_prune.py +0 -0
  847. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_remote_interactive_reaper.py +0 -0
  848. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_add.py +0 -0
  849. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_dormancy.py +0 -0
  850. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_edit_2220.py +0 -0
  851. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_graph_fleet_2237.py +0 -0
  852. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_max_parallel_3423.py +0 -0
  853. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_repo_onboard_2220.py +0 -0
  854. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_report_public_export.py +0 -0
  855. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_report_result_push.py +0 -0
  856. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_reports.py +0 -0
  857. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_restart_cmd.py +0 -0
  858. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_retry.py +0 -0
  859. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_retry_advisory_1606.py +0 -0
  860. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_retry_escalation_classify_3360.py +0 -0
  861. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_retry_type_1636.py +0 -0
  862. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_revalidate.py +0 -0
  863. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review.py +0 -0
  864. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_end_review_without_verdict.py +0 -0
  865. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_parse_failure_diagnostic.py +0 -0
  866. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_reaffirm.py +0 -0
  867. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_state.py +0 -0
  868. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_verdict_backstop.py +0 -0
  869. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_verdict_override_audit.py +0 -0
  870. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_verdict_relay.py +0 -0
  871. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_review_zero_commits.py +0 -0
  872. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_scoped_review_wiring.py +0 -0
  873. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_scorecard.py +0 -0
  874. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_self_health.py +0 -0
  875. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_serve.py +0 -0
  876. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_serve_app.py +0 -0
  877. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_serve_app_board_trim.py +0 -0
  878. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_serve_rest_routes.py +0 -0
  879. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_session.py +0 -0
  880. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_slice_issue_attribution.py +0 -0
  881. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_smoke.py +0 -0
  882. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  883. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_smoke_live_checkout_restore.py +0 -0
  884. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_smoke_workflow.py +0 -0
  885. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_spend_ceiling.py +0 -0
  886. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_spend_ceiling_coordinator.py +0 -0
  887. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_split.py +0 -0
  888. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_split_work.py +0 -0
  889. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_sql_dialect.py +0 -0
  890. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_sqlite_connect_ratchet.py +0 -0
  891. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stage_projection.py +0 -0
  892. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stale_busy_reviewer_697.py +0 -0
  893. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stalled_pipeline.py +0 -0
  894. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_state.py +0 -0
  895. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_state_review_findings_daemon.py +0 -0
  896. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_status_fleet_footer.py +0 -0
  897. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stop_1567.py +0 -0
  898. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_store_contract.py +0 -0
  899. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_store_migrate.py +0 -0
  900. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stuck.py +0 -0
  901. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  902. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_terminal_command.py +0 -0
  903. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_author.py +0 -0
  904. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_chat.py +0 -0
  905. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_orchestrator.py +0 -0
  906. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_report.py +0 -0
  907. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_verdict_parsing.py +0 -0
  908. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_test_verdict_transcript_floor.py +0 -0
  909. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_text_io_encoding_audit.py +0 -0
  910. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_thin_client_board_audit.py +0 -0
  911. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_thin_client_config_load_1080.py +0 -0
  912. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_thin_client_daemon_routing_906.py +0 -0
  913. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_throwaway_vm.py +0 -0
  914. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_tmux_host.py +0 -0
  915. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_tmux_session.py +0 -0
  916. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_transcript_floor.py +0 -0
  917. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_tui_pty_driver.py +0 -0
  918. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_uat_checks.py +0 -0
  919. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_usage.py +0 -0
  920. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_usage_limits.py +0 -0
  921. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_usage_rollup.py +0 -0
  922. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_venv_live_install_2121.py +0 -0
  923. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_version_single_source.py +0 -0
  924. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_watch.py +0 -0
  925. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_win_native_bridge.py +0 -0
  926. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_win_native_driver.py +0 -0
  927. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  928. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worker_env_venv_isolation.py +0 -0
  929. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worker_events.py +0 -0
  930. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worker_image_pin_sync.py +0 -0
  931. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worker_safety.py +0 -0
  932. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worker_test_scoping.py +0 -0
  933. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worktree.py +0 -0
  934. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  935. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/test_write_parity.py +0 -0
  936. {code_coordinator-0.5.586 → code_coordinator-0.5.587}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.586
3
+ Version: 0.5.587
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.586
3
+ Version: 0.5.587
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
@@ -735,6 +735,7 @@ tests/test_mock_author.py
735
735
  tests/test_model_tiering.py
736
736
  tests/test_models.py
737
737
  tests/test_models_config_labels.py
738
+ tests/test_models_pinned_1650.py
738
739
  tests/test_needs_attention.py
739
740
  tests/test_network.py
740
741
  tests/test_new_issue_chat.py
@@ -762,6 +762,7 @@
762
762
  "tests/test_model_tiering.py",
763
763
  "tests/test_models.py",
764
764
  "tests/test_models_config_labels.py",
765
+ "tests/test_models_pinned_1650.py",
765
766
  "tests/test_needs_attention.py",
766
767
  "tests/test_network.py",
767
768
  "tests/test_new_issue_chat.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.586",
2
+ "tag": "0.5.587",
3
3
  "distance": 0,
4
- "node": "g0116991dbca373e8070feb4ac61ffb9d26cfe533",
4
+ "node": "g81a6f30503a2fdb64cbd57beb67d5d4bc78612ee",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-03"
@@ -654,8 +654,13 @@ def approve(
654
654
  label_model=label_model,
655
655
  config=cfg,
656
656
  effective_provider_name=effective_provider_name,
657
+ assignment_type=p.type,
657
658
  )
658
659
  if p.model:
660
+ # #1650: a pinned type's route is the SAME one just resolved
661
+ # above (no `explicit_model` reaches this call site) — naming
662
+ # it here is a reporting concern, not a second routing decision.
663
+ _pinned_type = p.type if cfg.models.model_for_type(p.type) else None
659
664
  click.echo(
660
665
  " model: "
661
666
  + describe_model_choice(
@@ -663,6 +668,7 @@ def approve(
663
668
  explicit_reason="resolved at plan time" if used_plan_time_snapshot else None,
664
669
  matched_label=matched_label,
665
670
  shadowed_labels=shadowed_labels,
671
+ pinned_type=_pinned_type,
666
672
  )
667
673
  )
668
674
  else:
@@ -4753,11 +4753,17 @@ def _dispatch_headless(
4753
4753
  if not effective_plan_only
4754
4754
  else (None, None, [])
4755
4755
  )
4756
+ # #1650: computed once — both the actual routing decision
4757
+ # (`resolve_dispatch_model_alias` below) and the `Proposal.type` it's
4758
+ # keyed against must agree, or the echoed "pinned for type=X" reason
4759
+ # could name a type that isn't the one actually dispatched.
4760
+ effective_assignment_type = "plan" if effective_plan_only else (dispatch_type or "work")
4756
4761
  resolved_model = resolve_dispatch_model_alias(
4757
4762
  explicit_model=model,
4758
4763
  label_model=label_model,
4759
4764
  config=cfg,
4760
4765
  effective_provider_name=effective_provider_name,
4766
+ assignment_type=effective_assignment_type,
4761
4767
  )
4762
4768
 
4763
4769
  proposal = Proposal(
@@ -4769,7 +4775,7 @@ def _dispatch_headless(
4769
4775
  rationale="manual assignment via coord assign",
4770
4776
  briefing=briefing,
4771
4777
  model=resolved_model,
4772
- type="plan" if effective_plan_only else (dispatch_type or "work"),
4778
+ type=effective_assignment_type,
4773
4779
  required_gates=resolved_gates,
4774
4780
  issue_labels=issue_labels,
4775
4781
  driven_by=driven_by,
@@ -4795,6 +4801,15 @@ def _dispatch_headless(
4795
4801
  # from an intentional default in this same line of output.
4796
4802
  from coord.config import describe_model_choice # noqa: PLC0415
4797
4803
 
4804
+ # #1650: only report the pin when it's actually what won — an
4805
+ # explicit --model still overrides it (see
4806
+ # `resolve_dispatch_model_alias`'s precedence), so don't claim
4807
+ # "pinned" for a human's own override.
4808
+ _pinned_type = (
4809
+ effective_assignment_type
4810
+ if not model and cfg.models.model_for_type(effective_assignment_type)
4811
+ else None
4812
+ )
4798
4813
  click.echo(
4799
4814
  " model: "
4800
4815
  + describe_model_choice(
@@ -4802,6 +4817,7 @@ def _dispatch_headless(
4802
4817
  explicit_reason="explicit --model" if model else None,
4803
4818
  matched_label=matched_label,
4804
4819
  shadowed_labels=shadowed_labels,
4820
+ pinned_type=_pinned_type,
4805
4821
  )
4806
4822
  )
4807
4823
  else:
@@ -755,6 +755,31 @@ class ModelsConfig:
755
755
  ``claude -p --model`` on the worker. Aliases not present in the map
756
756
  pass through unchanged, so ``claude -p`` falls back to its CLI default
757
757
  (which today is whatever the installed claude-cli treats as latest).
758
+
759
+ `pinned` (#1650) maps an assignment ``type`` (``"review"``, ``"merge"``,
760
+ ...) to a model route that must never be silently degraded by the
761
+ escalation ladder, by ``labels``-derived routing, or by a usage-gate
762
+ reroute — the final review gates every merge and is never skippable,
763
+ so the model that performs it must never be the thing a cost-driven
764
+ ladder economises on. A pinned type's route wins outright: every
765
+ resolver in this module, and :func:`coord.dispatch.
766
+ resolve_dispatch_model_alias`, checks ``pinned`` FIRST and returns
767
+ immediately when it matches, so the ladder/labels/usage-gate are never
768
+ even consulted for that dispatch — see :meth:`model_for_type`.
769
+
770
+ A route is either a bare model alias (resolved against the implicit
771
+ ``claude`` provider's known aliases — ``default``/``escalation``/
772
+ ``labels.values()``/``versions`` keys, plus the baseline
773
+ ``haiku``/``sonnet``/``opus`` trio) or a ``provider/model`` pair (e.g.
774
+ ``claude/opus``) naming a provider registered in ``providers.
775
+ definitions``. Both forms are validated at config-parse time
776
+ (``_parse_models``) — an unknown provider or an unrecognised model
777
+ alias is a ``ConfigError`` at load, not a silent fall-through to the
778
+ ladder discovered at 2am.
779
+
780
+ Ships with a **default pin on `"review"`** (``opus``) rather than an
781
+ empty mapping — an operator who never reads #1650 still gets the safe
782
+ behaviour. An explicit ``pinned: {}`` in ``coordinator.yml`` opts out.
758
783
  """
759
784
 
760
785
  default: str = "sonnet"
@@ -763,6 +788,24 @@ class ModelsConfig:
763
788
  )
764
789
  labels: dict[str, str] = field(default_factory=dict)
765
790
  versions: dict[str, str] = field(default_factory=dict)
791
+ pinned: dict[str, str] = field(default_factory=lambda: {"review": "opus"})
792
+
793
+ def model_for_type(self, assignment_type: str | None) -> str | None:
794
+ """Return the pinned route for *assignment_type*, if configured.
795
+
796
+ #1650: this is the ONE question every resolver asks before
797
+ consulting the escalation ladder, ``labels``, or a usage-gate
798
+ reroute — callers short-circuit on a non-``None`` result and never
799
+ fall through to those mechanisms, so a pin can't be shadowed by
800
+ whatever any of them (including a not-yet-built usage-aware
801
+ reroute) would otherwise have computed. Returns ``None`` (never
802
+ ``default``) when *assignment_type* isn't pinned, or is ``None``
803
+ itself — mirroring the None-passthrough style of :meth:`resolve`/
804
+ :meth:`model_for_labels`.
805
+ """
806
+ if assignment_type is None:
807
+ return None
808
+ return self.pinned.get(assignment_type)
766
809
 
767
810
  def next_model(self, current: str) -> str:
768
811
  """Return the next model in the escalation ladder.
@@ -893,6 +936,7 @@ def describe_model_choice(
893
936
  explicit_reason: str | None = None,
894
937
  matched_label: str | None = None,
895
938
  shadowed_labels: list[str] | None = None,
939
+ pinned_type: str | None = None,
896
940
  ) -> str:
897
941
  """Format a one-line explanation of why *resolved_model* was chosen.
898
942
 
@@ -901,6 +945,13 @@ def describe_model_choice(
901
945
  picked up yet) read identically to an intentional default — the exact
902
946
  ambiguity that made the stale-label-cache bug expensive to notice.
903
947
 
948
+ *pinned_type*, when set (#1650), wins outright and reports
949
+ ``"(pinned for type=<pinned_type>)"`` — a :attr:`ModelsConfig.pinned`
950
+ match is a stronger, operator-declared signal than any label match or
951
+ explicit reason, so callers pass it only when
952
+ :meth:`ModelsConfig.model_for_type` actually matched for this
953
+ dispatch.
954
+
904
955
  *explicit_reason*, when set, wins outright (e.g. ``"explicit --model"``
905
956
  or ``"resolved at plan time"``) — the caller already knows the model
906
957
  didn't come from a fresh label match. Otherwise *matched_label* (from
@@ -913,6 +964,8 @@ def describe_model_choice(
913
964
  self-explaining at dispatch time instead of reading like the older,
914
965
  order-dependent bug.
915
966
  """
967
+ if pinned_type:
968
+ return f"{resolved_model} (pinned for type={pinned_type})"
916
969
  if explicit_reason:
917
970
  return f"{resolved_model} ({explicit_reason})"
918
971
  if matched_label:
@@ -2998,7 +3051,7 @@ def parse_mapping(raw: Any, *, path: Path | None = None) -> Config:
2998
3051
  concurrency = _parse_concurrency(raw.get("concurrency"))
2999
3052
  smoke_tests = _parse_smoke_tests(raw.get("smoke_tests"))
3000
3053
  acceptance = _parse_acceptance(raw.get("acceptance"))
3001
- models = _parse_models(raw.get("models"))
3054
+ models = _parse_models(raw.get("models"), set(providers.definitions))
3002
3055
  pipeline = _parse_pipeline(raw.get("pipeline"))
3003
3056
  dispatch = _parse_dispatch(raw.get("dispatch"))
3004
3057
  usage_gate = _parse_usage_gate(raw.get("usage_gate"))
@@ -4114,7 +4167,7 @@ def _acceptance_entrypoint(entry: dict, label: str) -> str:
4114
4167
  return value
4115
4168
 
4116
4169
 
4117
- def _parse_models(raw: Any) -> ModelsConfig:
4170
+ def _parse_models(raw: Any, known_providers: set[str] | None = None) -> ModelsConfig:
4118
4171
  if raw is None:
4119
4172
  return ModelsConfig()
4120
4173
  if not isinstance(raw, dict):
@@ -4154,9 +4207,92 @@ def _parse_models(raw: Any) -> ModelsConfig:
4154
4207
  )
4155
4208
  cfg.versions = dict(value)
4156
4209
 
4210
+ # #1650: `pinned` is validated LAST — it references `cfg.default`/
4211
+ # `cfg.escalation`/`cfg.labels`/`cfg.versions` (all parsed above) to
4212
+ # build the known-alias vocabulary a bare (no-provider-prefix) route is
4213
+ # checked against.
4214
+ if "pinned" in raw:
4215
+ value = raw["pinned"]
4216
+ if not isinstance(value, dict) or not all(
4217
+ isinstance(k, str) and k and isinstance(v, str) and v
4218
+ for k, v in value.items()
4219
+ ):
4220
+ raise ConfigError(
4221
+ "models.pinned must be a mapping of assignment type → model route"
4222
+ )
4223
+ cfg.pinned = dict(value)
4224
+ for assignment_type, route in cfg.pinned.items():
4225
+ _validate_pinned_route(
4226
+ assignment_type, route, cfg, known_providers or {"claude"},
4227
+ )
4228
+ # Explicit `pinned: {}` is a deliberate opt-out — otherwise the dataclass
4229
+ # default (`{"review": "opus"}`) already stands and needs no validation
4230
+ # here (it's valid by construction: "opus" is in the baseline alias set
4231
+ # checked below regardless of a custom `escalation`/`labels`/`versions`).
4232
+
4157
4233
  return cfg
4158
4234
 
4159
4235
 
4236
+ #: #1650: the baseline Anthropic model aliases recognised regardless of what
4237
+ #: `models.escalation`/`models.labels`/`models.versions` a deployment
4238
+ #: configures — keeps the shipped default pin (`review: opus`) valid even
4239
+ #: for a coordinator.yml that never mentions "opus" anywhere else.
4240
+ _BASELINE_MODEL_ALIASES: frozenset[str] = frozenset({"haiku", "sonnet", "opus"})
4241
+
4242
+
4243
+ def _validate_pinned_route(
4244
+ assignment_type: str, route: str, cfg: ModelsConfig, known_providers: set[str],
4245
+ ) -> None:
4246
+ """Validate one ``models.pinned[assignment_type]`` route at parse time.
4247
+
4248
+ #1650: a typo here must fail loudly at config load, not silently fall
4249
+ through to the ladder/labels at dispatch time. A route is either a bare
4250
+ model alias (checked against the known alias vocabulary for the
4251
+ implicit ``claude`` provider — see :data:`_BASELINE_MODEL_ALIASES`) or a
4252
+ ``provider/model`` pair, e.g. ``claude/opus`` — the provider half is
4253
+ checked against *known_providers* (``providers.definitions``, which
4254
+ always includes the implicit ``"claude"`` entry); the model half is only
4255
+ checked when that provider is ``claude``/``claude-pty``-shaped (named
4256
+ ``"claude"`` here, since ``_parse_providers`` hasn't run far enough by
4257
+ this point to carry provider *types* — every registered claude-backed
4258
+ provider is reachable by its own name, so this only validates the
4259
+ common, un-aliased case). A non-claude provider's model half is a
4260
+ backend-specific free string — not validated here, same as
4261
+ ``ProviderDef.model`` isn't validated anywhere else in this module.
4262
+ """
4263
+ if "/" in route:
4264
+ provider_name, _, model = route.partition("/")
4265
+ if provider_name not in known_providers:
4266
+ raise ConfigError(
4267
+ f"models.pinned[{assignment_type!r}] references unknown "
4268
+ f"provider {provider_name!r} (got route {route!r})"
4269
+ )
4270
+ if not model:
4271
+ raise ConfigError(
4272
+ f"models.pinned[{assignment_type!r}] is missing a model "
4273
+ f"after the provider (got route {route!r})"
4274
+ )
4275
+ if provider_name != "claude":
4276
+ return
4277
+ model_alias = model
4278
+ else:
4279
+ model_alias = route
4280
+
4281
+ known_aliases = (
4282
+ _BASELINE_MODEL_ALIASES
4283
+ | {cfg.default}
4284
+ | set(cfg.escalation)
4285
+ | set(cfg.labels.values())
4286
+ | set(cfg.versions.keys())
4287
+ )
4288
+ if model_alias not in known_aliases:
4289
+ raise ConfigError(
4290
+ f"models.pinned[{assignment_type!r}] references unknown model "
4291
+ f"{model_alias!r} (got route {route!r}); known aliases: "
4292
+ f"{sorted(known_aliases)!r}"
4293
+ )
4294
+
4295
+
4160
4296
  def _parse_pipeline(raw: Any) -> PipelineConfig:
4161
4297
  if raw is None:
4162
4298
  return PipelineConfig()
@@ -442,19 +442,29 @@ def resolve_dispatch_model_alias(
442
442
  label_model: str | None,
443
443
  config: Config,
444
444
  effective_provider_name: str,
445
+ assignment_type: str | None = None,
445
446
  ) -> str | None:
446
447
  """Resolve the dispatch model *alias* (before ``models.resolve()``).
447
448
 
448
- Precedence: *explicit_model* → the effective provider's own pinned
449
- ``ProviderDef.model`` (for non-claude/claude-pty backends only) →
450
- *label_model* → ``models.default``. The board/DB stores this alias for
451
- legibility; the caller is responsible for the final
452
- ``config.models.resolve()`` translation to an exact model id (typically
453
- deferred to :func:`dispatch`/:func:`resolve_dispatch_model`, which run
454
- at actual-wire-payload time — see the module docstring of each CLI
455
- entry point that calls this function for why: re-resolving here would
456
- bake an exact id into ``Proposal.model``/board bookkeeping instead of
457
- the human-legible alias).
449
+ Precedence: *explicit_model* → ``models.pinned[assignment_type]``
450
+ (#1650) → the effective provider's own pinned ``ProviderDef.model``
451
+ (for non-claude/claude-pty backends only) → *label_model* →
452
+ ``models.default``. The board/DB stores this alias for legibility; the
453
+ caller is responsible for the final ``config.models.resolve()``
454
+ translation to an exact model id (typically deferred to
455
+ :func:`dispatch`/:func:`resolve_dispatch_model`, which run at
456
+ actual-wire-payload time — see the module docstring of each CLI entry
457
+ point that calls this function for why: re-resolving here would bake
458
+ an exact id into ``Proposal.model``/board bookkeeping instead of the
459
+ human-legible alias).
460
+
461
+ #1650: a type pinned via ``models.pinned`` wins over the provider pin
462
+ AND *label_model* — it ignores the escalation ladder, label-derived
463
+ routing, and a usage-gate reroute entirely, by never even reaching the
464
+ code that would compute those (see :meth:`coord.config.ModelsConfig.
465
+ model_for_type`). Only an *explicit_model* (a human being specific
466
+ right now, same precedent as the provider pin below) still overrides
467
+ it.
458
468
 
459
469
  #1798: *label_model* comes from ``models.labels``, which maps to
460
470
  Anthropic aliases (``tier:small -> haiku``) — a namespace that means
@@ -533,19 +543,26 @@ def resolve_dispatch_model_alias(
533
543
  name (spec > repo > ``providers.default``), as returned by
534
544
  :func:`coord.providers.resolve_provider_name` or
535
545
  :func:`coord.providers.guard_unattended_dispatch`.
546
+ assignment_type: The dispatch's assignment ``type`` (e.g.
547
+ ``"work"``, ``"review"``), consulted against ``models.pinned``
548
+ (#1650). ``None`` when the caller has no type to offer —
549
+ behaves exactly like an unpinned type.
536
550
 
537
551
  Returns:
538
552
  The model alias (NOT yet passed through ``config.models.resolve()``),
539
553
  or ``None`` to omit ``--model``.
540
554
  """
555
+ if explicit_model:
556
+ return explicit_model
557
+ pinned_model = config.models.model_for_type(assignment_type)
558
+ if pinned_model:
559
+ return pinned_model
541
560
  provider_def = config.providers.definitions.get(effective_provider_name)
542
561
  provider_pins_model = (
543
562
  provider_def is not None
544
563
  and provider_def.type not in ("claude", "claude-pty")
545
564
  and provider_def.model is not None
546
565
  )
547
- if explicit_model:
548
- return explicit_model
549
566
  if provider_pins_model:
550
567
  return None
551
568
  if label_model:
@@ -596,6 +613,7 @@ def resolve_dispatch_model(
596
613
  label_model=label_model,
597
614
  config=config,
598
615
  effective_provider_name=effective_provider_name,
616
+ assignment_type=proposal.type,
599
617
  )
600
618
  return config.models.resolve(alias)
601
619
 
@@ -1448,6 +1448,7 @@ def dispatch_entry(
1448
1448
  label_model=label_model,
1449
1449
  config=config,
1450
1450
  effective_provider_name=effective_provider_name,
1451
+ assignment_type=proposal_type,
1451
1452
  )
1452
1453
  # #1454: surfaced on the outcome so `coord milestone dispatch`'s CLI
1453
1454
  # output states *why* this model was picked, same as `coord assign` /
@@ -1457,11 +1458,19 @@ def dispatch_entry(
1457
1458
  # earlier `coord plan`/`coord milestone plan` run.
1458
1459
  from coord.config import describe_model_choice # noqa: PLC0415
1459
1460
 
1461
+ # #1650: a pinned type's route is the SAME one `resolve_dispatch_model_
1462
+ # alias` above just returned (no `explicit_model` reaches this call
1463
+ # site) — naming it here is purely a reporting concern, not a second
1464
+ # routing decision.
1465
+ pinned_type = (
1466
+ proposal_type if config.models.model_for_type(proposal_type) else None
1467
+ )
1460
1468
  if resolved_model:
1461
1469
  model_reason = describe_model_choice(
1462
1470
  resolved_model=resolved_model,
1463
1471
  matched_label=matched_label,
1464
1472
  shadowed_labels=shadowed_labels,
1473
+ pinned_type=pinned_type,
1465
1474
  )
1466
1475
  else:
1467
1476
  # #1706/#1798: resolved_model is None when the effective provider's
@@ -3886,7 +3886,12 @@ def dispatch_review(
3886
3886
  # #1430: deliberately not consulting models.labels — the reviewer's
3887
3887
  # effort scales with diff size, not the original work issue's tier
3888
3888
  # label, and #911 already pins this deliberately.
3889
- review_model_alias = config.models.default
3889
+ # #1650: `models.pinned["review"]` (default: "opus") wins over
3890
+ # `models.default` outright — the final review gates every merge
3891
+ # and must never be silently degraded by a cost-driven ladder or a
3892
+ # usage-gate reroute, so this is checked ahead of (and instead of)
3893
+ # `models.default`, never folded into it.
3894
+ review_model_alias = config.models.model_for_type("review") or config.models.default
3890
3895
  review_model_wire = config.models.resolve(review_model_alias)
3891
3896
 
3892
3897
  # #821: capture branch HEAD SHA once; staleness detected post-review.
@@ -5003,7 +5008,10 @@ def dispatch_scoped_review(
5003
5008
  if not candidates:
5004
5009
  return None
5005
5010
 
5006
- review_model_alias = config.models.default
5011
+ # #1650: see the #911/#1650 comment at the other `review_model_alias`
5012
+ # assignment site (`dispatch_review` above) — `models.pinned["review"]`
5013
+ # wins outright over `models.default` here too.
5014
+ review_model_alias = config.models.model_for_type("review") or config.models.default
5007
5015
  review_model_wire = config.models.resolve(review_model_alias)
5008
5016
 
5009
5017
  _get_sha = branch_sha_fetcher or github_ops.get_branch_sha
@@ -458,6 +458,21 @@ models:
458
458
  # haiku: claude-haiku-4-5
459
459
  # sonnet: claude-sonnet-5
460
460
  # opus: claude-opus-4-8
461
+ #
462
+ # pinned (#1650): assignment type -> model route that must never be
463
+ # silently degraded by the escalation ladder, by `labels` above, or by a
464
+ # usage-gate reroute. A pinned type's route wins outright over all three
465
+ # — the final review gates every merge and must never be the thing a
466
+ # cost-driven ladder economises on. Defaults to `{review: opus}` when
467
+ # this key is absent entirely; an explicit `pinned: {}` opts out. A
468
+ # route is either a bare alias (checked against this block's own
469
+ # default/escalation/labels/versions, plus the haiku/sonnet/opus
470
+ # baseline) or a `provider/model` pair naming a `providers.definitions`
471
+ # entry — both are validated at config-load time, so a typo is a
472
+ # ConfigError at load, not a silent fall-through discovered at 2am.
473
+ # pinned:
474
+ # review: opus
475
+ # merge: claude/sonnet
461
476
 
462
477
  # providers: worker-command backend registry (#322 / #323).
463
478
  #