code-coordinator 0.5.230__tar.gz → 0.5.231__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 (811) hide show
  1. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/milestone.py +37 -5
  5. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/milestone_dispatch.py +113 -11
  6. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/milestone_gate.py +14 -1
  7. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/milestone_order.py +61 -0
  8. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/serve_app.py +38 -2
  9. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_dispatch.py +103 -0
  10. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_order.py +82 -0
  11. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_milestone_dispatch.py +112 -0
  12. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_milestone_gate.py +136 -0
  13. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_milestone_order.py +36 -0
  14. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/.gitignore +0 -0
  29. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/GOAL.md +0 -0
  31. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/LICENSE +0 -0
  32. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/README.md +0 -0
  34. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/block_log.py +0 -0
  54. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/board_bool_guard.py +0 -0
  55. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/ci_fix.py +0 -0
  62. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/ci_github.py +0 -0
  63. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/ci_gitlab.py +0 -0
  64. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/client.py +0 -0
  68. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/release.py +0 -0
  87. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/repo.py +0 -0
  88. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/report.py +0 -0
  89. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/review.py +0 -0
  90. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/scorecard.py +0 -0
  91. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/sessions.py +0 -0
  92. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/setup.py +0 -0
  93. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/status.py +0 -0
  94. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/terminal.py +0 -0
  95. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/test_gate.py +0 -0
  96. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/commands/tui.py +0 -0
  97. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/comments.py +0 -0
  98. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/config.py +0 -0
  99. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/confirm_test.py +0 -0
  101. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/db.py +0 -0
  109. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dead_end.py +0 -0
  110. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/README.md +0 -0
  111. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-agent.service +0 -0
  112. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-db-backup.service +0 -0
  113. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-db-backup.sh +0 -0
  114. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-db-backup.timer +0 -0
  115. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-drive-queue.service +0 -0
  116. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-drive-queue.timer +0 -0
  117. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-notify.service +0 -0
  118. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-notify.timer +0 -0
  119. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-release-propagate.service +0 -0
  120. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-release-propagate.timer +0 -0
  121. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-release-window.service +0 -0
  122. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-release-window.timer +0 -0
  123. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-serve.service +0 -0
  124. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-web-dist-build.service +0 -0
  125. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-web-dist-build.timer +0 -0
  126. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy/coord-web.service +0 -0
  127. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy_manifest.py +0 -0
  128. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deploy_units.py +0 -0
  129. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/deps.py +0 -0
  130. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/diagnose.py +0 -0
  131. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dispatch.py +0 -0
  132. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/dist_name.py +0 -0
  133. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/drive.py +0 -0
  134. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/drive_queue.py +0 -0
  135. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/drive_state.py +0 -0
  136. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/events.py +0 -0
  137. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/failure_class.py +0 -0
  138. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/filelock.py +0 -0
  139. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/fleet_config_health.py +0 -0
  140. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/forge_availability.py +0 -0
  141. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/goal.py +0 -0
  148. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/graph_health.py +0 -0
  149. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/__init__.py +0 -0
  150. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/aggregate.py +0 -0
  151. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/__init__.py +0 -0
  152. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/agent_install.py +0 -0
  153. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/cargo_targets.py +0 -0
  154. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/claude_binary.py +0 -0
  155. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/coord_web_ci_pin.py +0 -0
  156. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/deploy_lane_facts.py +0 -0
  157. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/disk.py +0 -0
  158. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/fleet_board.py +0 -0
  159. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  160. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/fleet_phantom.py +0 -0
  161. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/fleet_unit_drift.py +0 -0
  162. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/graph.py +0 -0
  163. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/graphify_cli.py +0 -0
  164. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/index_lock.py +0 -0
  165. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/plan_usage.py +0 -0
  166. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/repo_state.py +0 -0
  167. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/spawned_coord.py +0 -0
  168. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/timer_active.py +0 -0
  169. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/toolchain.py +0 -0
  170. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/unit_drift.py +0 -0
  171. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/unit_enablement.py +0 -0
  172. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/checks/worktrees.py +0 -0
  173. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/cli.py +0 -0
  174. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/context.py +0 -0
  175. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/fleet_snapshot.py +0 -0
  176. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/models.py +0 -0
  177. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/pypi.py +0 -0
  178. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/registry.py +0 -0
  179. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/render.py +0 -0
  180. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/health/units.py +0 -0
  181. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/hooks.py +0 -0
  182. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/housekeeping.py +0 -0
  183. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/interactive.py +0 -0
  184. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/issue_store.py +0 -0
  185. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/liveness_auditor.py +0 -0
  186. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/machine_pause.py +0 -0
  187. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/merge_queue.py +0 -0
  188. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/milestone_chat.py +0 -0
  189. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/mock_author.py +0 -0
  190. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/models.py +0 -0
  191. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/network.py +0 -0
  192. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/notify.py +0 -0
  204. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/openapi.py +0 -0
  205. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/overlap_fence.py +0 -0
  206. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/overlap_predict.py +0 -0
  207. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/parentage.py +0 -0
  208. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/parentage_github.py +0 -0
  209. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/pipeline.py +0 -0
  210. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/plan_parser.py +0 -0
  211. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/plans.py +0 -0
  212. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/platform_paths.py +0 -0
  213. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/portal_bridge.py +0 -0
  214. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/portal_store.py +0 -0
  215. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/portal_sync.py +0 -0
  216. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/pr_body_lint.py +0 -0
  217. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/prereqs.py +0 -0
  218. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/progress.py +0 -0
  219. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/providers/__init__.py +0 -0
  220. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/providers/base.py +0 -0
  221. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/providers/claude.py +0 -0
  222. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/providers/claude_pty.py +0 -0
  223. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/providers/opencode.py +0 -0
  224. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/queue_diagnose.py +0 -0
  225. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/reconcile.py +0 -0
  226. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/reconcile_tick.py +0 -0
  227. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/refine_chat.py +0 -0
  228. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/release_cordon.py +0 -0
  229. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/release_propagate.py +0 -0
  230. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/release_verify.py +0 -0
  231. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/release_window.py +0 -0
  232. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/repo_edit.py +0 -0
  233. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/repo_onboard.py +0 -0
  234. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/reports.py +0 -0
  235. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/revalidate.py +0 -0
  236. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/review.py +0 -0
  237. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/scorecard.py +0 -0
  238. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/self_health.py +0 -0
  239. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  240. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  241. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  242. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/portal-followup/SKILL.md +0 -0
  245. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  246. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  247. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/skills/update-issue/SKILL.md +0 -0
  248. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/smoke.py +0 -0
  249. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/spend_ceiling.py +0 -0
  250. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/split_work.py +0 -0
  251. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/stage_projection.py +0 -0
  252. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/state.py +0 -0
  253. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/test_author.py +0 -0
  254. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/test_chat.py +0 -0
  255. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/test_orchestrator.py +0 -0
  256. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/test_report.py +0 -0
  257. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/tui_release.py +0 -0
  258. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/usage.py +0 -0
  259. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/usage_limits.py +0 -0
  260. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/usage_rollup.py +0 -0
  261. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coord/worker_events.py +0 -0
  262. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/coordinator.example.yml +0 -0
  263. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-agent.service +0 -0
  264. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-db-backup.service +0 -0
  265. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-db-backup.sh +0 -0
  266. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-db-backup.timer +0 -0
  267. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-drive-queue.service +0 -0
  268. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-drive-queue.timer +0 -0
  269. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-notify.service +0 -0
  270. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-notify.timer +0 -0
  271. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-release-propagate.service +0 -0
  272. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-release-propagate.timer +0 -0
  273. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-release-window.service +0 -0
  274. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-release-window.timer +0 -0
  275. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-serve.service +0 -0
  276. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-web-dist-build.service +0 -0
  277. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-web-dist-build.sh +0 -0
  278. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-web-dist-build.timer +0 -0
  279. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-web-rollback.sh +0 -0
  280. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/coord-web.service +0 -0
  281. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/deploy/node-shim.sh +0 -0
  282. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  283. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ADR_COORD_WEB_CI.md +0 -0
  284. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ADR_COORD_WEB_DIST.md +0 -0
  285. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/AGENT_OPERATIONS.md +0 -0
  286. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ARCHITECTURE.md +0 -0
  287. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ARCH_SECURITY_GATES.md +0 -0
  288. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/COCKPIT.md +0 -0
  289. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/CONTROL_CENTER.md +0 -0
  290. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/COST_DISCIPLINE.md +0 -0
  291. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/CROSS_PLATFORM.md +0 -0
  292. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/CUSTOMER_PORTAL.md +0 -0
  293. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/DRIVE_QUEUE.md +0 -0
  294. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/EPHEMERAL_WORKERS.md +0 -0
  295. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/FORGE_MIGRATION.md +0 -0
  296. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/GRAPHIFY_SETUP.md +0 -0
  297. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ISSUE_GUIDANCE.md +0 -0
  298. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/MAC_MINI.md +0 -0
  299. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  300. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/NOTIFIER.md +0 -0
  301. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/OPENCODE_VERIFICATION.md +0 -0
  302. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/OPERATING_GOTCHAS.md +0 -0
  303. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/ORACLE_LOOP.md +0 -0
  304. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/PHONE_WEBAPP.md +0 -0
  305. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/PIPELINE_V2.md +0 -0
  306. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/PLATFORM_EVOLUTION.md +0 -0
  307. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/SECOND_BACKEND.md +0 -0
  308. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/STORE_SERVICE.md +0 -0
  309. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  310. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/WEB_CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/WSL_WINDOWS_WORKER.md +0 -0
  312. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/mocks/web/README.md +0 -0
  313. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/mocks/web/_tokens.css +0 -0
  314. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/mocks/web/issue-detail.html +0 -0
  315. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/mocks/web/pipeline-narrow.html +0 -0
  316. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/docs/mocks/web/pipeline-wide.html +0 -0
  317. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/graphify-out/.gitignore +0 -0
  318. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/install-agent.sh +0 -0
  319. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/pyproject.toml +0 -0
  320. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/audit_review_verdict_overrides.py +0 -0
  321. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  322. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/build-worker-image.sh +0 -0
  323. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/coordinator-machine.py +0 -0
  324. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/epic-down.sh +0 -0
  325. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/epic-up.sh +0 -0
  326. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/preflight.sh +0 -0
  327. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/provision-worker.sh +0 -0
  328. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  329. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  330. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/azure-workers/verify-github-token.sh +0 -0
  331. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/check_gh_argv_containment.py +0 -0
  332. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/codegen.py +0 -0
  333. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/coord-test-runner.sh +0 -0
  334. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/drive-batch.sh +0 -0
  335. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/gen_board_fixture.py +0 -0
  336. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/gen_mock_index.py +0 -0
  337. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/next_release_tag.py +0 -0
  338. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/run_tests_in_populated_home.sh +0 -0
  339. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/run_tests_without_gh.sh +0 -0
  340. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/smoke_437_interactive.py +0 -0
  341. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/verify_878_review_capture.py +0 -0
  342. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/verify_release_published.py +0 -0
  343. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/scripts/verify_release_wheel.py +0 -0
  344. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/setup.cfg +0 -0
  345. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/SMOKE_SET.md +0 -0
  346. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/__init__.py +0 -0
  347. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  348. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/contract.md +0 -0
  349. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/manifest.yml +0 -0
  350. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  351. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  352. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  353. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  354. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-37/conftest.py +0 -0
  355. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-37/contract.md +0 -0
  356. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-37/manifest.yml +0 -0
  357. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  358. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  359. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/contract.md +0 -0
  360. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/manifest.yml +0 -0
  361. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  362. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  363. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  364. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  365. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  366. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  367. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  368. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  369. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  370. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  371. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/contract.md +0 -0
  372. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  373. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  374. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/manifest.yml +0 -0
  375. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  376. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-51/tsconfig.json +0 -0
  377. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  378. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  379. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  380. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/contract.md +0 -0
  381. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  382. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/manifest.yml +0 -0
  383. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  384. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  385. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  386. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  387. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  388. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  389. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  390. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  391. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  392. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  393. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  394. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  395. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/contract.md +0 -0
  396. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/manifest.yml +0 -0
  397. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  398. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  399. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  400. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  401. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  402. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  403. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/conftest.py +0 -0
  404. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/board-pipeline-basic.json +0 -0
  405. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  406. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  407. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  408. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  409. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/all_pass.json +0 -0
  410. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  411. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/mixed_fail.json +0 -0
  412. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  413. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  414. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/skip.json +0 -0
  415. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/playwright/truncated.json +0 -0
  416. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  417. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  418. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  419. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  420. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  421. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  422. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  423. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  424. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_acceptance.py +0 -0
  425. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_acceptance_drivers.py +0 -0
  426. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent.py +0 -0
  427. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_api_error.py +0 -0
  428. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_app.py +0 -0
  429. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_branch_base.py +0 -0
  430. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_branch_capture.py +0 -0
  431. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_config_free_1712.py +0 -0
  432. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_deploy_units_endpoint.py +0 -0
  433. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_dirty_worktree.py +0 -0
  434. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  435. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_graph_self_heal.py +0 -0
  436. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_health_h3.py +0 -0
  437. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_idle_restart.py +0 -0
  438. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_push_failure.py +0 -0
  439. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_reap.py +0 -0
  440. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_repos_and_pull.py +0 -0
  441. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_restart_services_endpoint.py +0 -0
  442. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_skills_self_heal.py +0 -0
  443. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_startup_diagnostics.py +0 -0
  444. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_update.py +0 -0
  445. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_update_bluegreen.py +0 -0
  446. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_usage_limit.py +0 -0
  447. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_agent_zero_commit.py +0 -0
  448. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ambient_home_isolation.py +0 -0
  449. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_approve_reject_plan.py +0 -0
  450. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_approve_usage_gate.py +0 -0
  451. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_approved_work_2532.py +0 -0
  452. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_assignment_already_recorded_daemon.py +0 -0
  453. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_audit_log.py +0 -0
  454. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_audit_outcome.py +0 -0
  455. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_audit_query.py +0 -0
  456. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_auto_loop.py +0 -0
  457. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_auto_release_publish_2035.py +0 -0
  458. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_base_checkout_restore.py +0 -0
  459. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_block_log.py +0 -0
  460. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_cap_762.py +0 -0
  461. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_fixture.py +0 -0
  462. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_read_path.py +0 -0
  463. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_service.py +0 -0
  464. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_state.py +0 -0
  465. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_board_wire.py +0 -0
  466. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_brain.py +0 -0
  467. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_branch_model.py +0 -0
  468. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_bug_intake.py +0 -0
  469. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_build_worker_image_env_update.py +0 -0
  470. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cargo_cache.py +0 -0
  471. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_check_gh_argv_containment.py +0 -0
  472. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ci_acceptance_gate_1950.py +0 -0
  473. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ci_fix.py +0 -0
  474. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ci_gitlab.py +0 -0
  475. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ci_parity_2091.py +0 -0
  476. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_ci_store.py +0 -0
  477. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_claim.py +0 -0
  478. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_acceptance.py +0 -0
  479. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_assign.py +0 -0
  480. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  481. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_assign_interactive_remote.py +0 -0
  482. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_assign_provider.py +0 -0
  483. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  484. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_audit.py +0 -0
  485. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_chat_continue.py +0 -0
  486. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_decide.py +0 -0
  487. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_diagnose_config_provenance.py +0 -0
  488. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_diagnose_forge_availability.py +0 -0
  489. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_diagnose_graph.py +0 -0
  490. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_diagnose_self.py +0 -0
  491. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_doctor.py +0 -0
  492. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_doctor_config_free_1801.py +0 -0
  493. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  494. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_drive.py +0 -0
  495. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_drive_queue.py +0 -0
  496. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_escalate.py +0 -0
  497. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_fix_headless_review.py +0 -0
  498. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_gate_a.py +0 -0
  499. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_install_drift.py +0 -0
  500. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_install_skills.py +0 -0
  501. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_issue_create_label.py +0 -0
  502. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_issue_reopen.py +0 -0
  503. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_merge.py +0 -0
  504. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_assign.py +0 -0
  505. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_capture.py +0 -0
  506. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_chat_add_child.py +0 -0
  507. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  510. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_milestone_ship.py +0 -0
  511. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_network.py +0 -0
  512. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_new_issue_chat.py +0 -0
  513. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_plans.py +0 -0
  514. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_portal.py +0 -0
  515. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_scorecard.py +0 -0
  524. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_set_review_findings.py +0 -0
  525. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_advisory_terminal.py +0 -0
  526. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_comments.py +0 -0
  538. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_completion_summary.py +0 -0
  539. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config.py +0 -0
  540. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config_acceptance.py +0 -0
  541. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config_audit.py +0 -0
  542. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config_pricing.py +0 -0
  543. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  544. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_config_usage_gate.py +0 -0
  545. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_confirm_test.py +0 -0
  546. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_conflict_fix.py +0 -0
  547. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_conflict_fix_semantic.py +0 -0
  548. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_test.py +0 -0
  549. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_test_runner_baseline.py +0 -0
  550. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_manifest.py +0 -0
  567. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_notify_unit.py +0 -0
  568. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_units_lane.py +0 -0
  569. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deploy_web_unit.py +0 -0
  570. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_deps.py +0 -0
  571. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_diagnose.py +0 -0
  572. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dispatch.py +0 -0
  573. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dispatch_target_validation.py +0 -0
  574. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_dist_name.py +0 -0
  575. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_done_housekeeping.py +0 -0
  576. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_drive.py +0 -0
  577. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_drive_queue.py +0 -0
  578. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_drive_state.py +0 -0
  579. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_drive_tmux.py +0 -0
  580. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_epic_up_capability_detection.py +0 -0
  581. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  582. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_epic_up_image_provenance.py +0 -0
  583. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_errors.py +0 -0
  584. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_events.py +0 -0
  585. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_failure_class.py +0 -0
  586. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_filelock.py +0 -0
  587. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  588. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_fix_of_force_override.py +0 -0
  589. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_fleet_config_health.py +0 -0
  590. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_fleet_health_probes.py +0 -0
  591. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_fleet_health_snapshot.py +0 -0
  592. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_forge_availability.py +0 -0
  593. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_freshness.py +0 -0
  594. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gate_a.py +0 -0
  595. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gate_b.py +0 -0
  596. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gate_snapshot_staleness.py +0 -0
  597. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gates.py +0 -0
  598. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  599. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_gen_mock_index.py +0 -0
  600. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_generated_types_fixture.py +0 -0
  601. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_github_ops.py +0 -0
  602. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_goal.py +0 -0
  603. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_graph_health.py +0 -0
  604. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_graph_selfheal_absent_2237.py +0 -0
  605. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_handoff.py +0 -0
  606. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_checks.py +0 -0
  607. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_cli.py +0 -0
  608. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_cli_graph.py +0 -0
  609. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_config.py +0 -0
  610. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_context.py +0 -0
  611. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_coord_web_ci_pin.py +0 -0
  612. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_deploy_lane_facts.py +0 -0
  613. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_incident_regression.py +0 -0
  614. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_pypi.py +0 -0
  615. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_registry.py +0 -0
  616. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_timer_active.py +0 -0
  617. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_toolchain.py +0 -0
  618. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_unit_drift.py +0 -0
  619. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_health_unit_enablement.py +0 -0
  620. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_hooks.py +0 -0
  621. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_human_attended_437.py +0 -0
  622. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_init.py +0 -0
  623. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_integration.py +0 -0
  624. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_briefing_echo.py +0 -0
  625. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_pane_log_2541.py +0 -0
  626. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_prefill_state.py +0 -0
  627. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_session_relaunch.py +0 -0
  628. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_test_verdict_backstop.py +0 -0
  629. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_token_attribution.py +0 -0
  630. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_interactive_worktree.py +0 -0
  631. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_issue_store_seam.py +0 -0
  632. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_liveness_auditor.py +0 -0
  633. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_liveness_notify.py +0 -0
  634. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_machine_pause.py +0 -0
  635. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_merge_queue.py +0 -0
  636. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_merge_verify.py +0 -0
  637. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_milestone_chat.py +0 -0
  638. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_milestone_seam.py +0 -0
  639. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_mock_author.py +0 -0
  640. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_model_tiering.py +0 -0
  641. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_models.py +0 -0
  642. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_models_config_labels.py +0 -0
  643. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_needs_attention.py +0 -0
  644. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_network.py +0 -0
  645. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_new_issue_chat.py +0 -0
  646. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_next_release_tag.py +0 -0
  647. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_node_shim.py +0 -0
  648. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_baseline.py +0 -0
  649. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_cli.py +0 -0
  650. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_collect.py +0 -0
  651. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_config.py +0 -0
  652. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_drive_seam.py +0 -0
  653. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_isolation.py +0 -0
  654. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_predicate.py +0 -0
  655. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_quiet_hours.py +0 -0
  656. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notifier_service.py +0 -0
  657. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notify.py +0 -0
  658. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_notify_drain.py +0 -0
  659. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_openapi.py +0 -0
  660. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_operational_defaults.py +0 -0
  661. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_overlap_fence.py +0 -0
  662. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_overlap_predict.py +0 -0
  663. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_packaged_deploy_units.py +0 -0
  664. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_stalled_pipeline.py +0 -0
  741. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_state.py +0 -0
  742. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_state_review_findings_daemon.py +0 -0
  743. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_status_fleet_footer.py +0 -0
  744. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_stop_1567.py +0 -0
  745. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_stuck.py +0 -0
  746. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_terminal_command.py +0 -0
  747. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_author.py +0 -0
  748. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_chat.py +0 -0
  749. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_orchestrator.py +0 -0
  750. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_report.py +0 -0
  751. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_verdict_parsing.py +0 -0
  752. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_test_verdict_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_thin_client_board_audit.py +0 -0
  754. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_thin_client_config_load_1080.py +0 -0
  755. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_thin_client_daemon_routing_906.py +0 -0
  756. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_tmux_host.py +0 -0
  757. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_tmux_session.py +0 -0
  758. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_usage.py +0 -0
  760. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_usage_limits.py +0 -0
  761. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_usage_rollup.py +0 -0
  762. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_venv_live_install_2121.py +0 -0
  763. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_version_single_source.py +0 -0
  764. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_watch.py +0 -0
  765. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  766. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worker_events.py +0 -0
  767. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worker_image_pin_sync.py +0 -0
  768. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worker_safety.py +0 -0
  769. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worker_test_scoping.py +0 -0
  770. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worktree.py +0 -0
  771. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  772. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/Cargo.lock +0 -0
  773. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/Cargo.toml +0 -0
  774. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/cargo-config-local-quadraui.toml.example +0 -0
  775. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/approved.rs +0 -0
  776. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/audit.rs +0 -0
  777. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/chat.rs +0 -0
  778. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/data.rs +0 -0
  779. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/dialogs.rs +0 -0
  780. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/doc_tabs.rs +0 -0
  781. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/drive.rs +0 -0
  782. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/drive_queue.rs +0 -0
  783. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/escalation.rs +0 -0
  784. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/events.rs +0 -0
  785. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/fixtures.rs +0 -0
  786. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/fleet_health.rs +0 -0
  787. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/fleet_sessions.rs +0 -0
  788. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/fleet_terminals.rs +0 -0
  789. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/format.rs +0 -0
  790. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/milestone_dag.rs +0 -0
  791. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/mod.rs +0 -0
  792. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/msv.rs +0 -0
  793. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/pipeline.rs +0 -0
  794. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/plans.rs +0 -0
  795. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/render.rs +0 -0
  796. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/reports.rs +0 -0
  797. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/sessions.rs +0 -0
  798. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/settings_ui.rs +0 -0
  799. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/sidebar.rs +0 -0
  800. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/tests.rs +0 -0
  802. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/types.rs +0 -0
  803. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/app/workspace.rs +0 -0
  804. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/bin/gtk.rs +0 -0
  805. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/commands.rs +0 -0
  806. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/lib.rs +0 -0
  807. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/main.rs +0 -0
  808. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/src/settings.rs +0 -0
  809. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/tests/acceptance.rs +0 -0
  810. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/tests/cli.rs +0 -0
  811. {code_coordinator-0.5.230 → code_coordinator-0.5.231}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.230
3
+ Version: 0.5.231
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.230
3
+ Version: 0.5.231
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.230",
2
+ "tag": "0.5.231",
3
3
  "distance": 0,
4
- "node": "g2e59935577bb8bd17362609676a470181e55ba5b",
4
+ "node": "g9bcc6d2ee8084e339463aeb3572a47a58b9b1657",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -48,6 +48,7 @@ from coord.milestone_order import (
48
48
  replace_sub_issues_section,
49
49
  replace_work_order_section,
50
50
  validate_milestone_membership,
51
+ validate_no_shared_oracle_group,
51
52
  )
52
53
 
53
54
 
@@ -1088,7 +1089,15 @@ def milestone_dispatch_cmd(
1088
1089
  # issue as its pre-reqs land; that also makes `register_milestone_drain`
1089
1090
  # redundant here (the queue IS the durable drain, and registering would
1090
1091
  # have the daemon's direct-dispatch drain racing it).
1091
- queue_plan = plan_queue(ctx.work_order, ctx.terminal_issues, repo_entry.name)
1092
+ # #2542: under oracle-loop control (Gate A already checked above), chain
1093
+ # the whole milestone's drive-queue entries so the tick can never launch
1094
+ # two of them at once — see plan_queue's own docstring for why.
1095
+ queue_plan = plan_queue(
1096
+ ctx.work_order,
1097
+ ctx.terminal_issues,
1098
+ repo_entry.name,
1099
+ oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1100
+ )
1092
1101
 
1093
1102
  if not queue_plan:
1094
1103
  click.echo("Nothing to queue — every work-order node is already closed.")
@@ -1277,18 +1286,25 @@ def milestone_drive_cmd(
1277
1286
 
1278
1287
  # The frontier half of the dry-run report. Computed for both modes so the
1279
1288
  # non-dry-run confirmation shows what the first `work` tick will do.
1289
+ # #2542: pass the same `oracle_loop` the gate tick itself will use, so
1290
+ # this preview never shows more than the one entry the actual `work`
1291
+ # gate would dispatch for an oracle-loop milestone.
1280
1292
  if ctx.work_order.nodes:
1281
1293
  plan = plan_dispatch(
1282
- ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues
1294
+ ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues,
1295
+ oracle_loop=cfg.acceptance.has_driver(repo_entry.name),
1296
+ )
1297
+ to_dispatch, skipped, waiting, deferred = (
1298
+ plan.to_dispatch, plan.skipped, plan.waiting, plan.deferred,
1283
1299
  )
1284
- to_dispatch, skipped, waiting = plan.to_dispatch, plan.skipped, plan.waiting
1285
1300
  else:
1286
- to_dispatch, skipped, waiting = [], [], []
1301
+ to_dispatch, skipped, waiting, deferred = [], [], [], []
1287
1302
 
1288
1303
  if dry_run:
1289
1304
  for line in mg.format_plan(
1290
1305
  record, steps,
1291
1306
  to_dispatch=to_dispatch, skipped=skipped, waiting=waiting,
1307
+ deferred=deferred,
1292
1308
  ):
1293
1309
  click.echo(line)
1294
1310
  return
@@ -1311,7 +1327,7 @@ def milestone_drive_cmd(
1311
1327
  state.save_milestone_gate(record.to_dict())
1312
1328
  for line in mg.format_plan(
1313
1329
  record, steps, to_dispatch=to_dispatch, skipped=skipped, waiting=waiting,
1314
- footer=False,
1330
+ deferred=deferred, footer=False,
1315
1331
  ):
1316
1332
  click.echo(line)
1317
1333
  click.echo()
@@ -1448,6 +1464,22 @@ def milestone_write_order_cmd(
1448
1464
  click.echo(f"error: {e}", err=True)
1449
1465
  sys.exit(1)
1450
1466
 
1467
+ # #2542: refuse a proposed work order that puts two issues in the same
1468
+ # `{group: ...}` cohort when this milestone is under oracle-loop control
1469
+ # — every group member's JIT acceptance slice would additively append to
1470
+ # the SAME tests/acceptance/ms-N/manifest.yml, a manifest race that
1471
+ # exists regardless of whether the issues' actual feature work overlaps
1472
+ # (coord-portal#122). Cheap/early check for the explicit-group case only
1473
+ # — see validate_no_shared_oracle_group's docstring for what it can't
1474
+ # catch.
1475
+ try:
1476
+ validate_no_shared_oracle_group(
1477
+ work_order, oracle_loop=cfg.acceptance.has_driver(repo_entry.name)
1478
+ )
1479
+ except WorkOrderError as e:
1480
+ click.echo(f"error: {e}", err=True)
1481
+ sys.exit(1)
1482
+
1451
1483
  # #1057: a valid `## Work order` block alone doesn't make this issue
1452
1484
  # findable as the milestone's tracking epic — `coord plans`/the TUI
1453
1485
  # Plans panel key off the `epic` label (TRACKING_ISSUE_LABEL). Ensure it
@@ -25,6 +25,11 @@ Three call sites share this module:
25
25
  same fetch → plan → dispatch sequence for milestones registered via a
26
26
  non-dry-run ``coord milestone dispatch`` call, so newly-unblocked frontier
27
27
  entries dispatch automatically as dependencies complete.
28
+ - The daemon's gate tick (``coord.serve_app._milestone_gate_tick``, #1929),
29
+ whose ``work`` gate state IS the drain for a gate-driven milestone (``coord
30
+ milestone drive``, docs/ORACLE_LOOP.md) — same ``plan_dispatch`` +
31
+ ``dispatch_entry`` primitives, so gate policy and dispatch policy can't
32
+ drift apart.
28
33
  - Tests exercise the pure ``plan_dispatch``/``pick_machine`` functions
29
34
  directly with a seeded :class:`~coord.models.Board`, no GitHub or HTTP.
30
35
  """
@@ -66,6 +71,7 @@ __all__ = [
66
71
  "pick_machine",
67
72
  "MachinePick",
68
73
  "NoMachineAvailable",
74
+ "DeferredByOracleLoop",
69
75
  "MilestonePlan",
70
76
  "plan_dispatch",
71
77
  "QueuePlanEntry",
@@ -642,15 +648,37 @@ class NoMachineAvailable:
642
648
  reason: str = "no idle machine available for this repo"
643
649
 
644
650
 
651
+ @dataclass(frozen=True)
652
+ class DeferredByOracleLoop:
653
+ """A ready-frontier entry withheld *this tick* because the milestone is
654
+ under oracle-loop control and another entry already claimed the tick's
655
+ one dispatch slot (#2542).
656
+
657
+ Distinct from both :class:`~coord.milestone_order.BlockedNode` (the
658
+ frontier itself considers this entry ready) and
659
+ :class:`NoMachineAvailable` (there may well be an idle machine for it) —
660
+ it is held back purely so two same-milestone entries never enter their
661
+ JIT-slice-authoring phase concurrently and race on the shared
662
+ ``tests/acceptance/ms-N/manifest.yml``. It will be reconsidered on the
663
+ next tick, by which point the dispatched entry is claimed (an active
664
+ board assignment) and drops out of the ready frontier on its own.
665
+ """
666
+
667
+ entry: FrontierEntry
668
+ reason: str = "oracle-loop milestone: only one entry dispatches per tick"
669
+
670
+
645
671
  @dataclass(frozen=True)
646
672
  class MilestonePlan:
647
673
  """The result of :func:`plan_dispatch`: what to dispatch now, what's
648
- idle-machine-starved, and what Phase 0's frontier says is still blocked.
674
+ idle-machine-starved, what's withheld for oracle-loop serialization, and
675
+ what Phase 0's frontier says is still blocked.
649
676
  """
650
677
 
651
678
  to_dispatch: tuple[MachinePick, ...] = ()
652
679
  skipped: tuple[NoMachineAvailable, ...] = ()
653
680
  waiting: tuple[BlockedNode, ...] = ()
681
+ deferred: tuple[DeferredByOracleLoop, ...] = ()
654
682
 
655
683
 
656
684
  def plan_dispatch(
@@ -659,6 +687,8 @@ def plan_dispatch(
659
687
  config: "Config",
660
688
  repo_cfg: Repo,
661
689
  terminal_issues: frozenset[int] | set[int],
690
+ *,
691
+ oracle_loop: bool = False,
662
692
  ) -> MilestonePlan:
663
693
  """Compute the ready frontier and pick a machine for each ready entry.
664
694
 
@@ -667,6 +697,33 @@ def plan_dispatch(
667
697
  the first idle+capable machine not already claimed by an earlier entry
668
698
  in *this* call (so a cohort of N ready issues fans out across up to N
669
699
  distinct idle machines instead of piling onto one).
700
+
701
+ ``oracle_loop`` (#2542) — the caller's already-resolved
702
+ ``config.acceptance.has_driver(repo_cfg.name)`` — caps ``to_dispatch`` at
703
+ **one** entry per call. Without this, two ready-frontier entries with no
704
+ claim/dependency edge between them (the normal, desired fan-out above)
705
+ would both dispatch in the very same tick under an oracle-loop
706
+ milestone, and each independently authors its own JIT acceptance slice
707
+ into the SAME ``tests/acceptance/ms-N/manifest.yml``
708
+ (``coord.test_author``'s "later slices MERGE into this file"
709
+ convention) — a race regardless of what the declared work order says is
710
+ safe to parallelize. This is the same hazard :func:`plan_queue`'s
711
+ ``oracle_loop`` chaining closes for the drive-queue path; this is the
712
+ equivalent for the daemon's direct-dispatch paths
713
+ (``coord.serve_app._milestone_gate_tick``'s ``work`` state and the
714
+ legacy ``_milestone_drain_tick``), which call this function directly
715
+ rather than going through the drive-queue. Entries that would otherwise
716
+ have dispatched this tick are returned in :attr:`MilestonePlan.deferred`
717
+ instead of silently dropped; they re-enter ``ready`` on a later tick
718
+ once the dispatched entry is claimed (an active board assignment) and
719
+ falls out of the frontier on its own — see
720
+ :func:`~coord.milestone_order.ready_frontier`.
721
+
722
+ Deliberately coarse, mirroring ``plan_queue``: it withholds the ENTIRE
723
+ entry (not just its slice-authoring phase), a real throughput cost for
724
+ an oracle-loop milestone dispatched via the daemon in bulk. #2543
725
+ (per-issue manifest fragments) is what would let real concurrency come
726
+ back safely; this is defense-in-depth until it lands.
670
727
  """
671
728
  frontier = ready_frontier(
672
729
  work_order,
@@ -677,8 +734,12 @@ def plan_dispatch(
677
734
  )
678
735
  picks: list[MachinePick] = []
679
736
  skipped: list[NoMachineAvailable] = []
737
+ deferred: list[DeferredByOracleLoop] = []
680
738
  used: set[str] = set()
681
739
  for entry in frontier.ready:
740
+ if oracle_loop and picks:
741
+ deferred.append(DeferredByOracleLoop(entry))
742
+ continue
682
743
  machine = pick_machine(repo_cfg.name, board, config, exclude=frozenset(used))
683
744
  if machine is None:
684
745
  skipped.append(NoMachineAvailable(entry))
@@ -686,7 +747,10 @@ def plan_dispatch(
686
747
  used.add(machine.name)
687
748
  picks.append(MachinePick(entry, machine))
688
749
  return MilestonePlan(
689
- to_dispatch=tuple(picks), skipped=tuple(skipped), waiting=frontier.blocked
750
+ to_dispatch=tuple(picks),
751
+ skipped=tuple(skipped),
752
+ waiting=frontier.blocked,
753
+ deferred=tuple(deferred),
690
754
  )
691
755
 
692
756
 
@@ -708,6 +772,8 @@ def plan_queue(
708
772
  work_order: WorkOrder,
709
773
  terminal_issues: frozenset[int] | set[int],
710
774
  repo_name: str,
775
+ *,
776
+ oracle_loop: bool = False,
711
777
  ) -> tuple[QueuePlanEntry, ...]:
712
778
  """Translate the work order's DAG into drive-queue enqueues (#2335).
713
779
 
@@ -724,6 +790,31 @@ def plan_queue(
724
790
  :func:`~coord.milestone_order.parse_work_order` already refused cycles,
725
791
  self-edges, and edges to undeclared nodes, so the sort always terminates;
726
792
  the defensive tail below only fires on inputs constructed outside it.
793
+
794
+ ``oracle_loop`` (#2542) — the caller's already-resolved
795
+ ``config.acceptance.has_driver(repo_name)`` — additionally chains every
796
+ entry's ``after`` to the issue immediately before it in this function's
797
+ own topological order, so the drive-queue admits the WHOLE milestone
798
+ strictly one entry at a time. Without this, two entries with no declared
799
+ edge between them (different ``group``s, or neither declaring one) are
800
+ both ``waiting`` the moment their own pre-reqs land, and the
801
+ drive-queue's per-repo concurrency cap (``coord.drive_queue.plan_tick``)
802
+ launches both at once — each independently authoring its own JIT
803
+ acceptance slice into the SAME ``tests/acceptance/ms-N/manifest.yml``
804
+ (``coord.test_author``'s "later slices MERGE into this file"
805
+ convention), regardless of what the declared work order says is safe to
806
+ parallelize. This is exactly coord-portal#122's SECOND collision (#130
807
+ vs. #132, filed as #2542's correction) — ``validate_no_shared_oracle_
808
+ group`` only catches the explicit-group case, and this milestone's
809
+ entries shared no group at all.
810
+
811
+ Deliberately coarse: it serializes the entry's WHOLE dispatch (Work
812
+ through Merge), not just its slice-authoring phase, because the
813
+ drive-queue has no notion of "authoring" vs. "working" phases to hang a
814
+ narrower edge on. That is a real throughput cost for an oracle-loop
815
+ milestone dispatched in bulk — #2543 (giving each issue its own manifest
816
+ fragment instead of one shared appended file) is what would let real
817
+ concurrency come back safely; this is defense-in-depth until it lands.
727
818
  """
728
819
  from coord.drive_queue import entry_key # noqa: PLC0415
729
820
 
@@ -746,16 +837,27 @@ def plan_queue(
746
837
  if not progressed: # cycle — unreachable via parse_work_order; see above
747
838
  ordered.extend(remaining.values())
748
839
  break
749
- return tuple(
750
- QueuePlanEntry(
751
- issue_number=n.issue_number,
752
- after=tuple(
753
- entry_key(repo_name, d) for d in n.after if d not in terminal
754
- ),
755
- group=n.group,
840
+
841
+ entries: list[QueuePlanEntry] = []
842
+ previous_issue_number: int | None = None
843
+ for n in ordered:
844
+ after_numbers = list(n.after)
845
+ if oracle_loop and (
846
+ previous_issue_number is not None
847
+ and previous_issue_number not in after_numbers
848
+ ):
849
+ after_numbers.append(previous_issue_number)
850
+ entries.append(
851
+ QueuePlanEntry(
852
+ issue_number=n.issue_number,
853
+ after=tuple(
854
+ entry_key(repo_name, d) for d in after_numbers if d not in terminal
855
+ ),
856
+ group=n.group,
857
+ )
756
858
  )
757
- for n in ordered
758
- )
859
+ previous_issue_number = n.issue_number
860
+ return tuple(entries)
759
861
 
760
862
 
761
863
  @dataclass(frozen=True)
@@ -637,17 +637,26 @@ def format_plan(
637
637
  to_dispatch: list = (),
638
638
  skipped: list = (),
639
639
  waiting: list = (),
640
+ deferred: list = (),
640
641
  footer: bool = True,
641
642
  ) -> list[str]:
642
643
  """Render a ``--dry-run`` report: the gate walk plus the work frontier.
643
644
 
644
- ``to_dispatch``/``skipped``/``waiting`` come straight off a
645
+ ``to_dispatch``/``skipped``/``waiting``/``deferred`` come straight off a
645
646
  :class:`~coord.milestone_dispatch.MilestonePlan` (the same frontier
646
647
  ``coord milestone dispatch --dry-run`` prints), so the operator sees both
647
648
  halves of #1440's fourth acceptance bullet — every gate, *and* what would
648
649
  dispatch — in one output. Returns lines rather than echoing so both the
649
650
  CLI and a test can consume it.
650
651
 
652
+ ``deferred`` (#2542) is populated only when the caller resolved
653
+ ``oracle_loop=True`` — entries the frontier considers ready but that the
654
+ `work` gate is deliberately holding back this tick so no two
655
+ same-milestone entries start authoring a JIT acceptance slice
656
+ concurrently. Rendered separately from ``skipped`` (no idle machine) so
657
+ the report never implies "we couldn't find a machine" for something
658
+ that's actually being serialized on purpose.
659
+
651
660
  ``footer`` controls whether the trailing blank line + "(dry run — ...)"
652
661
  line is included. A non-dry-run confirmation (``coord milestone drive``
653
662
  without ``--dry-run``) wants the same report *without* that footer, since
@@ -702,6 +711,10 @@ def format_plan(
702
711
  lines.append(" Waiting on declared-order dependencies:")
703
712
  for b in waiting:
704
713
  lines.append(f" #{b.issue_number}: {b.reason}")
714
+ if deferred:
715
+ lines.append(" Deferred (oracle-loop: one entry per tick):")
716
+ for d in deferred:
717
+ lines.append(f" #{d.entry.issue_number}: {d.reason}")
705
718
 
706
719
  if footer:
707
720
  lines.append("")
@@ -111,6 +111,7 @@ __all__ = [
111
111
  "remove_sub_issues_section",
112
112
  "milestone_work_order_membership",
113
113
  "validate_milestone_membership",
114
+ "validate_no_shared_oracle_group",
114
115
  "FrontierEntry",
115
116
  "BlockedNode",
116
117
  "Frontier",
@@ -571,6 +572,66 @@ def validate_milestone_membership(
571
572
  )
572
573
 
573
574
 
575
+ def validate_no_shared_oracle_group(
576
+ work_order: WorkOrder,
577
+ *,
578
+ oracle_loop: bool,
579
+ ) -> None:
580
+ """Refuse two `## Work order` nodes sharing a `{group: ...}` cohort when
581
+ the milestone is under oracle-loop control (#2542).
582
+
583
+ A ``group`` annotation declares its members safe to dispatch — and
584
+ therefore author their JIT acceptance slices (``coord acceptance
585
+ author``, docs/ORACLE_LOOP.md) — CONCURRENTLY. Every slice for one
586
+ milestone additively appends to the SAME file,
587
+ ``tests/acceptance/ms-N/manifest.yml`` (``coord.test_author``'s "later
588
+ slices MERGE into this file" convention), so two issues in the same
589
+ group race on that write regardless of whether their actual feature
590
+ work overlaps at all — the coupling is mechanical, not semantic, and
591
+ so invisible to ``coord.overlap_predict`` (#2247), which only reasons
592
+ about declared/real *diffs*. coord-portal#122 hit exactly this: #128
593
+ and #132 shared ``{group: A}`` because they looked feature-independent
594
+ (a schema change vs. a status override) and both authored slices into
595
+ ms-N's manifest at once.
596
+
597
+ ``oracle_loop`` is the caller's already-resolved
598
+ ``config.acceptance.has_driver(repo_name)`` — this stays a pure
599
+ function, no config/GitHub reach-out of its own. A no-op when
600
+ ``oracle_loop`` is False (repos outside the oracle loop keep declaring
601
+ parallel groups exactly as before this check existed) or when no group
602
+ holds more than one node.
603
+
604
+ This is deliberately only the cheap, early check for the EXPLICIT-group
605
+ case — ``coord milestone write-order`` validates it before a word order
606
+ is ever written. It cannot catch two issues that share no declared
607
+ group but still end up concurrently eligible via the drive-queue's
608
+ per-repo concurrency cap (coord-portal#122's SECOND collision, #130 vs.
609
+ #132, filed as this issue's correction) — that hazard is closed
610
+ separately, by serializing the whole milestone's drive-queue ``after=``
611
+ chain (:func:`coord.milestone_dispatch.plan_queue`'s ``oracle_loop=``
612
+ parameter). Neither check alone is sufficient; see #2542.
613
+ """
614
+ if not oracle_loop:
615
+ return
616
+ by_group: dict[str, list[int]] = {}
617
+ for n in work_order.nodes:
618
+ if n.group:
619
+ by_group.setdefault(n.group, []).append(n.issue_number)
620
+ for group, numbers in by_group.items():
621
+ if len(numbers) > 1:
622
+ joined = ", ".join(f"#{i}" for i in numbers)
623
+ raise WorkOrderError(
624
+ f"work order: {joined} share group {group!r}, but this "
625
+ "milestone is under oracle-loop control (Gate A contract / "
626
+ "JIT test-author slices apply) — every issue's slice "
627
+ "additively appends to the SAME "
628
+ "tests/acceptance/ms-N/manifest.yml, so authoring them "
629
+ "concurrently races on that file regardless of whether the "
630
+ "issues' actual feature work overlaps (#2542). Sequence "
631
+ "them with `after:` instead of sharing a `group`."
632
+ )
633
+
634
+
574
635
  # ── Ready frontier ───────────────────────────────────────────────────────────
575
636
 
576
637
 
@@ -1317,6 +1317,14 @@ def _milestone_drain_tick(config: Config) -> list:
1317
1317
  that filter for free). A per-milestone fetch/dispatch error must not
1318
1318
  silence the other registered milestones — caught and logged per entry.
1319
1319
 
1320
+ Same ``oracle_loop`` capping as ``_milestone_gate_tick`` (#2542): a repo
1321
+ under oracle-loop control gets at most one dispatch per registered
1322
+ milestone per tick, so this legacy path can't fan two same-milestone
1323
+ entries out to distinct machines in one call and race them on the
1324
+ shared ``tests/acceptance/ms-N/manifest.yml`` either — even though only
1325
+ pre-#2335 registrations feed it today (see above), it is the same class
1326
+ of hole as the gate tick's and worth closing the same way.
1327
+
1320
1328
  Extracted as a module-level function so tests can call it directly
1321
1329
  without wiring up the async ``_tick_loop`` infrastructure (mirrors
1322
1330
  ``_auto_drain_tick``'s doc comment above).
@@ -1390,7 +1398,15 @@ def _milestone_drain_tick(config: Config) -> list:
1390
1398
  )
1391
1399
  continue
1392
1400
 
1393
- plan = md.plan_dispatch(ctx.work_order, board, config, repo_cfg, ctx.terminal_issues)
1401
+ # #2542: an oracle-loop repo (Gate A contract exists, JIT test-author
1402
+ # slices apply) may only dispatch one ready-frontier entry per tick —
1403
+ # see plan_dispatch's oracle_loop docstring for why (two concurrently
1404
+ # dispatched entries under one milestone race on the same shared
1405
+ # tests/acceptance/ms-N/manifest.yml).
1406
+ plan = md.plan_dispatch(
1407
+ ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
1408
+ oracle_loop=config.acceptance.has_driver(repo_name),
1409
+ )
1394
1410
  for pick in plan.to_dispatch:
1395
1411
  outcome = md.dispatch_entry(
1396
1412
  pick, repo_cfg, config, board, tracking_issue=tracking_issue
@@ -1466,6 +1482,14 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
1466
1482
  hold-and-report: it logs why it cannot advance and leaves the record
1467
1483
  where it is. Nothing here silently falls through.
1468
1484
 
1485
+ ``plan_dispatch`` is called with ``oracle_loop=config.acceptance.
1486
+ has_driver(repo_cfg.name)`` (#2542) — for a repo under oracle-loop
1487
+ control this caps the tick's dispatch at one ready-frontier entry, so
1488
+ this walk (docs/ORACLE_LOOP.md's "oracle drive", #1453 — the documented
1489
+ primary driver for an oracle-loop milestone) can never launch two
1490
+ same-milestone entries into their JIT slice-authoring phase in the same
1491
+ tick, racing on the shared ``tests/acceptance/ms-N/manifest.yml``.
1492
+
1469
1493
  Deliberately **not** gated on ``config.milestone.auto_dispatch`` — that
1470
1494
  flag gates the legacy standalone drain (:func:`_milestone_drain_tick`),
1471
1495
  whereas gate driving is opted into per milestone by an explicit ``coord
@@ -1557,8 +1581,20 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
1557
1581
  # and _milestone_drain_tick use, so gate policy and dispatch
1558
1582
  # policy can't drift apart.
1559
1583
  try:
1584
+ # #2542: cap this tick's dispatch to one entry for an
1585
+ # oracle-loop milestone — see plan_dispatch's oracle_loop
1586
+ # docstring. Without it, `plan_dispatch`'s normal N-ready ->
1587
+ # N-idle-machine fan-out (by design, for non-oracle-loop
1588
+ # milestones) lets two same-milestone entries both start
1589
+ # their JIT slice-authoring phase in this single for-loop,
1590
+ # racing on the same tests/acceptance/ms-N/manifest.yml —
1591
+ # this is the "third, independent place" gap the write-order
1592
+ # validator and plan_queue's chaining alone don't cover: the
1593
+ # gate walk (docs/ORACLE_LOOP.md's "oracle drive", #1453) is
1594
+ # the documented primary driver for an oracle-loop milestone.
1560
1595
  plan = md.plan_dispatch(
1561
- ctx.work_order, board, config, repo_cfg, ctx.terminal_issues
1596
+ ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
1597
+ oracle_loop=config.acceptance.has_driver(repo_cfg.name),
1562
1598
  )
1563
1599
  for pick in plan.to_dispatch:
1564
1600
  outcome = md.dispatch_entry(
@@ -491,6 +491,109 @@ class TestMilestoneDispatchGateA:
491
491
  assert "Gate A" not in result.output
492
492
 
493
493
 
494
+ class TestMilestoneDispatchOracleLoopSerializes:
495
+ """#2542: under oracle-loop control (an acceptance driver configured —
496
+ Gate A already satisfied by the `config_file_with_gate_a` fixture's
497
+ mocked contract), bulk `coord milestone dispatch` must chain the WHOLE
498
+ milestone into the drive-queue one entry at a time — the #130/#132
499
+ coord-portal#122 collision this issue's correction describes had no
500
+ shared `group` at all, so only the drive-queue translation itself (not
501
+ the write-order validator) can close it."""
502
+
503
+ def test_group_cohort_gets_a_serializing_after_edge(
504
+ self, config_file_with_gate_a: Path,
505
+ ) -> None:
506
+ """#762/#763 share {group: A} — plain (non-oracle) dispatch queues
507
+ them with no edge between them (see TestMilestoneDispatchBulk); under
508
+ an acceptance driver, #763 additionally gets `after api#762`."""
509
+ open_issues = [
510
+ {"number": 762, "milestone": {"number": 9}},
511
+ {"number": 763, "milestone": {"number": 9}},
512
+ {"number": 765, "milestone": {"number": 9}},
513
+ ]
514
+ with patch("coord.github_ops.get_issue", side_effect=_get_issue), \
515
+ patch("coord.github_ops.get_open_issues", return_value=open_issues), \
516
+ patch("coord.github_ops.get_repo_file", return_value="# Contract\n"), \
517
+ patch("coord.board_service.read_board", return_value=Board()), \
518
+ patch("coord.dispatch.dispatch") as disp:
519
+ result = CliRunner().invoke(
520
+ main,
521
+ ["milestone", "dispatch", "api", "100", "--config",
522
+ str(config_file_with_gate_a)],
523
+ )
524
+ assert result.exit_code == 0, result.output
525
+ disp.assert_not_called()
526
+
527
+ rows = state_mod.list_drive_queue()
528
+ by_issue = {r["issue_number"]: r for r in rows}
529
+ assert by_issue[762]["after_json"] == []
530
+ assert by_issue[763]["after_json"] == ["api#762"]
531
+ # #765 was already declared `after: #762,#763` — unaffected by the
532
+ # implicit chain (its immediate predecessor, #763, is already there).
533
+ assert by_issue[765]["after_json"] == ["api#762", "api#763"]
534
+
535
+ def test_ungrouped_independent_issues_still_get_chained(
536
+ self, config_file_with_gate_a: Path,
537
+ ) -> None:
538
+ """The SECOND coord-portal#122 collision (#130 vs. #132): no shared
539
+ group, no declared `after` between them at all — the drive-queue's
540
+ per-repo concurrency cap alone would launch both. Confirms the fix
541
+ isn't scoped to the explicit-group case."""
542
+ body = "## Work order\n- [ ] #762\n- [ ] #763\n"
543
+ open_issues = [
544
+ {"number": 762, "milestone": {"number": 9}},
545
+ {"number": 763, "milestone": {"number": 9}},
546
+ ]
547
+
548
+ def get_issue(repo, number):
549
+ return _get_issue(repo, number, bodies={100: body})
550
+
551
+ with patch("coord.github_ops.get_issue", side_effect=get_issue), \
552
+ patch("coord.github_ops.get_open_issues", return_value=open_issues), \
553
+ patch("coord.github_ops.get_repo_file", return_value="# Contract\n"), \
554
+ patch("coord.board_service.read_board", return_value=Board()), \
555
+ patch("coord.dispatch.dispatch") as disp:
556
+ result = CliRunner().invoke(
557
+ main,
558
+ ["milestone", "dispatch", "api", "100", "--config",
559
+ str(config_file_with_gate_a)],
560
+ )
561
+ assert result.exit_code == 0, result.output
562
+ disp.assert_not_called()
563
+
564
+ rows = state_mod.list_drive_queue()
565
+ by_issue = {r["issue_number"]: r for r in rows}
566
+ assert by_issue[762]["after_json"] == []
567
+ assert by_issue[763]["after_json"] == ["api#762"]
568
+
569
+ def test_repo_without_acceptance_driver_is_not_chained(
570
+ self, config_file: Path,
571
+ ) -> None:
572
+ """No acceptance driver configured -> not under oracle-loop control
573
+ -> the group cohort dispatches exactly as before #2542 (no implicit
574
+ edge)."""
575
+ open_issues = [
576
+ {"number": 762, "milestone": {"number": 9}},
577
+ {"number": 763, "milestone": {"number": 9}},
578
+ {"number": 765, "milestone": {"number": 9}},
579
+ ]
580
+ with patch("coord.github_ops.get_issue", side_effect=_get_issue), \
581
+ patch("coord.github_ops.get_open_issues", return_value=open_issues), \
582
+ patch("coord.board_service.read_board", return_value=Board()), \
583
+ patch("coord.dispatch.dispatch") as disp:
584
+ result = CliRunner().invoke(
585
+ main,
586
+ ["milestone", "dispatch", "api", "100", "--config", str(config_file)],
587
+ )
588
+ assert result.exit_code == 0, result.output
589
+ disp.assert_not_called()
590
+
591
+ rows = state_mod.list_drive_queue()
592
+ by_issue = {r["issue_number"]: r for r in rows}
593
+ assert by_issue[762]["after_json"] == []
594
+ assert by_issue[763]["after_json"] == []
595
+
596
+
494
597
  class TestMilestoneDispatchGateControlled:
495
598
  """#1930 (epic #1440 S-2): a milestone under gate control (``coord
496
599
  milestone drive``) is drained exclusively by the daemon's gate tick.