code-coordinator 0.5.543__tar.gz → 0.5.545__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 (914) hide show
  1. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/PKG-INFO +6 -1
  2. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/PKG-INFO +6 -1
  3. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/requires.txt +8 -0
  5. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/scm_file_list.json +2 -0
  6. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/acceptance_drivers.py +94 -7
  8. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/acceptance.py +2 -2
  9. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/milestone.py +64 -5
  10. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/milestone_dispatch.py +145 -20
  11. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/milestone_order.py +13 -5
  12. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/serve_app.py +60 -13
  13. code_coordinator-0.5.545/coord/tui_pty_driver.py +871 -0
  14. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/pyproject.toml +19 -1
  15. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_acceptance_drivers.py +137 -0
  16. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_acceptance.py +1 -1
  17. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_order.py +94 -5
  18. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive.py +15 -4
  19. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_milestone_dispatch.py +125 -0
  20. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_milestone_gate.py +96 -0
  21. code_coordinator-0.5.545/tests/test_tui_pty_driver.py +620 -0
  22. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.github/workflows/test.yml +0 -0
  34. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/.gitignore +0 -0
  35. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/CLAUDE.md +0 -0
  36. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/GOAL.md +0 -0
  37. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/LICENSE +0 -0
  38. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/MANIFEST.in +0 -0
  39. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/README.md +0 -0
  40. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/dependency_links.txt +0 -0
  41. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/entry_points.txt +0 -0
  42. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/code_coordinator.egg-info/top_level.txt +0 -0
  43. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/__init__.py +0 -0
  44. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/_board_mapping.py +0 -0
  45. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/acceptance.py +0 -0
  46. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/backup.py +0 -0
  56. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/ci_fix.py +0 -0
  65. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/ci_github.py +0 -0
  66. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/ci_gitlab.py +0 -0
  67. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/claude_setup_token.py +0 -0
  70. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/client.py +0 -0
  72. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/codegen.py +0 -0
  73. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/__init__.py +0 -0
  74. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/_common.py +0 -0
  75. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/agent_ops.py +0 -0
  76. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/audit.py +0 -0
  77. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/backup.py +0 -0
  78. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/chat.py +0 -0
  79. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/ci.py +0 -0
  80. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/codegen.py +0 -0
  81. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/dispatch.py +0 -0
  82. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/dispatch_workers.py +0 -0
  83. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/dr.py +0 -0
  84. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/drive.py +0 -0
  85. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/drive_queue.py +0 -0
  86. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/gate_a.py +0 -0
  87. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/gates.py +0 -0
  88. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/issues.py +0 -0
  89. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/lifecycle.py +0 -0
  90. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/machine.py +0 -0
  91. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/merge.py +0 -0
  92. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/plan_followup.py +0 -0
  93. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/plans.py +0 -0
  94. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/portal.py +0 -0
  95. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/pr.py +0 -0
  96. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/release.py +0 -0
  97. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/repo.py +0 -0
  98. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/report.py +0 -0
  99. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/review.py +0 -0
  100. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/scorecard.py +0 -0
  101. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/sessions.py +0 -0
  102. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/setup.py +0 -0
  103. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/status.py +0 -0
  104. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/store_migrate.py +0 -0
  105. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/test_gate.py +0 -0
  107. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/commands/tui.py +0 -0
  108. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/comments.py +0 -0
  109. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/config.py +0 -0
  110. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/config_reload.py +0 -0
  111. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/confirm_test.py +0 -0
  112. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/conflict_fix.py +0 -0
  113. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dao.py +0 -0
  114. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dashboard/__init__.py +0 -0
  115. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dashboard/fixture.py +0 -0
  116. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dashboard/index.html +0 -0
  117. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dashboard/server.py +0 -0
  118. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dashboard/terminal.py +0 -0
  119. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/db.py +0 -0
  120. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dead_end.py +0 -0
  121. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/decomposition_chat.py +0 -0
  122. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/README.md +0 -0
  123. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-agent.service +0 -0
  124. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-backup.service +0 -0
  125. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-backup.timer +0 -0
  126. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-db-backup.service +0 -0
  127. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-db-backup.sh +0 -0
  128. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-db-backup.timer +0 -0
  129. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-dr-verify.service +0 -0
  130. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-dr-verify.timer +0 -0
  131. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-drive-queue.service +0 -0
  132. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-drive-queue.timer +0 -0
  133. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-failure-notify.service +0 -0
  134. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-fleet-watchdog.service +0 -0
  135. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  136. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-notify.service +0 -0
  137. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-notify.timer +0 -0
  138. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-release-propagate.service +0 -0
  139. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-release-propagate.timer +0 -0
  140. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-release-window.service +0 -0
  141. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-release-window.timer +0 -0
  142. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-serve.service +0 -0
  143. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-web-dist-build.service +0 -0
  144. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-web-dist-build.timer +0 -0
  145. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy/coord-web.service +0 -0
  146. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy_manifest.py +0 -0
  147. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deploy_units.py +0 -0
  148. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deprecation_telemetry.py +0 -0
  149. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/deps.py +0 -0
  150. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/diagnose.py +0 -0
  151. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dispatch.py +0 -0
  152. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dispatch_liveness.py +0 -0
  153. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dist_name.py +0 -0
  154. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dr_promote.py +0 -0
  155. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/dr_verify.py +0 -0
  156. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/drive.py +0 -0
  157. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/drive_queue.py +0 -0
  158. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/drive_sessions_snapshot.py +0 -0
  159. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/drive_state.py +0 -0
  160. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/events.py +0 -0
  161. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/failure_class.py +0 -0
  162. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/failure_classifier.py +0 -0
  163. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/filelock.py +0 -0
  164. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/fleet_config_health.py +0 -0
  165. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/forge_availability.py +0 -0
  166. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/freshness.py +0 -0
  167. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/gate_a.py +0 -0
  168. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/gate_b.py +0 -0
  169. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/gate_snapshot.py +0 -0
  170. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/gates.py +0 -0
  171. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/gen_board_fixture.py +0 -0
  172. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/github_ops.py +0 -0
  173. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/github_throttle.py +0 -0
  174. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/goal.py +0 -0
  175. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/graph_health.py +0 -0
  176. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/__init__.py +0 -0
  177. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/aggregate.py +0 -0
  178. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/__init__.py +0 -0
  179. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/_ci_pin.py +0 -0
  180. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/agent_install.py +0 -0
  181. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/cargo_targets.py +0 -0
  182. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/claude_binary.py +0 -0
  183. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/config_drift.py +0 -0
  184. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  185. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/coord_web_ci_pin.py +0 -0
  186. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/deploy_lane_facts.py +0 -0
  187. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/disk.py +0 -0
  188. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/fleet_board.py +0 -0
  189. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  190. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/fleet_phantom.py +0 -0
  191. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/fleet_unit_drift.py +0 -0
  192. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/graph.py +0 -0
  193. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/graphify_cli.py +0 -0
  194. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/index_lock.py +0 -0
  195. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/issues_sync_staleness.py +0 -0
  196. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/local_machine_identity.py +0 -0
  197. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/plan_usage.py +0 -0
  198. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/pr_churn.py +0 -0
  199. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/release_cordon.py +0 -0
  200. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/repo_state.py +0 -0
  201. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/spawned_coord.py +0 -0
  202. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/stalled_pipeline.py +0 -0
  203. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/timer_active.py +0 -0
  204. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/toolchain.py +0 -0
  205. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/unit_drift.py +0 -0
  206. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/unit_enablement.py +0 -0
  207. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/wedged_drive_queue.py +0 -0
  208. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/checks/worktrees.py +0 -0
  209. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/cli.py +0 -0
  210. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/context.py +0 -0
  211. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/fleet_snapshot.py +0 -0
  212. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/models.py +0 -0
  213. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/pypi.py +0 -0
  214. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/registry.py +0 -0
  215. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/render.py +0 -0
  216. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/health/units.py +0 -0
  217. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/hooks.py +0 -0
  218. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/housekeeping.py +0 -0
  219. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/interactive.py +0 -0
  220. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/invariant_alarms.py +0 -0
  221. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/issue_store.py +0 -0
  222. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/issues_sync_status.py +0 -0
  223. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/liveness_auditor.py +0 -0
  224. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/machine_fault.py +0 -0
  225. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/machine_metrics.py +0 -0
  226. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/machine_onboard.py +0 -0
  227. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/machine_pause.py +0 -0
  228. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/machine_stats.py +0 -0
  229. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/merge_queue.py +0 -0
  230. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/milestone_chat.py +0 -0
  231. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/milestone_gate.py +0 -0
  232. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/mock_author.py +0 -0
  233. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/models.py +0 -0
  234. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/network.py +0 -0
  235. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/new_issue_chat.py +0 -0
  236. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/__init__.py +0 -0
  237. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/baseline.py +0 -0
  238. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/cli.py +0 -0
  239. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/collect.py +0 -0
  240. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/digest.py +0 -0
  241. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/models.py +0 -0
  242. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/predicate.py +0 -0
  243. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/service.py +0 -0
  244. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/store.py +0 -0
  245. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notifier/transport.py +0 -0
  246. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/notify.py +0 -0
  247. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/openapi.py +0 -0
  248. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/overlap_fence.py +0 -0
  249. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/overlap_predict.py +0 -0
  250. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/parentage.py +0 -0
  251. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/parentage_github.py +0 -0
  252. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/pipeline.py +0 -0
  253. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/plan_parser.py +0 -0
  254. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/plans.py +0 -0
  255. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/platform_paths.py +0 -0
  256. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/portal_bridge.py +0 -0
  257. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/portal_store.py +0 -0
  258. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/portal_sync.py +0 -0
  259. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/pr_body_lint.py +0 -0
  260. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/prereqs.py +0 -0
  261. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/progress.py +0 -0
  262. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/providers/__init__.py +0 -0
  263. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/providers/base.py +0 -0
  264. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/providers/claude.py +0 -0
  265. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/providers/claude_pty.py +0 -0
  266. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/providers/opencode.py +0 -0
  267. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/queue_diagnose.py +0 -0
  268. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/reconcile.py +0 -0
  269. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/reconcile_tick.py +0 -0
  270. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/refine_chat.py +0 -0
  271. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/release_cordon.py +0 -0
  272. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/release_propagate.py +0 -0
  273. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/release_verify.py +0 -0
  274. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/release_window.py +0 -0
  275. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/repo_dormancy.py +0 -0
  276. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/repo_edit.py +0 -0
  277. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/repo_onboard.py +0 -0
  278. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/reports.py +0 -0
  279. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/rest_schema.py +0 -0
  280. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/restart_cmd.py +0 -0
  281. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/revalidate.py +0 -0
  282. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/review.py +0 -0
  283. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/scorecard.py +0 -0
  284. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/self_health.py +0 -0
  285. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  286. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  287. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  288. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  290. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/portal-followup/SKILL.md +0 -0
  291. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/release-now/SKILL.md +0 -0
  292. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  293. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  294. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/skills/update-issue/SKILL.md +0 -0
  295. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/smoke.py +0 -0
  296. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/smoke_tags.py +0 -0
  297. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/spend_ceiling.py +0 -0
  298. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/split_work.py +0 -0
  299. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/sql.py +0 -0
  300. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/stage_projection.py +0 -0
  301. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/state.py +0 -0
  302. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/store_migrate.py +0 -0
  303. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/store_parity.py +0 -0
  304. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/templates/deploy-cloudflare.node.yml +0 -0
  305. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/test_author.py +0 -0
  306. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/test_chat.py +0 -0
  307. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/test_orchestrator.py +0 -0
  308. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/test_report.py +0 -0
  309. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/tui_release.py +0 -0
  310. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/uat_checks.py +0 -0
  311. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/usage.py +0 -0
  312. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/usage_limits.py +0 -0
  313. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/usage_rollup.py +0 -0
  314. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coord/worker_events.py +0 -0
  315. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/coordinator.example.yml +0 -0
  316. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-agent.service +0 -0
  317. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-backup.service +0 -0
  318. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-backup.timer +0 -0
  319. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-db-backup.service +0 -0
  320. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-db-backup.sh +0 -0
  321. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-db-backup.timer +0 -0
  322. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-dr-verify.service +0 -0
  323. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-dr-verify.timer +0 -0
  324. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-drive-queue.service +0 -0
  325. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-drive-queue.timer +0 -0
  326. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-failure-notify.service +0 -0
  327. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-failure-notify.sh +0 -0
  328. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-fleet-watchdog.service +0 -0
  329. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-fleet-watchdog.timer +0 -0
  330. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-notify.service +0 -0
  331. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-notify.timer +0 -0
  332. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-release-propagate.service +0 -0
  333. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-release-propagate.timer +0 -0
  334. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-release-window.service +0 -0
  335. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-release-window.timer +0 -0
  336. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-serve.service +0 -0
  337. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-web-dist-build.service +0 -0
  338. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-web-dist-build.sh +0 -0
  339. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-web-dist-build.timer +0 -0
  340. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-web-rollback.sh +0 -0
  341. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/coord-web.service +0 -0
  342. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/deploy/node-shim.sh +0 -0
  343. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ADR_COORD_TUI_CI.md +0 -0
  344. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  345. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ADR_COORD_WEB_CI.md +0 -0
  346. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ADR_COORD_WEB_DIST.md +0 -0
  347. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  348. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/AGENT_OPERATIONS.md +0 -0
  349. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ARCHITECTURE.md +0 -0
  350. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ARCH_SECURITY_GATES.md +0 -0
  351. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/COCKPIT.md +0 -0
  352. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/CONTROL_CENTER.md +0 -0
  353. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/COST_DISCIPLINE.md +0 -0
  354. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/CROSS_PLATFORM.md +0 -0
  355. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/CUSTOMER_FACING_APPS.md +0 -0
  356. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/CUSTOMER_PORTAL.md +0 -0
  357. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/DATA_STORE_SELECTION.md +0 -0
  358. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/DISASTER_RECOVERY.md +0 -0
  359. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/DRIVE_QUEUE.md +0 -0
  360. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/EPHEMERAL_WORKERS.md +0 -0
  361. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/FORGE_MIGRATION.md +0 -0
  362. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/GRAPHIFY_SETUP.md +0 -0
  363. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ISSUE_GUIDANCE.md +0 -0
  364. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/MAC_MINI.md +0 -0
  365. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  366. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/NOTIFIER.md +0 -0
  367. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/OPENCODE_VERIFICATION.md +0 -0
  368. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/OPERATING_GOTCHAS.md +0 -0
  369. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/OPERATOR_GUIDES.md +0 -0
  370. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/ORACLE_LOOP.md +0 -0
  371. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/PHONE_WEBAPP.md +0 -0
  372. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/PIPELINE_V2.md +0 -0
  373. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/PLATFORM_EVOLUTION.md +0 -0
  374. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/SECOND_BACKEND.md +0 -0
  375. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/STORE_SERVICE.md +0 -0
  376. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  377. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/WEB_CONTROL_CENTER.md +0 -0
  378. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/WSL_WINDOWS_WORKER.md +0 -0
  379. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/mocks/web/README.md +0 -0
  380. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/mocks/web/_tokens.css +0 -0
  381. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/mocks/web/issue-detail.html +0 -0
  382. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/mocks/web/pipeline-narrow.html +0 -0
  383. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/docs/mocks/web/pipeline-wide.html +0 -0
  384. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/graphify-out/.gitignore +0 -0
  385. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/install-agent.sh +0 -0
  386. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/audit_review_verdict_overrides.py +0 -0
  387. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  388. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/build-worker-image.sh +0 -0
  389. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/coordinator-machine.py +0 -0
  390. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/dr-down.sh +0 -0
  391. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/dr-up.sh +0 -0
  392. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/epic-down.sh +0 -0
  393. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/epic-up.sh +0 -0
  394. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/preflight.sh +0 -0
  395. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/provision-server.sh +0 -0
  396. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/provision-worker.sh +0 -0
  397. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  398. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  399. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/throwaway-vm.sh +0 -0
  400. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/azure-workers/verify-github-token.sh +0 -0
  401. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/check_gh_argv_containment.py +0 -0
  402. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/codegen.py +0 -0
  403. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-test-runner.sh +0 -0
  404. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  405. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  406. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  407. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  408. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/coord-venv-rollback.sh +0 -0
  409. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/drive-batch.sh +0 -0
  410. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/extract-coord-tui.sh +0 -0
  411. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/fleet_watchdog.py +0 -0
  412. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/gen_board_fixture.py +0 -0
  413. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/gen_mock_index.py +0 -0
  414. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/lib/provision-core.sh +0 -0
  415. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/next_release_tag.py +0 -0
  416. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/provision-machine.sh +0 -0
  417. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/run_tests_in_populated_home.sh +0 -0
  418. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/run_tests_without_gh.sh +0 -0
  419. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/setup-macmini.sh +0 -0
  420. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/smoke_437_interactive.py +0 -0
  421. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/verify-provision-noble.sh +0 -0
  422. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/setup.cfg +0 -0
  426. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-37/conftest.py +0 -0
  429. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-37/contract.md +0 -0
  430. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-37/manifest.yml +0 -0
  431. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  432. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  433. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/contract.md +0 -0
  434. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  435. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  436. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/manifest.yml +0 -0
  437. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  438. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-51/tsconfig.json +0 -0
  439. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  440. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/backends.py +0 -0
  441. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/conftest.py +0 -0
  442. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/board-pipeline-basic.json +0 -0
  443. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  444. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  445. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  446. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  447. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/all_pass.json +0 -0
  448. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  449. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/mixed_fail.json +0 -0
  450. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  451. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  452. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/skip.json +0 -0
  453. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/playwright/truncated.json +0 -0
  454. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  455. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  456. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  457. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  458. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  459. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  460. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  461. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  462. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  463. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_acceptance.py +0 -0
  464. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent.py +0 -0
  465. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_api_error.py +0 -0
  466. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_app.py +0 -0
  467. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_branch_base.py +0 -0
  468. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_branch_capture.py +0 -0
  469. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_config_free_1712.py +0 -0
  470. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_deploy_units_endpoint.py +0 -0
  471. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_dirty_worktree.py +0 -0
  472. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  473. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_graph_self_heal.py +0 -0
  474. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_health_h3.py +0 -0
  475. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_idle_restart.py +0 -0
  476. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_push_failure.py +0 -0
  477. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_reap.py +0 -0
  478. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_repos_and_pull.py +0 -0
  479. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_restart_services_endpoint.py +0 -0
  480. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_skills_self_heal.py +0 -0
  481. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_startup_diagnostics.py +0 -0
  482. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_update.py +0 -0
  483. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_update_bluegreen.py +0 -0
  484. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_usage_limit.py +0 -0
  485. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_agent_zero_commit.py +0 -0
  486. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ambient_home_isolation.py +0 -0
  487. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approve_capability_reroute_3241.py +0 -0
  488. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approve_dependency_busy_2804.py +0 -0
  489. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approve_reject_plan.py +0 -0
  490. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approve_usage_gate.py +0 -0
  491. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approved_work_2532.py +0 -0
  492. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_approved_work_2996.py +0 -0
  493. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_assignment_already_recorded_daemon.py +0 -0
  494. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_audit_log.py +0 -0
  495. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_audit_outcome.py +0 -0
  496. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_audit_query.py +0 -0
  497. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_auto_loop.py +0 -0
  498. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_auto_release_publish_2035.py +0 -0
  499. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_backend_selection.py +0 -0
  500. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_backup.py +0 -0
  501. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_base_checkout_restore.py +0 -0
  502. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_block_log.py +0 -0
  503. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_cap_762.py +0 -0
  504. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_fixture.py +0 -0
  505. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_read_path.py +0 -0
  506. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_schema.py +0 -0
  507. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_service.py +0 -0
  508. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_state.py +0 -0
  509. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_board_wire.py +0 -0
  510. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_brain.py +0 -0
  511. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_branch_model.py +0 -0
  512. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_bug_intake.py +0 -0
  513. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_build_worker_image_env_update.py +0 -0
  514. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cargo_cache.py +0 -0
  515. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_check_gh_argv_containment.py +0 -0
  516. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_acceptance_gate_1950.py +0 -0
  517. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_fix.py +0 -0
  518. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_github.py +0 -0
  519. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_gitlab.py +0 -0
  520. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_parity_2091.py +0 -0
  521. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_ci_store.py +0 -0
  522. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_claim.py +0 -0
  523. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_claude_md_budget.py +0 -0
  524. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_claude_setup_token.py +0 -0
  525. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_assign.py +0 -0
  526. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  527. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_assign_interactive_remote.py +0 -0
  528. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_assign_provider.py +0 -0
  529. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  530. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_audit.py +0 -0
  531. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_chat_continue.py +0 -0
  532. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_ci.py +0 -0
  533. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_codegen.py +0 -0
  534. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_decide.py +0 -0
  535. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_capability_rules.py +0 -0
  536. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_config_provenance.py +0 -0
  537. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_forge_availability.py +0 -0
  538. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_graph.py +0 -0
  539. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_self.py +0 -0
  540. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_diagnose_test_coverage.py +0 -0
  541. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_doctor.py +0 -0
  542. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_doctor_config_free_1801.py +0 -0
  543. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  544. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  545. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_drive.py +0 -0
  546. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_drive_queue.py +0 -0
  547. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_escalate.py +0 -0
  548. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_fix_headless_review.py +0 -0
  549. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_gate_a.py +0 -0
  550. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_install_drift.py +0 -0
  551. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_install_skills.py +0 -0
  552. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_issue_comment.py +0 -0
  553. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_issue_create_label.py +0 -0
  554. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_issue_reopen.py +0 -0
  555. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_issue_view_list.py +0 -0
  556. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_issues.py +0 -0
  557. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_merge.py +0 -0
  558. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_assign.py +0 -0
  559. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_capture.py +0 -0
  560. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_chat_add_child.py +0 -0
  561. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_dispatch.py +0 -0
  562. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_gate_b.py +0 -0
  563. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_gate_c.py +0 -0
  564. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  565. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_milestone_ship.py +0 -0
  566. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_network.py +0 -0
  567. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_new_issue_chat.py +0 -0
  568. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_plans.py +0 -0
  569. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_portal.py +0 -0
  570. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_pr.py +0 -0
  571. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_pull_artifact.py +0 -0
  572. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_queue.py +0 -0
  573. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_reattach_sessions.py +0 -0
  574. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_refine_board.py +0 -0
  575. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_release_preflight.py +0 -0
  576. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_release_propagate.py +0 -0
  577. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_release_window.py +0 -0
  578. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_repo_2220.py +0 -0
  579. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  580. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_scorecard.py +0 -0
  581. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_serve_store_backend_3084.py +0 -0
  582. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_set_review_findings.py +0 -0
  583. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_advisory_terminal.py +0 -0
  584. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_contested_tag.py +0 -0
  585. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_invariant_alarms.py +0 -0
  586. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_machine_fault.py +0 -0
  587. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_merge_queue.py +0 -0
  588. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_provider.py +0 -0
  589. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_retried_3340.py +0 -0
  590. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_review_finalizing.py +0 -0
  591. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_supervisor_3366.py +0 -0
  592. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_test_failed_tag.py +0 -0
  593. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_status_usage_limit.py +0 -0
  594. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_sync_comments_873.py +0 -0
  595. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_test_plan.py +0 -0
  596. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_track.py +0 -0
  597. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_tui_update.py +0 -0
  598. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cli_wait.py +0 -0
  599. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_client.py +0 -0
  600. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_client_base_install.py +0 -0
  601. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_client_config_cache_atomic_3052.py +0 -0
  602. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_client_resource_migration_1946.py +0 -0
  603. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_commands_common.py +0 -0
  604. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_comments.py +0 -0
  605. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_completion_summary.py +0 -0
  606. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config.py +0 -0
  607. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_acceptance.py +0 -0
  608. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_audit.py +0 -0
  609. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_drift_check.py +0 -0
  610. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_effective.py +0 -0
  611. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_pricing.py +0 -0
  612. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  613. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_config_usage_gate.py +0 -0
  614. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_confirm_test.py +0 -0
  615. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_conflict_fix.py +0 -0
  616. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_conflict_fix_semantic.py +0 -0
  617. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  618. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test.py +0 -0
  619. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  620. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test_runner_baseline.py +0 -0
  621. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test_runner_populated_home.py +0 -0
  622. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test_runner_routing.py +0 -0
  623. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_test_runner_toolchain.py +0 -0
  624. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_uat.py +0 -0
  625. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coord_web_sse_restart_live.py +0 -0
  626. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_coordinator_machine.py +0 -0
  627. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_cross_platform_imports.py +0 -0
  628. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dao.py +0 -0
  629. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard.py +0 -0
  630. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard_api.py +0 -0
  631. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard_fixture.py +0 -0
  632. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard_server.py +0 -0
  633. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard_terminal.py +0 -0
  634. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dashboard_terminal_live.py +0 -0
  635. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_db.py +0 -0
  636. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dead_end.py +0 -0
  637. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_decomposition_chat.py +0 -0
  638. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_coord_db_backup.py +0 -0
  639. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_coord_web_dist.py +0 -0
  640. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_coord_web_rollback.py +0 -0
  641. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_db_backup_unit.py +0 -0
  642. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_drive_queue_unit.py +0 -0
  643. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_failure_notify_unit.py +0 -0
  644. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_manifest.py +0 -0
  645. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_notify_unit.py +0 -0
  646. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_units_lane.py +0 -0
  647. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deploy_web_unit.py +0 -0
  648. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deprecation_telemetry.py +0 -0
  649. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_deps.py +0 -0
  650. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_diagnose.py +0 -0
  651. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dispatch.py +0 -0
  652. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dispatch_liveness.py +0 -0
  653. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dispatch_target_validation.py +0 -0
  654. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dispatch_workers.py +0 -0
  655. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dist_name.py +0 -0
  656. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_done_housekeeping.py +0 -0
  657. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dr_azure_scripts.py +0 -0
  658. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dr_promote.py +0 -0
  659. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_dr_verify.py +0 -0
  660. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_machine_fault.py +0 -0
  661. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue.py +0 -0
  662. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_blocked_rendering.py +0 -0
  663. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_launch_argv.py +0 -0
  664. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_max_parallel_config.py +0 -0
  665. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  666. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_roll_pending.py +0 -0
  667. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  668. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_sessions_snapshot.py +0 -0
  669. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_state.py +0 -0
  670. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_drive_tmux.py +0 -0
  671. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_epic_up_capability_detection.py +0 -0
  672. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  673. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_epic_up_image_provenance.py +0 -0
  674. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_errors.py +0 -0
  675. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_events.py +0 -0
  676. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_failure_class.py +0 -0
  677. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_failure_classifier.py +0 -0
  678. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_filelock.py +0 -0
  679. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  680. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fix_escalation_classifier.py +0 -0
  681. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fix_of_force_override.py +0 -0
  682. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fleet_config_health.py +0 -0
  683. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fleet_health_probes.py +0 -0
  684. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fleet_health_snapshot.py +0 -0
  685. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_fleet_watchdog.py +0 -0
  686. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_forge_availability.py +0 -0
  687. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_freshness.py +0 -0
  688. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gate_a.py +0 -0
  689. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gate_b.py +0 -0
  690. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gate_snapshot_staleness.py +0 -0
  691. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gates.py +0 -0
  692. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  693. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_gen_mock_index.py +0 -0
  694. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_generated_rust_fixture.py +0 -0
  695. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_generated_rust_requests.py +0 -0
  696. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_generated_types_fixture.py +0 -0
  697. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_github_ops.py +0 -0
  698. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_github_throttle.py +0 -0
  699. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_goal.py +0 -0
  700. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_graph_health.py +0 -0
  701. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_graph_selfheal_absent_2237.py +0 -0
  702. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_handoff.py +0 -0
  703. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_checks.py +0 -0
  704. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_cli.py +0 -0
  705. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_cli_graph.py +0 -0
  706. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_config.py +0 -0
  707. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_context.py +0 -0
  708. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_coord_tui_ci_pin.py +0 -0
  709. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_coord_web_ci_pin.py +0 -0
  710. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_deploy_lane_facts.py +0 -0
  711. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_fix.py +0 -0
  712. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_incident_regression.py +0 -0
  713. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_issues_sync_staleness.py +0 -0
  714. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_pr_churn.py +0 -0
  715. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_pypi.py +0 -0
  716. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_registry.py +0 -0
  717. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_release_cordon_probe.py +0 -0
  718. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_timer_active.py +0 -0
  719. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_toolchain.py +0 -0
  720. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_unit_drift.py +0 -0
  721. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_unit_enablement.py +0 -0
  722. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_health_wedged_drive_queue.py +0 -0
  723. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_hooks.py +0 -0
  724. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_housekeeping.py +0 -0
  725. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_human_attended_437.py +0 -0
  726. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_init.py +0 -0
  727. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_install_agent_venv_2911.py +0 -0
  728. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_integration.py +0 -0
  729. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive.py +0 -0
  730. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_briefing_echo.py +0 -0
  731. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_pane_log_2541.py +0 -0
  732. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_prefill_state.py +0 -0
  733. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_session_relaunch.py +0 -0
  734. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_test_verdict_backstop.py +0 -0
  735. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_token_attribution.py +0 -0
  736. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_interactive_worktree.py +0 -0
  737. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_invariant_alarms.py +0 -0
  738. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_issue_store_seam.py +0 -0
  739. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_issues_sync_status.py +0 -0
  740. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_liveness_auditor.py +0 -0
  741. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_liveness_notify.py +0 -0
  742. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_lock_contention_ratchet.py +0 -0
  743. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_machine_fault.py +0 -0
  744. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_machine_metrics.py +0 -0
  745. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_machine_onboard.py +0 -0
  746. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_machine_pause.py +0 -0
  747. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_machine_stats.py +0 -0
  748. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_merge_queue.py +0 -0
  749. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_merge_verify.py +0 -0
  750. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_milestone_chat.py +0 -0
  751. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_milestone_order.py +0 -0
  752. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_milestone_seam.py +0 -0
  753. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_mock_author.py +0 -0
  754. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_model_tiering.py +0 -0
  755. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_models.py +0 -0
  756. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_models_config_labels.py +0 -0
  757. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_needs_attention.py +0 -0
  758. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_network.py +0 -0
  759. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_new_issue_chat.py +0 -0
  760. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_next_release_tag.py +0 -0
  761. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_node_shim.py +0 -0
  762. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_baseline.py +0 -0
  763. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_cli.py +0 -0
  764. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_collect.py +0 -0
  765. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_config.py +0 -0
  766. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_drive_seam.py +0 -0
  767. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_isolation.py +0 -0
  768. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_predicate.py +0 -0
  769. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_quiet_hours.py +0 -0
  770. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notifier_service.py +0 -0
  771. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notify.py +0 -0
  772. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_notify_drain.py +0 -0
  773. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_openapi.py +0 -0
  774. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_operational_defaults.py +0 -0
  775. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_overlap_fence.py +0 -0
  776. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_overlap_predict.py +0 -0
  777. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_packaged_deploy_units.py +0 -0
  778. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_parentage.py +0 -0
  779. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_paste_landed.py +0 -0
  780. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  781. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_pipeline.py +0 -0
  782. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_plan_followup_approve_plan_command.py +0 -0
  783. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_plan_followup_pr_command.py +0 -0
  784. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_plan_followup_review_command.py +0 -0
  785. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_plan_only.py +0 -0
  786. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_plan_parser.py +0 -0
  787. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_platform_paths.py +0 -0
  788. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_portal_bridge.py +0 -0
  789. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_portal_config.py +0 -0
  790. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_portal_store.py +0 -0
  791. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_portal_sync.py +0 -0
  792. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_pr_body_lint.py +0 -0
  793. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_prereqs.py +0 -0
  794. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_production_db_guard.py +0 -0
  795. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_progress.py +0 -0
  796. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_provider_seam.py +0 -0
  797. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_providers.py +0 -0
  798. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_providers_config_labels.py +0 -0
  799. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_providers_pty.py +0 -0
  800. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_provision_core.py +0 -0
  801. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_provision_machine.py +0 -0
  802. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_py_rust_mirror_inventory.py +0 -0
  803. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_quiet_hours.py +0 -0
  804. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_quiet_hours_store_2146.py +0 -0
  805. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reap_merged_sessions.py +0 -0
  806. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reap_stale_interactive_tick.py +0 -0
  807. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile.py +0 -0
  808. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_branch.py +0 -0
  809. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_completions.py +0 -0
  810. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  811. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_merges.py +0 -0
  812. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_no_agent_record.py +0 -0
  813. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_tick.py +0 -0
  814. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reconcile_usage_limit_done.py +0 -0
  815. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_refine_chat.py +0 -0
  816. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_cordon_2101.py +0 -0
  817. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  818. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_cordon_deadlock_2240.py +0 -0
  819. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  820. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_cordon_stuck_2490.py +0 -0
  821. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_propagate.py +0 -0
  822. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_propagate_threshold.py +0 -0
  823. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_roll_between_legs_2854.py +0 -0
  824. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_roll_window_handoff.py +0 -0
  825. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_unified_1242.py +0 -0
  826. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_verify.py +0 -0
  827. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_release_window.py +0 -0
  828. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_remote_auto_prune.py +0 -0
  829. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_remote_interactive_reaper.py +0 -0
  830. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_add.py +0 -0
  831. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_dormancy.py +0 -0
  832. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_edit_2220.py +0 -0
  833. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_graph_fleet_2237.py +0 -0
  834. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_max_parallel_3423.py +0 -0
  835. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_repo_onboard_2220.py +0 -0
  836. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_report_result_push.py +0 -0
  837. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_reports.py +0 -0
  838. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_restart_cmd.py +0 -0
  839. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_retry.py +0 -0
  840. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_retry_advisory_1606.py +0 -0
  841. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_retry_escalation_classify_3360.py +0 -0
  842. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_retry_type_1636.py +0 -0
  843. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_revalidate.py +0 -0
  844. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review.py +0 -0
  845. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_end_review_without_verdict.py +0 -0
  846. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_parse_failure_diagnostic.py +0 -0
  847. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_reaffirm.py +0 -0
  848. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_state.py +0 -0
  849. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_verdict_backstop.py +0 -0
  850. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_verdict_override_audit.py +0 -0
  851. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_verdict_relay.py +0 -0
  852. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_review_zero_commits.py +0 -0
  853. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_scoped_review_wiring.py +0 -0
  854. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_scorecard.py +0 -0
  855. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_self_health.py +0 -0
  856. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_serve.py +0 -0
  857. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_serve_app.py +0 -0
  858. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_serve_app_board_trim.py +0 -0
  859. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_serve_rest_routes.py +0 -0
  860. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_session.py +0 -0
  861. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_slice_issue_attribution.py +0 -0
  862. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_smoke.py +0 -0
  863. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  864. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_smoke_live_checkout_restore.py +0 -0
  865. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_smoke_workflow.py +0 -0
  866. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_spend_ceiling.py +0 -0
  867. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_spend_ceiling_coordinator.py +0 -0
  868. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_split.py +0 -0
  869. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_split_work.py +0 -0
  870. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_sql_dialect.py +0 -0
  871. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_sqlite_connect_ratchet.py +0 -0
  872. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stage_projection.py +0 -0
  873. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stale_busy_reviewer_697.py +0 -0
  874. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stalled_pipeline.py +0 -0
  875. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_state.py +0 -0
  876. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_state_review_findings_daemon.py +0 -0
  877. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_status_fleet_footer.py +0 -0
  878. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stop_1567.py +0 -0
  879. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_store_contract.py +0 -0
  880. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_store_migrate.py +0 -0
  881. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stuck.py +0 -0
  882. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  883. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_terminal_command.py +0 -0
  884. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_author.py +0 -0
  885. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_chat.py +0 -0
  886. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_orchestrator.py +0 -0
  887. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_report.py +0 -0
  888. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_verdict_parsing.py +0 -0
  889. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_test_verdict_transcript_floor.py +0 -0
  890. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_text_io_encoding_audit.py +0 -0
  891. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_thin_client_board_audit.py +0 -0
  892. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_thin_client_config_load_1080.py +0 -0
  893. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_thin_client_daemon_routing_906.py +0 -0
  894. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_throwaway_vm.py +0 -0
  895. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_tmux_host.py +0 -0
  896. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_tmux_session.py +0 -0
  897. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_transcript_floor.py +0 -0
  898. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_uat_checks.py +0 -0
  899. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_usage.py +0 -0
  900. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_usage_limits.py +0 -0
  901. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_usage_rollup.py +0 -0
  902. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_venv_live_install_2121.py +0 -0
  903. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_version_single_source.py +0 -0
  904. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_watch.py +0 -0
  905. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  906. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worker_env_venv_isolation.py +0 -0
  907. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worker_events.py +0 -0
  908. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worker_image_pin_sync.py +0 -0
  909. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worker_safety.py +0 -0
  910. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worker_test_scoping.py +0 -0
  911. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worktree.py +0 -0
  912. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  913. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/tests/test_write_parity.py +0 -0
  914. {code_coordinator-0.5.543 → code_coordinator-0.5.545}/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.543
3
+ Version: 0.5.545
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
@@ -30,12 +30,17 @@ Provides-Extra: postgres
30
30
  Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
31
31
  Provides-Extra: reports-xlsx
32
32
  Requires-Dist: openpyxl>=3.1; extra == "reports-xlsx"
33
+ Provides-Extra: tui-pty
34
+ Requires-Dist: pyte>=0.8; extra == "tui-pty"
35
+ Requires-Dist: pywinpty>=2.0; sys_platform == "win32" and extra == "tui-pty"
33
36
  Provides-Extra: all
34
37
  Requires-Dist: code-coordinator[server]; extra == "all"
35
38
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
39
+ Requires-Dist: code-coordinator[tui-pty]; extra == "all"
36
40
  Provides-Extra: dev
37
41
  Requires-Dist: code-coordinator[server]; extra == "dev"
38
42
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "dev"
43
+ Requires-Dist: code-coordinator[tui-pty]; extra == "dev"
39
44
  Requires-Dist: pytest>=8.0; extra == "dev"
40
45
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
41
46
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.543
3
+ Version: 0.5.545
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
@@ -30,12 +30,17 @@ Provides-Extra: postgres
30
30
  Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
31
31
  Provides-Extra: reports-xlsx
32
32
  Requires-Dist: openpyxl>=3.1; extra == "reports-xlsx"
33
+ Provides-Extra: tui-pty
34
+ Requires-Dist: pyte>=0.8; extra == "tui-pty"
35
+ Requires-Dist: pywinpty>=2.0; sys_platform == "win32" and extra == "tui-pty"
33
36
  Provides-Extra: all
34
37
  Requires-Dist: code-coordinator[server]; extra == "all"
35
38
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
39
+ Requires-Dist: code-coordinator[tui-pty]; extra == "all"
36
40
  Provides-Extra: dev
37
41
  Requires-Dist: code-coordinator[server]; extra == "dev"
38
42
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "dev"
43
+ Requires-Dist: code-coordinator[tui-pty]; extra == "dev"
39
44
  Requires-Dist: pytest>=8.0; extra == "dev"
40
45
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
41
46
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
@@ -163,6 +163,7 @@ coord/test_author.py
163
163
  coord/test_chat.py
164
164
  coord/test_orchestrator.py
165
165
  coord/test_report.py
166
+ coord/tui_pty_driver.py
166
167
  coord/tui_release.py
167
168
  coord/uat_checks.py
168
169
  coord/usage.py
@@ -858,6 +859,7 @@ tests/test_throwaway_vm.py
858
859
  tests/test_tmux_host.py
859
860
  tests/test_tmux_session.py
860
861
  tests/test_transcript_floor.py
862
+ tests/test_tui_pty_driver.py
861
863
  tests/test_uat_checks.py
862
864
  tests/test_usage.py
863
865
  tests/test_usage_limits.py
@@ -9,10 +9,12 @@ tzdata
9
9
  [all]
10
10
  code-coordinator[server]
11
11
  code-coordinator[reports-xlsx]
12
+ code-coordinator[tui-pty]
12
13
 
13
14
  [dev]
14
15
  code-coordinator[server]
15
16
  code-coordinator[reports-xlsx]
17
+ code-coordinator[tui-pty]
16
18
  pytest>=8.0
17
19
  pytest-asyncio>=0.23
18
20
  pytest-xdist>=3.5
@@ -31,3 +33,9 @@ starlette>=0.37
31
33
  uvicorn>=0.30
32
34
  websockets>=12.0
33
35
  psutil>=5.9
36
+
37
+ [tui-pty]
38
+ pyte>=0.8
39
+
40
+ [tui-pty:sys_platform == "win32"]
41
+ pywinpty>=2.0
@@ -290,6 +290,7 @@
290
290
  "coord/test_chat.py",
291
291
  "coord/test_orchestrator.py",
292
292
  "coord/test_report.py",
293
+ "coord/tui_pty_driver.py",
293
294
  "coord/tui_release.py",
294
295
  "coord/uat_checks.py",
295
296
  "coord/usage.py",
@@ -885,6 +886,7 @@
885
886
  "tests/test_tmux_host.py",
886
887
  "tests/test_tmux_session.py",
887
888
  "tests/test_transcript_floor.py",
889
+ "tests/test_tui_pty_driver.py",
888
890
  "tests/test_uat_checks.py",
889
891
  "tests/test_usage.py",
890
892
  "tests/test_usage_limits.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.543",
2
+ "tag": "0.5.545",
3
3
  "distance": 0,
4
- "node": "g46bffa6e864139be6fd12e036d29b7d76c2a4c02",
4
+ "node": "g43201054b1bb8cd75c1a632db8f016f315da8957",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-30"
@@ -8,11 +8,11 @@ is the one seam that varies per medium — TUI (quadraui ``TuiDriver``), CLI
8
8
  normalized list of ``{"id": str, "status": "pass"|"fail"|"skip", "message":
9
9
  str}`` dicts (``cli-pytest`` additionally carries ``"expected"``/``"got"``
10
10
  on a failing test — see :func:`parse_pytest_junit_xml`). ``tui-tuidriver``,
11
- ``cli-pytest`` (#1125), ``web-playwright`` (#1539), and ``terraform``
12
- (#3232) are implemented; other ``kind`` values are declared in
13
- ``coordinator.yml`` (see :class:`coord.config.AcceptanceConfig`) but
14
- rejected here with a clear "not yet implemented" error until their issues
15
- land (native).
11
+ ``cli-pytest`` (#1125), ``web-playwright`` (#1539), ``terraform``
12
+ (#3232), and ``tui-pty`` (#3483) are implemented; other ``kind`` values are
13
+ declared in ``coordinator.yml`` (see :class:`coord.config.AcceptanceConfig`)
14
+ but rejected here with a clear "not yet implemented" error until their
15
+ issues land (native).
16
16
 
17
17
  ``cli-pytest`` parses pytest's built-in ``--junit-xml`` report (a core
18
18
  pytest flag, not a plugin — no extra dependency required in the driven
@@ -45,6 +45,22 @@ enough to run ``validate`` at all) comes out regardless of what the driven
45
45
  repo's own terraform version prints to plain stdout. This is a compile
46
46
  check, not an acceptance oracle — see :data:`VALIDATE_ONLY_KINDS`.
47
47
 
48
+ ``tui-pty`` (#3483, Tier 2 of the TUI acceptance ladder — ``tui-tuidriver``
49
+ above is Tier 1, in-process) launches the driven repo's real compiled
50
+ binary under a real pty/ConPTY and drives it with real terminal byte
51
+ sequences, rather than going through quadraui's in-process ``TuiDriver``.
52
+ Three real Windows TUI bugs (vimcode#1634-#1636) all passed their
53
+ in-process tests on 2026-09-29 — the bytes an in-process harness feeds and
54
+ reads are never generated by, or read back through, a real terminal, so a
55
+ whole class of bug is invisible to it by construction. All of the actual
56
+ byte-level driving, the VT emulation, and the platform-neutral YAML smoke
57
+ spec live in :mod:`coord.tui_pty_driver` — see that module's docstring for
58
+ the spec format and the ``ESC[6n`` startup-handshake lesson folded in from
59
+ vimcode's own ConPTY tests. This adapter (:func:`_run_tui_pty`) is a thin
60
+ seam: it resolves the smoke spec from the driver's ``entrypoint:`` (the
61
+ ``tui-pty`` analogue of ``tui-tuidriver``'s own entrypoint-as-sealed-file
62
+ convention) and hands off to :func:`coord.tui_pty_driver.run_smoke_spec`.
63
+
48
64
  ``terraform`` additionally runs a deterministic policy gate (#3234, epic
49
65
  #3230 child 3) whenever the driven repo has opted in by carrying the
50
66
  convention files: ``tflint`` (rule-based HCL/provider checks — pinned
@@ -75,7 +91,7 @@ from pathlib import Path
75
91
  # Driver kinds this module knows how to run. Keep in sync with the adapters
76
92
  # implemented below — a kind can be *declared* in coordinator.yml ahead of its
77
93
  # adapter landing, but running it must fail loudly rather than silently no-op.
78
- SUPPORTED_KINDS = ("tui-tuidriver", "cli-pytest", "web-playwright", "terraform")
94
+ SUPPORTED_KINDS = ("tui-tuidriver", "cli-pytest", "web-playwright", "terraform", "tui-pty")
79
95
 
80
96
  # #2748 (IL-2): driver kinds whose `run` produces a real pass/fail verdict
81
97
  # but NOT yet a deterministic one, because an input they depend on hasn't
@@ -229,7 +245,7 @@ def render_run_command(run_command: str, *, ms: str | None = None) -> str:
229
245
 
230
246
  def run_driver(
231
247
  kind: str, run_command: str, cwd: str, *, timeout: int = 900, ms: str | None = None,
232
- setup_command: str = "",
248
+ setup_command: str = "", entrypoint: str = "",
233
249
  ) -> DriverResult:
234
250
  """Execute *run_command* in *cwd* and parse its output for *kind*.
235
251
 
@@ -250,6 +266,13 @@ def run_driver(
250
266
  before *run_command* ever executes — with a message that names it as a
251
267
  provisioning failure so it isn't mistaken for a test failure or folded
252
268
  into a driver's own "wrote no report" crash message.
269
+
270
+ *entrypoint* (``AcceptanceDriverConfig.entrypoint``) is only consulted
271
+ by ``tui-pty`` (#3483) — it names the repo-root-relative smoke-spec YAML
272
+ file (see :mod:`coord.tui_pty_driver`), the same way ``entrypoint``
273
+ already names ``tui-tuidriver``'s sealed Rust acceptance file for
274
+ :func:`coord.acceptance.acceptance_root_for_driver`. Every other kind
275
+ ignores it.
253
276
  """
254
277
  if kind not in SUPPORTED_KINDS:
255
278
  raise DriverError(
@@ -269,6 +292,8 @@ def run_driver(
269
292
  return _run_web_playwright(run_command, cwd, timeout=timeout)
270
293
  if kind == "terraform":
271
294
  return _run_terraform(run_command, cwd, timeout=timeout)
295
+ if kind == "tui-pty":
296
+ return _run_tui_pty(run_command, cwd, entrypoint, timeout=timeout)
272
297
  return _run_generic(run_command, cwd, timeout=timeout)
273
298
 
274
299
 
@@ -572,6 +597,68 @@ def _run_terraform_policy_gate(cwd: str, *, timeout: int) -> tuple[list[dict], s
572
597
  return tests, raw_output
573
598
 
574
599
 
600
+ def _run_tui_pty(run_command: str, cwd: str, entrypoint: str, *, timeout: int) -> DriverResult:
601
+ """The ``tui-pty`` shape (#3483): *run_command* is the shell command
602
+ that launches the driven repo's real compiled binary (e.g.
603
+ ``./target/release/vcd``) — the platform-neutral smoke spec YAML that
604
+ drives it lives at *entrypoint* (repo-root-relative), the ``tui-pty``
605
+ analogue of ``tui-tuidriver``'s own ``entrypoint:``-as-sealed-file
606
+ convention (see the module docstring and CLAUDE.md's sealed-paths
607
+ section).
608
+
609
+ All the actual pty/ConPTY spawning, real terminal-byte input, and VT
610
+ screen assertions live in :mod:`coord.tui_pty_driver` — this function is
611
+ the thin seam that resolves *entrypoint* to a spec file and calls
612
+ :func:`coord.tui_pty_driver.run_smoke_spec`, then folds its normalized
613
+ ``tests`` list into a :class:`DriverResult` the same way every other
614
+ kind in this module does.
615
+
616
+ Raises :class:`DriverError` — never a bare exception — for a missing
617
+ ``entrypoint:``, a spec file that doesn't exist, or a malformed spec
618
+ (an invalid-YAML/unknown-step-type :class:`coord.tui_pty_driver.TuiPtySpecError`).
619
+ A child process that dies mid-run, a step that times out, or a failed
620
+ assertion do NOT raise here — :func:`coord.tui_pty_driver.run_smoke_spec`
621
+ folds those into individual failing entries in ``tests`` instead, so a
622
+ real regression (e.g. vimcode#1634's idle-flicker check) reads as a
623
+ normal failing test, not a crashed driver run.
624
+ """
625
+ from coord.tui_pty_driver import ( # noqa: PLC0415 — see module docstring on the deferred import
626
+ TuiPtyRuntimeError,
627
+ TuiPtySpecError,
628
+ run_smoke_spec,
629
+ )
630
+
631
+ if not entrypoint:
632
+ raise DriverError(
633
+ "tui-pty driver requires an `entrypoint:` naming the smoke-spec "
634
+ "YAML file (repo-root-relative) — none configured"
635
+ )
636
+ spec_path = Path(cwd) / entrypoint
637
+ if not spec_path.is_file():
638
+ raise DriverError(f"tui-pty smoke spec not found: {spec_path}")
639
+
640
+ try:
641
+ spec_text = spec_path.read_text()
642
+ except OSError as e:
643
+ raise DriverError(f"tui-pty smoke spec could not be read: {spec_path}: {e}") from e
644
+
645
+ try:
646
+ tests = run_smoke_spec(
647
+ spec_text, launch_command=run_command, cwd=cwd, timeout=timeout,
648
+ )
649
+ except TuiPtySpecError as e:
650
+ raise DriverError(f"tui-pty smoke spec is invalid: {e}") from e
651
+ except TuiPtyRuntimeError as e:
652
+ raise DriverError(f"tui-pty driver could not run: {e}") from e
653
+
654
+ exit_code = 0 if tests and all(t.get("status") != "fail" for t in tests) else 1
655
+ raw_output = "\n".join(
656
+ f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
657
+ for t in tests
658
+ )
659
+ return DriverResult(exit_code=exit_code, tests=tests, raw_output=raw_output)
660
+
661
+
575
662
  def parse_test_output(output: str) -> list[dict]:
576
663
  """Parse a driver's stdout into normalized ``{"id", "status", "message"}``.
577
664
 
@@ -352,7 +352,7 @@ def acceptance_run(
352
352
  try:
353
353
  result = run_driver(
354
354
  driver_cfg.kind, driver_cfg.run, cwd=str(cwd), ms=ms,
355
- setup_command=driver_cfg.setup,
355
+ setup_command=driver_cfg.setup, entrypoint=driver_cfg.entrypoint,
356
356
  )
357
357
  except DriverError as e:
358
358
  click.echo(f"error: {e}", err=True)
@@ -1019,7 +1019,7 @@ def _acceptance_record_local(
1019
1019
  try:
1020
1020
  result = run_driver(
1021
1021
  driver_cfg.kind, driver_cfg.run, cwd=str(wt_path), ms=ms,
1022
- setup_command=driver_cfg.setup,
1022
+ setup_command=driver_cfg.setup, entrypoint=driver_cfg.entrypoint,
1023
1023
  )
1024
1024
  except DriverError as e:
1025
1025
  click.echo(f"error: {e}", err=True)
@@ -25,8 +25,10 @@ from coord.milestone_dispatch import (
25
25
  MilestoneDispatchError,
26
26
  dispatch_entry,
27
27
  fetch_milestone_context,
28
+ gate_a_probe,
28
29
  gate_a_status,
29
30
  is_milestone_complete,
31
+ milestone_oracle_loop,
30
32
  pick_machine,
31
33
  plan_dispatch,
32
34
  plan_queue,
@@ -1106,11 +1108,16 @@ def milestone_dispatch_cmd(
1106
1108
  # #2542: under oracle-loop control (Gate A already checked above), chain
1107
1109
  # the whole milestone's drive-queue entries so the tick can never launch
1108
1110
  # two of them at once — see plan_queue's own docstring for why.
1111
+ # #2785: resolved per milestone via `milestone_oracle_loop`, not the
1112
+ # repo-level `has_driver` alone. `block_reason` above already confirms
1113
+ # this milestone's Gate-A contract exists (we'd have exited otherwise).
1109
1114
  queue_plan = plan_queue(
1110
1115
  ctx.work_order,
1111
1116
  ctx.terminal_issues,
1112
1117
  repo_entry.name,
1113
- oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1118
+ oracle_loop=milestone_oracle_loop(
1119
+ repo_entry, cfg, gate_a_satisfied=block_reason is None
1120
+ ),
1114
1121
  )
1115
1122
 
1116
1123
  if not queue_plan:
@@ -1318,10 +1325,26 @@ def milestone_drive_cmd(
1318
1325
  # #2542: pass the same `oracle_loop` the gate tick itself will use, so
1319
1326
  # this preview never shows more than the one entry the actual `work`
1320
1327
  # gate would dispatch for an oracle-loop milestone.
1328
+ # #2785: resolved per milestone via `milestone_oracle_loop`, not the
1329
+ # repo-level `has_driver` alone.
1330
+ #
1331
+ # #2785 review (non-blocking): reads the DURABLE `record.cleared` (has
1332
+ # GATE_A already been stamped as cleared for this milestone?) rather
1333
+ # than `probes.gate_a_blocked` — that field is a fresh live Gate-A
1334
+ # re-probe (`probe_milestone`'s own docstring), and folding a single
1335
+ # transient read failure there straight into `gate_a_satisfied=False`
1336
+ # would cosmetically over-show this preview's ready frontier for one
1337
+ # invocation. `_milestone_gate_tick`'s WORK-state dispatch (the thing
1338
+ # this preview mirrors) already made this same durable-vs-live switch
1339
+ # for the identical reason — matching it here keeps the preview and the
1340
+ # actual tick reading the same signal instead of two that can flap
1341
+ # independently.
1321
1342
  if ctx.work_order.nodes:
1322
1343
  plan = plan_dispatch(
1323
1344
  ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues,
1324
- oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1345
+ oracle_loop=milestone_oracle_loop(
1346
+ repo_entry, cfg, gate_a_satisfied=mg.GATE_A in record.cleared
1347
+ ),
1325
1348
  )
1326
1349
  to_dispatch, skipped, waiting, deferred = (
1327
1350
  plan.to_dispatch, plan.skipped, plan.waiting, plan.deferred,
@@ -1501,9 +1524,39 @@ def milestone_write_order_cmd(
1501
1524
  # (coord-portal#122). Cheap/early check for the explicit-group case only
1502
1525
  # — see validate_no_shared_oracle_group's docstring for what it can't
1503
1526
  # catch.
1527
+ #
1528
+ # #2785: resolved PER MILESTONE via `milestone_oracle_loop` — NOT
1529
+ # `cfg.acceptance.has_driver(repo_entry.name)` alone, which is true for
1530
+ # every milestone in a repo that has ever declared ANY acceptance
1531
+ # driver and so wrongly refused #1949's (ms-60's) work order, which
1532
+ # shares no manifest with anything since ms-60 has no
1533
+ # `tests/acceptance/ms-60/` at all. No other Gate-A probe has run yet in
1534
+ # this command, so resolve one fresh via `gate_a_probe` — the same
1535
+ # existence check `coord milestone dispatch` performs.
1536
+ #
1537
+ # #2785 review: unlike `milestone_dispatch_cmd`/`milestone_drive_cmd`,
1538
+ # this command must NOT abort on a *confirmed*-absent contract — ms-60
1539
+ # has no contract at all and that is exactly the correctly-permissive
1540
+ # case (`gate_a_satisfied=False` -> `oracle_loop=False` -> shared groups
1541
+ # allowed), the whole point of this issue. Only a *transient* read
1542
+ # failure (`GateAResult.transient`, #2973's tri-state) must abort:
1543
+ # folding it into `gate_a_satisfied=False` would silently disable the
1544
+ # shared-group refusal for a milestone that may well be oracle-loop-
1545
+ # controlled, purely because of ordinary GitHub flakiness — the #2785
1546
+ # review's blocking finding. `gate_a_status`'s plain `str | None` can't
1547
+ # tell the two apart, so this uses `gate_a_probe` directly.
1548
+ probe = gate_a_probe(repo_entry, cfg, milestone_number)
1549
+ if probe.transient:
1550
+ click.echo(f"error: {probe.block_reason}", err=True)
1551
+ sys.exit(1)
1552
+
1504
1553
  try:
1505
1554
  validate_no_shared_oracle_group(
1506
- work_order, oracle_loop=cfg.acceptance.has_driver(repo_entry.name)
1555
+ work_order,
1556
+ oracle_loop=milestone_oracle_loop(
1557
+ repo_entry, cfg,
1558
+ gate_a_satisfied=probe.block_reason is None,
1559
+ ),
1507
1560
  )
1508
1561
  except WorkOrderError as e:
1509
1562
  click.echo(f"error: {e}", err=True)
@@ -1789,7 +1842,10 @@ def milestone_gate_c_cmd(
1789
1842
  # suite dir for Gate C's "full accumulated suite" semantics.
1790
1843
  ms = ms_dirname(ctx.milestone_number)
1791
1844
  try:
1792
- result = run_driver(driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms)
1845
+ result = run_driver(
1846
+ driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms,
1847
+ entrypoint=driver_cfg.entrypoint,
1848
+ )
1793
1849
  except DriverError as e:
1794
1850
  click.echo(f"error: {e}", err=True)
1795
1851
  sys.exit(1)
@@ -2095,7 +2151,10 @@ def milestone_ship_cmd(
2095
2151
  click.echo(f"Gate C: running the full accumulated acceptance suite in {repo_dir}...")
2096
2152
  ms = ms_dirname(ctx.milestone_number)
2097
2153
  try:
2098
- result = run_driver(driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms)
2154
+ result = run_driver(
2155
+ driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms,
2156
+ entrypoint=driver_cfg.entrypoint,
2157
+ )
2099
2158
  except DriverError as e:
2100
2159
  click.echo(f"error: {e}", err=True)
2101
2160
  sys.exit(1)
@@ -37,7 +37,7 @@ Three call sites share this module:
37
37
  from __future__ import annotations
38
38
 
39
39
  from dataclasses import dataclass, field
40
- from typing import TYPE_CHECKING, Callable, Iterable
40
+ from typing import TYPE_CHECKING, Callable, Iterable, NamedTuple
41
41
 
42
42
  import httpx
43
43
 
@@ -61,7 +61,10 @@ __all__ = [
61
61
  "MilestoneContext",
62
62
  "fetch_milestone_context",
63
63
  "GateAFileExists",
64
+ "GateAResult",
65
+ "gate_a_probe",
64
66
  "gate_a_status",
67
+ "milestone_oracle_loop",
65
68
  "ManifestFetch",
66
69
  "GateAApprovalFetch",
67
70
  "gate_a_signoff",
@@ -220,22 +223,51 @@ def _default_gate_a_file_exists(repo_github: str, path: str, branch: str) -> boo
220
223
  return False
221
224
 
222
225
 
223
- def gate_a_status(
226
+ class GateAResult(NamedTuple):
227
+ """The full tri-state result of a Gate-A existence check (#2785 review).
228
+
229
+ ``gate_a_status`` (below) collapses this into a plain ``str | None`` for
230
+ the callers that just want to abort on ANY truthy result — dispatch/drive
231
+ correctly treat "confirmed absent" and "read failed" identically, since
232
+ neither justifies dispatching. But a caller resolving
233
+ :func:`milestone_oracle_loop`'s ``gate_a_satisfied`` needs to tell the two
234
+ apart: a *confirmed* absence legitimately means "not oracle-loop, nothing
235
+ to race on yet" (``gate_a_satisfied=False`` is correct), while a
236
+ *transient* read failure means the answer is unknown and must not be
237
+ silently folded into the same "not oracle-loop" branch — that would
238
+ disable #2542's shared-group refusal for a milestone that may well be
239
+ under oracle-loop control, purely because of ordinary GitHub flakiness.
240
+
241
+ ``block_reason`` is ``None`` when Gate A is satisfied (dispatch may
242
+ proceed); otherwise a human-readable message, exactly as
243
+ :func:`gate_a_status` returns. ``transient`` is ``True`` only when
244
+ ``block_reason`` is set because of a failed *read* (network, auth, a
245
+ rate limit) rather than a confirmed 404 on every candidate path.
246
+ """
247
+
248
+ block_reason: str | None
249
+ transient: bool = False
250
+
251
+
252
+ def gate_a_probe(
224
253
  repo_cfg: Repo,
225
254
  config: "Config",
226
255
  milestone_number: int,
227
256
  *,
228
257
  file_exists: GateAFileExists | None = None,
229
- ) -> str | None:
258
+ ) -> GateAResult:
230
259
  """Gate A (docs/ORACLE_LOOP.md, #930): a milestone's issues may not
231
260
  dispatch until its black-box contract exists.
232
261
 
233
- Returns ``None`` when dispatch may proceed — either the repo has no
234
- ``acceptance.drivers`` entry configured (Gate A is an oracle-loop
235
- concept; repos outside that model dispatch exactly as before #930), or
236
- the contract file already exists on the repo's default branch. Returns a
237
- human-readable block reason otherwise, naming the missing path and the
238
- command that produces it.
262
+ Returns a :class:`GateAResult` whose ``block_reason`` is ``None`` when
263
+ dispatch may proceed — either the repo has no ``acceptance.drivers``
264
+ entry configured (Gate A is an oracle-loop concept; repos outside that
265
+ model dispatch exactly as before #930), or the contract file already
266
+ exists on the repo's default branch. Otherwise ``block_reason`` is a
267
+ human-readable message naming the missing path and the command that
268
+ produces it, and ``transient`` says whether that's a confirmed absence
269
+ or an inconclusive (failed) read — see :class:`GateAResult`'s own
270
+ docstring for why the distinction matters.
239
271
 
240
272
  #2896: a bare *milestone_number* doesn't say which acceptance search
241
273
  root its contract lives under (the shared repo-root tree, or an
@@ -259,7 +291,7 @@ def gate_a_status(
259
291
  remedy attached.
260
292
  """
261
293
  if not config.acceptance.has_driver(repo_cfg.name):
262
- return None
294
+ return GateAResult(None)
263
295
 
264
296
  from coord import github_ops # noqa: PLC0415
265
297
  from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
@@ -270,19 +302,20 @@ def gate_a_status(
270
302
  for path in candidates:
271
303
  try:
272
304
  if check(repo_cfg.github, path, repo_cfg.default_branch):
273
- return None
305
+ return GateAResult(None)
274
306
  except github_ops.GhTransientError as e:
275
307
  transient = transient or e
276
308
  continue
277
309
  if transient is not None:
278
- return (
310
+ return GateAResult(
279
311
  f"Gate A undetermined: could not read {repo_cfg.name}'s Gate-A "
280
312
  f"contract on {repo_cfg.default_branch!r} ({transient}). This is "
281
313
  "a failed read, not a confirmed absence — the contract may well "
282
- "exist. Retry once the rate limit clears."
314
+ "exist. Retry once the rate limit clears.",
315
+ transient=True,
283
316
  )
284
317
  named = " or ".join(repr(p) for p in candidates)
285
- return (
318
+ return GateAResult(
286
319
  f"Gate A not satisfied: {named} does not exist yet on "
287
320
  f"{repo_cfg.default_branch!r}. Run `coord acceptance mock {repo_cfg.name} "
288
321
  "<tracking_issue>` (docs/ORACLE_LOOP.md) to render the mock + write "
@@ -290,6 +323,81 @@ def gate_a_status(
290
323
  )
291
324
 
292
325
 
326
+ def gate_a_status(
327
+ repo_cfg: Repo,
328
+ config: "Config",
329
+ milestone_number: int,
330
+ *,
331
+ file_exists: GateAFileExists | None = None,
332
+ ) -> str | None:
333
+ """Thin ``str | None`` view over :func:`gate_a_probe`, for the callers
334
+ (``milestone_dispatch_cmd``, ``milestone_drive_cmd``,
335
+ ``_milestone_drain_tick``) that only need to know whether to abort —
336
+ they already treat a confirmed absence and a transient read failure
337
+ identically (abort either way, since neither justifies dispatching), so
338
+ dropping ``GateAResult.transient`` here is safe for them. A caller that
339
+ needs to tell the two apart (:func:`milestone_oracle_loop`'s
340
+ ``gate_a_satisfied``) should call :func:`gate_a_probe` directly instead.
341
+ """
342
+ return gate_a_probe(
343
+ repo_cfg, config, milestone_number, file_exists=file_exists
344
+ ).block_reason
345
+
346
+
347
+ def milestone_oracle_loop(
348
+ repo_cfg: Repo,
349
+ config: "Config",
350
+ *,
351
+ gate_a_satisfied: bool,
352
+ ) -> bool:
353
+ """Whether a milestone is actually under oracle-loop control (#2785).
354
+
355
+ #2542 introduced a family of checks/behaviors keyed on "is this
356
+ milestone oracle-loop-controlled" (:func:`coord.milestone_order.
357
+ validate_no_shared_oracle_group`'s shared-group refusal,
358
+ :func:`plan_dispatch`'s one-entry-per-tick cap, :func:`plan_queue`'s
359
+ whole-milestone ``after=`` chaining) — but every one of those call sites
360
+ resolved the question from ``config.acceptance.has_driver(repo_cfg.
361
+ name)`` alone. That is a REPO-level fact (does this repo declare ANY
362
+ acceptance driver at all, for ANY milestone), not a per-milestone one.
363
+ A repo can have a driver configured and still run milestones that never
364
+ touch the oracle loop at all — this repo's own ms-60 (Store Service,
365
+ plain refactors, no ``tests/acceptance/ms-60/``) alongside ms-37/ms-65
366
+ (real oracle-loop milestones). Under the old resolution EVERY milestone
367
+ in a repo that has EVER declared a driver was treated as oracle-loop-
368
+ controlled — #1949 (ms-60's tracking epic) had its `## Work order`
369
+ become permanently un-editable, refusing shared groups that pose no
370
+ actual hazard, because there is no ``tests/acceptance/ms-60/manifest.
371
+ yml`` for anything to race on.
372
+
373
+ True only when the repo has a driver configured AND *this milestone's*
374
+ Gate-A contract already exists (``gate_a_satisfied`` — the caller's
375
+ already-resolved :func:`gate_a_status` existence probe: ``... is
376
+ None``, the same signal :func:`coord.acceptance.gate_a_contract_candidates`
377
+ checks for). A milestone with no contract yet has nothing to race on
378
+ either: nobody has authored a JIT acceptance slice into a manifest that
379
+ doesn't exist, so treating it as oracle-loop-active before Gate A is
380
+ even satisfied would repeat the same category of over-broad mistake
381
+ this replaces, just one gate later.
382
+
383
+ Deliberately takes the already-resolved ``gate_a_satisfied`` rather than
384
+ a bare ``milestone_number`` and re-probing GitHub itself: every caller
385
+ in this module and ``coord.serve_app`` already computes a Gate-A
386
+ existence probe on the same tick (``gate_a_status`` / ``probe_milestone
387
+ ().gate_a_blocked``) before ever reaching an ``oracle_loop=`` call site
388
+ — re-deriving it here would mean a second live fetch per tick for no
389
+ new information. A caller with no probe in hand yet (``coord milestone
390
+ write-order``, which has no other reason to touch Gate A) computes one
391
+ fresh via ``gate_a_status(repo_cfg, config, milestone_number) is None``.
392
+
393
+ Single source of truth for this question (epic #2096, "one question,
394
+ one answer") — every #2542 caller should resolve ``oracle_loop``
395
+ through this rather than re-deriving ``has_driver`` locally, so the two
396
+ can never drift apart again.
397
+ """
398
+ return config.acceptance.has_driver(repo_cfg.name) and gate_a_satisfied
399
+
400
+
293
401
  # (repo_github, path, branch) -> file content, or None if it doesn't exist.
294
402
  # Injected so tests never hit `gh` — mirrors GateAFileExists above.
295
403
  #
@@ -704,6 +812,17 @@ def issue_oracle_ready(
704
812
  the entry (re-checked every tick) instead of landing it in terminal
705
813
  ``blocked``, which nothing re-evaluates (#2040) — this is an explicitly
706
814
  operator-fixable condition with a one-command remedy.
815
+
816
+ #2785 audit note: the ``has_driver`` check below is correctly
817
+ repo-level — it's a cheap early exit only, immediately followed by the
818
+ real per-milestone ``gate_a_status`` existence check a few lines down
819
+ (via ``effective_file_exists``). A repo with no driver at all can have
820
+ no oracle-loop milestone, so short-circuiting there costs nothing; a
821
+ repo WITH a driver still falls through to the per-milestone contract
822
+ check before this ever returns non-default readiness. Unlike #2542's
823
+ ``validate_no_shared_oracle_group``/``plan_dispatch``/``plan_queue``
824
+ family (see :func:`milestone_oracle_loop`), this function never treated
825
+ ``has_driver`` alone as sufficient.
707
826
  """
708
827
  if milestone_number is None or not config.acceptance.has_driver(repo_cfg.name):
709
828
  return OracleReadiness()
@@ -943,9 +1062,12 @@ def plan_dispatch(
943
1062
  distinct idle machines instead of piling onto one).
944
1063
 
945
1064
  ``oracle_loop`` (#2542) — the caller's already-resolved
946
- ``config.acceptance.has_driver(repo_cfg.name)`` — caps ``to_dispatch`` at
947
- **one** entry per call. Without this, two ready-frontier entries with no
948
- claim/dependency edge between them (the normal, desired fan-out above)
1065
+ :func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
1066
+ repo-level ``config.acceptance.has_driver(repo_cfg.name)`` alone — see
1067
+ that function's docstring for why the distinction matters) — caps
1068
+ ``to_dispatch`` at **one** entry per call. Without this, two
1069
+ ready-frontier entries with no claim/dependency edge between them (the
1070
+ normal, desired fan-out above)
949
1071
  would both dispatch in the very same tick under an oracle-loop
950
1072
  milestone, and each independently authors its own JIT acceptance slice
951
1073
  into the SAME ``tests/acceptance/ms-N/manifest.yml``
@@ -1039,9 +1161,12 @@ def plan_queue(
1039
1161
  the defensive tail below only fires on inputs constructed outside it.
1040
1162
 
1041
1163
  ``oracle_loop`` (#2542) — the caller's already-resolved
1042
- ``config.acceptance.has_driver(repo_name)`` — additionally chains every
1043
- entry's ``after`` to the issue immediately before it in this function's
1044
- own topological order, so the drive-queue admits the WHOLE milestone
1164
+ :func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
1165
+ repo-level ``config.acceptance.has_driver(repo_name)`` alone — see that
1166
+ function's docstring for why the distinction matters) — additionally
1167
+ chains every entry's ``after`` to the issue immediately before it in
1168
+ this function's own topological order, so the drive-queue admits the
1169
+ WHOLE milestone
1045
1170
  strictly one entry at a time. Without this, two entries with no declared
1046
1171
  edge between them (different ``group``s, or neither declaring one) are
1047
1172
  both ``waiting`` the moment their own pre-reqs land, and the