code-coordinator 0.5.211__tar.gz → 0.5.214__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 (804) hide show
  1. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/drive_queue.py +165 -0
  5. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notify.py +108 -7
  6. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ORACLE_LOOP.md +10 -2
  7. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_drive_queue.py +143 -0
  8. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stalled_pipeline.py +272 -0
  9. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_board_audit.py +16 -0
  10. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/dialogs.rs +44 -7
  11. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/pipeline.rs +630 -0
  12. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/tests.rs +435 -1
  13. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/commands.rs +312 -4
  14. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.gitignore +0 -0
  29. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/GOAL.md +0 -0
  31. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/LICENSE +0 -0
  32. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/README.md +0 -0
  34. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/client.py +0 -0
  67. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/release.py +0 -0
  86. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/repo.py +0 -0
  87. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/report.py +0 -0
  88. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/review.py +0 -0
  89. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/scorecard.py +0 -0
  90. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/sessions.py +0 -0
  91. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/setup.py +0 -0
  92. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/status.py +0 -0
  93. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/config.py +0 -0
  98. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/db.py +0 -0
  108. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dead_end.py +0 -0
  109. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-notify.service +0 -0
  117. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-notify.timer +0 -0
  118. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-propagate.service +0 -0
  119. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-propagate.timer +0 -0
  120. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-window.service +0 -0
  121. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-window.timer +0 -0
  122. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-serve.service +0 -0
  123. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web-dist-build.service +0 -0
  124. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web-dist-build.timer +0 -0
  125. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web.service +0 -0
  126. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy_manifest.py +0 -0
  127. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy_units.py +0 -0
  128. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deps.py +0 -0
  129. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/diagnose.py +0 -0
  130. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dispatch.py +0 -0
  131. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dist_name.py +0 -0
  132. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive.py +0 -0
  133. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive_queue.py +0 -0
  134. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive_state.py +0 -0
  135. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/events.py +0 -0
  136. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/failure_class.py +0 -0
  137. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/filelock.py +0 -0
  138. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/fleet_config_health.py +0 -0
  139. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/forge_availability.py +0 -0
  140. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/freshness.py +0 -0
  141. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_a.py +0 -0
  142. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_b.py +0 -0
  143. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_snapshot.py +0 -0
  144. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gates.py +0 -0
  145. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/github_ops.py +0 -0
  146. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/goal.py +0 -0
  147. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/graph_health.py +0 -0
  148. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/__init__.py +0 -0
  149. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/aggregate.py +0 -0
  150. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/__init__.py +0 -0
  151. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/agent_install.py +0 -0
  152. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/cargo_targets.py +0 -0
  153. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/claude_binary.py +0 -0
  154. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/coord_web_ci_pin.py +0 -0
  155. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/deploy_lane_facts.py +0 -0
  156. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/disk.py +0 -0
  157. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_board.py +0 -0
  158. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  159. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_phantom.py +0 -0
  160. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_unit_drift.py +0 -0
  161. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/graph.py +0 -0
  162. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/graphify_cli.py +0 -0
  163. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/index_lock.py +0 -0
  164. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/plan_usage.py +0 -0
  165. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/repo_state.py +0 -0
  166. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/spawned_coord.py +0 -0
  167. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/timer_active.py +0 -0
  168. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/toolchain.py +0 -0
  169. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/unit_drift.py +0 -0
  170. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/unit_enablement.py +0 -0
  171. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/worktrees.py +0 -0
  172. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/cli.py +0 -0
  173. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/context.py +0 -0
  174. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/fleet_snapshot.py +0 -0
  175. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/models.py +0 -0
  176. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/pypi.py +0 -0
  177. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/registry.py +0 -0
  178. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/render.py +0 -0
  179. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/units.py +0 -0
  180. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/hooks.py +0 -0
  181. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/housekeeping.py +0 -0
  182. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/interactive.py +0 -0
  183. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/issue_store.py +0 -0
  184. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/liveness_auditor.py +0 -0
  185. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/machine_pause.py +0 -0
  186. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/merge_queue.py +0 -0
  187. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_chat.py +0 -0
  188. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_dispatch.py +0 -0
  189. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_gate.py +0 -0
  190. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_order.py +0 -0
  191. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/mock_author.py +0 -0
  192. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/models.py +0 -0
  193. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/network.py +0 -0
  194. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/new_issue_chat.py +0 -0
  195. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/__init__.py +0 -0
  196. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/baseline.py +0 -0
  197. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/cli.py +0 -0
  198. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/collect.py +0 -0
  199. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/digest.py +0 -0
  200. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/models.py +0 -0
  201. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/predicate.py +0 -0
  202. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/service.py +0 -0
  203. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/store.py +0 -0
  204. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/transport.py +0 -0
  205. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/openapi.py +0 -0
  206. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/overlap_fence.py +0 -0
  207. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/overlap_predict.py +0 -0
  208. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/parentage.py +0 -0
  209. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/parentage_github.py +0 -0
  210. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/pipeline.py +0 -0
  211. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/plan_parser.py +0 -0
  212. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/plans.py +0 -0
  213. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/platform_paths.py +0 -0
  214. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_bridge.py +0 -0
  215. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_store.py +0 -0
  216. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_sync.py +0 -0
  217. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/pr_body_lint.py +0 -0
  218. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/prereqs.py +0 -0
  219. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/progress.py +0 -0
  220. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/__init__.py +0 -0
  221. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/base.py +0 -0
  222. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/claude.py +0 -0
  223. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/claude_pty.py +0 -0
  224. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/opencode.py +0 -0
  225. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/queue_diagnose.py +0 -0
  226. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reconcile.py +0 -0
  227. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reconcile_tick.py +0 -0
  228. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/refine_chat.py +0 -0
  229. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_cordon.py +0 -0
  230. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_propagate.py +0 -0
  231. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_verify.py +0 -0
  232. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_window.py +0 -0
  233. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/repo_edit.py +0 -0
  234. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/repo_onboard.py +0 -0
  235. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reports.py +0 -0
  236. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/revalidate.py +0 -0
  237. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/review.py +0 -0
  238. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/scorecard.py +0 -0
  239. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/self_health.py +0 -0
  240. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/serve_app.py +0 -0
  241. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  242. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  243. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  244. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  245. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  246. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/portal-followup/SKILL.md +0 -0
  247. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  248. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  249. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/update-issue/SKILL.md +0 -0
  250. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/smoke.py +0 -0
  251. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/spend_ceiling.py +0 -0
  252. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/split_work.py +0 -0
  253. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/stage_projection.py +0 -0
  254. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/state.py +0 -0
  255. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_author.py +0 -0
  256. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_chat.py +0 -0
  257. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_orchestrator.py +0 -0
  258. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_report.py +0 -0
  259. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/tui_release.py +0 -0
  260. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage.py +0 -0
  261. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage_limits.py +0 -0
  262. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage_rollup.py +0 -0
  263. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/worker_events.py +0 -0
  264. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coordinator.example.yml +0 -0
  265. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-agent.service +0 -0
  266. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.service +0 -0
  267. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.sh +0 -0
  268. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.timer +0 -0
  269. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-drive-queue.service +0 -0
  270. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-drive-queue.timer +0 -0
  271. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-notify.service +0 -0
  272. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-notify.timer +0 -0
  273. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-propagate.service +0 -0
  274. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-propagate.timer +0 -0
  275. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-window.service +0 -0
  276. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-window.timer +0 -0
  277. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-serve.service +0 -0
  278. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.service +0 -0
  279. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.sh +0 -0
  280. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.timer +0 -0
  281. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-rollback.sh +0 -0
  282. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web.service +0 -0
  283. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/node-shim.sh +0 -0
  284. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  285. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_CI.md +0 -0
  286. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_DIST.md +0 -0
  287. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/AGENT_OPERATIONS.md +0 -0
  288. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ARCHITECTURE.md +0 -0
  289. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ARCH_SECURITY_GATES.md +0 -0
  290. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/COCKPIT.md +0 -0
  291. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CONTROL_CENTER.md +0 -0
  292. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/COST_DISCIPLINE.md +0 -0
  293. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CROSS_PLATFORM.md +0 -0
  294. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CUSTOMER_PORTAL.md +0 -0
  295. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/DRIVE_QUEUE.md +0 -0
  296. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/EPHEMERAL_WORKERS.md +0 -0
  297. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/FORGE_MIGRATION.md +0 -0
  298. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/GRAPHIFY_SETUP.md +0 -0
  299. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ISSUE_GUIDANCE.md +0 -0
  300. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/MAC_MINI.md +0 -0
  301. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  302. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/NOTIFIER.md +0 -0
  303. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/OPENCODE_VERIFICATION.md +0 -0
  304. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/OPERATING_GOTCHAS.md +0 -0
  305. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PHONE_WEBAPP.md +0 -0
  306. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PIPELINE_V2.md +0 -0
  307. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PLATFORM_EVOLUTION.md +0 -0
  308. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/SECOND_BACKEND.md +0 -0
  309. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/STORE_SERVICE.md +0 -0
  310. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  311. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/WEB_CONTROL_CENTER.md +0 -0
  312. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/WSL_WINDOWS_WORKER.md +0 -0
  313. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/README.md +0 -0
  314. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/_tokens.css +0 -0
  315. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/issue-detail.html +0 -0
  316. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/pipeline-narrow.html +0 -0
  317. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/pipeline-wide.html +0 -0
  318. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/graphify-out/.gitignore +0 -0
  319. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/install-agent.sh +0 -0
  320. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/pyproject.toml +0 -0
  321. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/audit_review_verdict_overrides.py +0 -0
  322. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  323. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/build-worker-image.sh +0 -0
  324. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/coordinator-machine.py +0 -0
  325. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/epic-down.sh +0 -0
  326. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/epic-up.sh +0 -0
  327. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/preflight.sh +0 -0
  328. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/provision-worker.sh +0 -0
  329. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  330. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  331. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/verify-github-token.sh +0 -0
  332. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/check_gh_argv_containment.py +0 -0
  333. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/codegen.py +0 -0
  334. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/coord-test-runner.sh +0 -0
  335. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/drive-batch.sh +0 -0
  336. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/gen_board_fixture.py +0 -0
  337. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/gen_mock_index.py +0 -0
  338. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/next_release_tag.py +0 -0
  339. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/run_tests_in_populated_home.sh +0 -0
  340. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/run_tests_without_gh.sh +0 -0
  341. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/smoke_437_interactive.py +0 -0
  342. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_878_review_capture.py +0 -0
  343. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_release_published.py +0 -0
  344. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_release_wheel.py +0 -0
  345. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/setup.cfg +0 -0
  346. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/SMOKE_SET.md +0 -0
  347. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/__init__.py +0 -0
  348. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  349. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/contract.md +0 -0
  350. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/manifest.yml +0 -0
  351. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  352. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  353. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  354. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  355. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/conftest.py +0 -0
  356. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/contract.md +0 -0
  357. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/manifest.yml +0 -0
  358. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  359. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  360. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/contract.md +0 -0
  361. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/manifest.yml +0 -0
  362. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  363. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  364. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  365. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  366. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  367. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  368. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  369. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  370. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  371. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  372. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/contract.md +0 -0
  373. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  374. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  375. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/manifest.yml +0 -0
  376. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  377. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/tsconfig.json +0 -0
  378. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  379. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  380. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  381. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/contract.md +0 -0
  382. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  383. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/manifest.yml +0 -0
  384. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  385. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  386. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  387. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  388. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  389. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  390. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  391. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  392. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  393. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  394. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  395. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/contract.md +0 -0
  396. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  402. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/conftest.py +0 -0
  403. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/board-pipeline-basic.json +0 -0
  404. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  405. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  406. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  407. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  408. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/all_pass.json +0 -0
  409. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  410. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/mixed_fail.json +0 -0
  411. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  412. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  413. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/skip.json +0 -0
  414. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/truncated.json +0 -0
  415. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  416. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  417. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  418. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  419. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  420. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  421. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  422. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  423. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_acceptance.py +0 -0
  424. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_acceptance_drivers.py +0 -0
  425. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent.py +0 -0
  426. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_api_error.py +0 -0
  427. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_app.py +0 -0
  428. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_branch_base.py +0 -0
  429. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_branch_capture.py +0 -0
  430. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_config_free_1712.py +0 -0
  431. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_deploy_units_endpoint.py +0 -0
  432. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_dirty_worktree.py +0 -0
  433. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  434. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_graph_self_heal.py +0 -0
  435. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_health_h3.py +0 -0
  436. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_idle_restart.py +0 -0
  437. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_push_failure.py +0 -0
  438. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_reap.py +0 -0
  439. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_repos_and_pull.py +0 -0
  440. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_restart_services_endpoint.py +0 -0
  441. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_skills_self_heal.py +0 -0
  442. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_startup_diagnostics.py +0 -0
  443. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_update.py +0 -0
  444. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_update_bluegreen.py +0 -0
  445. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_usage_limit.py +0 -0
  446. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_zero_commit.py +0 -0
  447. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ambient_home_isolation.py +0 -0
  448. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_approve_reject_plan.py +0 -0
  449. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_approve_usage_gate.py +0 -0
  450. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_assignment_already_recorded_daemon.py +0 -0
  451. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_log.py +0 -0
  452. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_outcome.py +0 -0
  453. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_query.py +0 -0
  454. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_auto_loop.py +0 -0
  455. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_auto_release_publish_2035.py +0 -0
  456. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_base_checkout_restore.py +0 -0
  457. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_block_log.py +0 -0
  458. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_cap_762.py +0 -0
  459. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_fixture.py +0 -0
  460. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_read_path.py +0 -0
  461. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_service.py +0 -0
  462. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_state.py +0 -0
  463. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_wire.py +0 -0
  464. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_brain.py +0 -0
  465. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_branch_model.py +0 -0
  466. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_bug_intake.py +0 -0
  467. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_build_worker_image_env_update.py +0 -0
  468. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cargo_cache.py +0 -0
  469. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_check_gh_argv_containment.py +0 -0
  470. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_acceptance_gate_1950.py +0 -0
  471. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_fix.py +0 -0
  472. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_gitlab.py +0 -0
  473. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_parity_2091.py +0 -0
  474. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_store.py +0 -0
  475. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_claim.py +0 -0
  476. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_acceptance.py +0 -0
  477. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign.py +0 -0
  478. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  479. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_interactive_remote.py +0 -0
  480. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_provider.py +0 -0
  481. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  482. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_audit.py +0 -0
  483. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_chat_continue.py +0 -0
  484. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_decide.py +0 -0
  485. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_config_provenance.py +0 -0
  486. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_forge_availability.py +0 -0
  487. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_graph.py +0 -0
  488. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_self.py +0 -0
  489. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor.py +0 -0
  490. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor_config_free_1801.py +0 -0
  491. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  492. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_drive.py +0 -0
  493. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_issue_create_label.py +0 -0
  499. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_issue_reopen.py +0 -0
  500. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_pull_artifact.py +0 -0
  515. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_queue.py +0 -0
  516. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_reattach_sessions.py +0 -0
  517. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_refine_board.py +0 -0
  518. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_preflight.py +0 -0
  519. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_propagate.py +0 -0
  520. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_window.py +0 -0
  521. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_repo_2220.py +0 -0
  522. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_merge_queue.py +0 -0
  526. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_provider.py +0 -0
  527. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_review_finalizing.py +0 -0
  528. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_test_failed_tag.py +0 -0
  529. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_usage_limit.py +0 -0
  530. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_sync_comments_873.py +0 -0
  531. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_test_plan.py +0 -0
  532. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_track.py +0 -0
  533. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_tui_update.py +0 -0
  534. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_wait.py +0 -0
  535. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_client_base_install.py +0 -0
  536. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_comments.py +0 -0
  537. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_completion_summary.py +0 -0
  538. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config.py +0 -0
  539. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_acceptance.py +0 -0
  540. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_audit.py +0 -0
  541. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_pricing.py +0 -0
  542. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  543. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_usage_gate.py +0 -0
  544. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_confirm_test.py +0 -0
  545. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_conflict_fix.py +0 -0
  546. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_conflict_fix_semantic.py +0 -0
  547. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test.py +0 -0
  548. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_baseline.py +0 -0
  549. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_populated_home.py +0 -0
  550. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_routing.py +0 -0
  551. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_toolchain.py +0 -0
  552. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard.py +0 -0
  556. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_fixture.py +0 -0
  557. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_terminal.py +0 -0
  558. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_terminal_live.py +0 -0
  559. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_db.py +0 -0
  560. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dead_end.py +0 -0
  561. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_db_backup.py +0 -0
  562. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_web_dist.py +0 -0
  563. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_web_rollback.py +0 -0
  564. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_drive_queue_unit.py +0 -0
  565. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_manifest.py +0 -0
  566. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_units_lane.py +0 -0
  567. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_web_unit.py +0 -0
  568. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deps.py +0 -0
  569. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_diagnose.py +0 -0
  570. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dispatch.py +0 -0
  571. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dispatch_target_validation.py +0 -0
  572. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dist_name.py +0 -0
  573. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive.py +0 -0
  575. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_queue.py +0 -0
  576. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_state.py +0 -0
  577. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_tmux.py +0 -0
  578. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_capability_detection.py +0 -0
  579. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  580. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_image_provenance.py +0 -0
  581. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_errors.py +0 -0
  582. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_events.py +0 -0
  583. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_failure_class.py +0 -0
  584. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_filelock.py +0 -0
  585. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  586. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fix_of_force_override.py +0 -0
  587. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_config_health.py +0 -0
  588. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_health_probes.py +0 -0
  589. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_health_snapshot.py +0 -0
  590. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_forge_availability.py +0 -0
  591. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_freshness.py +0 -0
  592. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_a.py +0 -0
  593. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_b.py +0 -0
  594. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_snapshot_staleness.py +0 -0
  595. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gates.py +0 -0
  596. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  597. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gen_mock_index.py +0 -0
  598. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_generated_types_fixture.py +0 -0
  599. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_github_ops.py +0 -0
  600. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_goal.py +0 -0
  601. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_graph_health.py +0 -0
  602. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_graph_selfheal_absent_2237.py +0 -0
  603. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_handoff.py +0 -0
  604. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_checks.py +0 -0
  605. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_cli.py +0 -0
  606. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_cli_graph.py +0 -0
  607. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_config.py +0 -0
  608. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_context.py +0 -0
  609. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_coord_web_ci_pin.py +0 -0
  610. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_deploy_lane_facts.py +0 -0
  611. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_incident_regression.py +0 -0
  612. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_pypi.py +0 -0
  613. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_registry.py +0 -0
  614. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_timer_active.py +0 -0
  615. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_toolchain.py +0 -0
  616. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_unit_drift.py +0 -0
  617. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_unit_enablement.py +0 -0
  618. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_hooks.py +0 -0
  619. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_human_attended_437.py +0 -0
  620. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_init.py +0 -0
  621. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_integration.py +0 -0
  622. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_briefing_echo.py +0 -0
  623. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_prefill_state.py +0 -0
  624. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_session_relaunch.py +0 -0
  625. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_test_verdict_backstop.py +0 -0
  626. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_token_attribution.py +0 -0
  627. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_worktree.py +0 -0
  628. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_issue_store_seam.py +0 -0
  629. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_liveness_auditor.py +0 -0
  630. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_liveness_notify.py +0 -0
  631. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_machine_pause.py +0 -0
  632. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_merge_queue.py +0 -0
  633. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_merge_verify.py +0 -0
  634. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_chat.py +0 -0
  635. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_dispatch.py +0 -0
  636. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_gate.py +0 -0
  637. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_order.py +0 -0
  638. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_seam.py +0 -0
  639. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_mock_author.py +0 -0
  640. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_model_tiering.py +0 -0
  641. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_models.py +0 -0
  642. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_models_config_labels.py +0 -0
  643. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_needs_attention.py +0 -0
  644. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_network.py +0 -0
  645. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_new_issue_chat.py +0 -0
  646. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_next_release_tag.py +0 -0
  647. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_node_shim.py +0 -0
  648. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_baseline.py +0 -0
  649. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_cli.py +0 -0
  650. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_collect.py +0 -0
  651. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_config.py +0 -0
  652. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_drive_seam.py +0 -0
  653. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_isolation.py +0 -0
  654. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_predicate.py +0 -0
  655. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_quiet_hours.py +0 -0
  656. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_service.py +0 -0
  657. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notify.py +0 -0
  658. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notify_drain.py +0 -0
  659. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_openapi.py +0 -0
  660. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_operational_defaults.py +0 -0
  661. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_overlap_fence.py +0 -0
  662. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_overlap_predict.py +0 -0
  663. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_packaged_deploy_units.py +0 -0
  664. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_state.py +0 -0
  741. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_state_review_findings_daemon.py +0 -0
  742. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_status_fleet_footer.py +0 -0
  743. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stop_1567.py +0 -0
  744. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stuck.py +0 -0
  745. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_terminal_command.py +0 -0
  746. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_author.py +0 -0
  747. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_chat.py +0 -0
  748. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_orchestrator.py +0 -0
  749. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_report.py +0 -0
  750. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_verdict_parsing.py +0 -0
  751. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_verdict_transcript_floor.py +0 -0
  752. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_config_load_1080.py +0 -0
  753. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_daemon_routing_906.py +0 -0
  754. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_tmux_host.py +0 -0
  755. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_tmux_session.py +0 -0
  756. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_transcript_floor.py +0 -0
  757. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage.py +0 -0
  758. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage_limits.py +0 -0
  759. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage_rollup.py +0 -0
  760. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_venv_live_install_2121.py +0 -0
  761. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_version_single_source.py +0 -0
  762. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_watch.py +0 -0
  763. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  764. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_events.py +0 -0
  765. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_image_pin_sync.py +0 -0
  766. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_safety.py +0 -0
  767. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_test_scoping.py +0 -0
  768. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worktree.py +0 -0
  769. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  770. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/Cargo.lock +0 -0
  771. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/Cargo.toml +0 -0
  772. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/cargo-config-local-quadraui.toml.example +0 -0
  773. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/audit.rs +0 -0
  774. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/chat.rs +0 -0
  775. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/data.rs +0 -0
  776. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/doc_tabs.rs +0 -0
  777. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/drive.rs +0 -0
  778. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/drive_queue.rs +0 -0
  779. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/escalation.rs +0 -0
  780. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/events.rs +0 -0
  781. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fixtures.rs +0 -0
  782. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_health.rs +0 -0
  783. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_sessions.rs +0 -0
  784. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_terminals.rs +0 -0
  785. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/format.rs +0 -0
  786. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/milestone_dag.rs +0 -0
  787. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/mod.rs +0 -0
  788. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/msv.rs +0 -0
  789. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/plans.rs +0 -0
  790. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/render.rs +0 -0
  791. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/reports.rs +0 -0
  792. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/sessions.rs +0 -0
  793. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/settings_ui.rs +0 -0
  794. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/sidebar.rs +0 -0
  795. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/terminal.rs +0 -0
  796. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/types.rs +0 -0
  797. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/workspace.rs +0 -0
  798. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/bin/gtk.rs +0 -0
  799. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/lib.rs +0 -0
  800. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/main.rs +0 -0
  801. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/settings.rs +0 -0
  802. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/tests/acceptance.rs +0 -0
  803. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/tests/cli.rs +0 -0
  804. {code_coordinator-0.5.211 → code_coordinator-0.5.214}/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.211
3
+ Version: 0.5.214
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.211
3
+ Version: 0.5.214
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.211",
2
+ "tag": "0.5.214",
3
3
  "distance": 0,
4
- "node": "g69492bc482e0d53d98048d02518e14923db70112",
4
+ "node": "g2e87641a37faa3849364d808e9047a3c9632f0c2",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -2350,6 +2350,162 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
2350
2350
  click.echo(f"merge-only: {reason}")
2351
2351
 
2352
2352
 
2353
+ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
2354
+ """#2535: best-effort auto-fire of the CI-staleness rerun for merge-queue
2355
+ entries blocked SOLELY on stale CI checks against an already-approved
2356
+ review — closing the gap where nothing periodic ever calls a live
2357
+ ``coord merge`` or ``coord merge --revalidate`` on such an entry's
2358
+ behalf, so it just sits until an operator notices ``--dry-run``'s
2359
+ ``checks_stale`` line and reruns by hand (the trigger: #2530's Gate-A
2360
+ PR #2534 sat blocked 2026-08-21 on nothing but 210 unrelated merges
2361
+ having landed since its CI last ran).
2362
+
2363
+ Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
2364
+ flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
2365
+ 2026-06-07 incident it guards against). This step never merges anything
2366
+ and never touches an entry blocked on review, a real CI failure, or a
2367
+ conflict — it only triggers a ``gh run rerun`` for the exact shape
2368
+ :func:`coord.merge_queue.ci_revalidation_candidates` already scopes
2369
+ ``--revalidate``'s CI arm to (#1851/#1925): ``PENDING``, review
2370
+ approved, smoke fresh, CI checks green but predating the current base.
2371
+
2372
+ BOUNDED, shared with the live path. Draws from the SAME
2373
+ ``ci_stale_reruns``/``MAX_CI_STALE_RERUNS`` budget
2374
+ :func:`coord.merge_queue.process`'s own #2197 auto-rerun already spends
2375
+ from — a live ``coord merge`` attempt and this tick share one ceiling,
2376
+ never two independent ones that could double the effective retry count.
2377
+ An entry that has already exhausted the budget (on a prior live attempt
2378
+ or a prior tick) is left for a human exactly as #2197 already leaves it;
2379
+ this function never fires a further rerun past the cap, though it does
2380
+ keep recording the escalation (below) for as long as the entry stays
2381
+ stuck, so a human watching the audit trail sees it, not just the first
2382
+ tick that hit the ceiling.
2383
+
2384
+ Cost-visible (#1632's posture): every triggered rerun is a real CI run
2385
+ on GitHub's own runners, recorded via :func:`coord.audit.record_audit`
2386
+ (operational tier) so an operator can see the auto-fired count — same
2387
+ spirit as the notifier being advisory rather than silent, never a
2388
+ silent background spend.
2389
+
2390
+ Deliberately NOT behind a new config flag — this reuses exactly the
2391
+ bound and the counter #2197 already established for "an automatic CI
2392
+ rerun triggered by staleness"; the only thing new here is a periodic
2393
+ caller for the case nothing was already about to call ``process()``
2394
+ live. If that judgment turns out to be wrong in practice, the fix is a
2395
+ ``merge.auto_revalidate_stale_ci`` off-switch, not removing the
2396
+ dedicated budget this already shares.
2397
+
2398
+ Best-effort like every other optional step in this tick (conflict
2399
+ reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
2400
+ a failure here must never abort the rest of the tick. Skipped entirely
2401
+ on a thin client — this daemon-host tick is the only place it ever
2402
+ runs, same guard :func:`_fetch_live_ci_gate`/
2403
+ :func:`_run_merge_only_candidates` use.
2404
+ """
2405
+ from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
2406
+
2407
+ if resolve_board_service() is not None:
2408
+ return
2409
+
2410
+ try:
2411
+ from coord import github_ops as _gh_ops # noqa: PLC0415
2412
+ from coord import merge_queue as _mq # noqa: PLC0415
2413
+ from coord.audit import record_audit # noqa: PLC0415
2414
+ from coord.ci_store import build_ci_store # noqa: PLC0415
2415
+ from coord.commands._common import _load_config # noqa: PLC0415
2416
+ from coord.state import load_board as _load_board # noqa: PLC0415
2417
+
2418
+ cfg = _load_config(config_path)
2419
+ board = _load_board()
2420
+ ci_store = build_ci_store(
2421
+ cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
2422
+ )
2423
+ if ci_store is None or not ci_store.is_available:
2424
+ return
2425
+ items = _mq.load_queue()
2426
+ candidates = _mq.ci_revalidation_candidates(items, board, cfg, ci_store, _gh_ops)
2427
+ except Exception: # noqa: BLE001 — best-effort, see docstring
2428
+ return
2429
+
2430
+ if not candidates:
2431
+ return
2432
+
2433
+ touched: list = []
2434
+ for entry in candidates:
2435
+ label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
2436
+ if entry.ci_stale_reruns >= _mq.MAX_CI_STALE_RERUNS:
2437
+ # Budget already spent (on a previous tick, or a previous live
2438
+ # `coord merge` attempt) — #2197's own terminal wording is
2439
+ # already on the entry from whichever call last evaluated it.
2440
+ # Nothing new to trigger; still worth one audit row per tick so
2441
+ # an operator watching the trail sees this has been sitting
2442
+ # exhausted, not silently forgotten.
2443
+ record_audit(
2444
+ tier="operational", category="merge",
2445
+ event_type="merge_checks_stale_auto_revalidate_exhausted",
2446
+ actor="drive-queue-tick",
2447
+ summary=(
2448
+ f"auto-revalidate: {label} still checks_stale after "
2449
+ f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
2450
+ "auto-reruns — needs a human (`coord merge --revalidate` "
2451
+ "or `coord merge --only`)"
2452
+ ),
2453
+ repo=entry.repo_name, issue=entry.issue_number,
2454
+ assignment_id=entry.assignment_id,
2455
+ details={
2456
+ "pr_number": entry.pr_number,
2457
+ "ci_stale_reruns": entry.ci_stale_reruns,
2458
+ },
2459
+ )
2460
+ continue
2461
+ try:
2462
+ reran = ci_store.rerun_for_pr(entry.repo_github, entry.pr_number)
2463
+ except Exception as exc: # noqa: BLE001 — one entry's failure must not sink the rest
2464
+ click.echo(
2465
+ f"auto-revalidate: could not re-run CI for {label}: {exc}", err=True
2466
+ )
2467
+ continue
2468
+ entry.ci_stale_reruns += 1
2469
+ entry.error = (
2470
+ f"{_mq.CI_PENDING_PREFIX} re-run triggered for CI checks that "
2471
+ "predate the current base (#2535 auto-revalidate "
2472
+ f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
2473
+ f"{'triggered' if reran else 'failed to trigger'})"
2474
+ )
2475
+ touched.append(entry)
2476
+ click.echo(
2477
+ f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
2478
+ f"a CI re-run for {label} (checks_stale, review already approved) "
2479
+ f"— {entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS}"
2480
+ )
2481
+ record_audit(
2482
+ tier="operational", category="merge",
2483
+ event_type="merge_checks_stale_auto_revalidate",
2484
+ actor="drive-queue-tick",
2485
+ summary=(
2486
+ f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
2487
+ f"a CI re-run for {label} — {entry.ci_stale_reruns}/"
2488
+ f"{_mq.MAX_CI_STALE_RERUNS}"
2489
+ ),
2490
+ repo=entry.repo_name, issue=entry.issue_number,
2491
+ assignment_id=entry.assignment_id,
2492
+ details={"pr_number": entry.pr_number, "reran": reran},
2493
+ )
2494
+
2495
+ if not touched:
2496
+ return
2497
+
2498
+ try:
2499
+ from coord import merge_queue as _mq # noqa: PLC0415
2500
+
2501
+ fresh = _mq.load_queue()
2502
+ by_id = {e.assignment_id: e for e in touched}
2503
+ merged = [by_id.get(item.assignment_id, item) for item in fresh]
2504
+ _mq.save_queue(merged)
2505
+ except Exception: # noqa: BLE001 — best-effort persistence; next tick recomputes
2506
+ pass
2507
+
2508
+
2353
2509
  def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
2354
2510
  """Run one entry's ``--resume-when`` probe with a hard timeout.
2355
2511
 
@@ -2730,6 +2886,15 @@ def drive_queue_tick(
2730
2886
  if not reconcile_only:
2731
2887
  _run_merge_only_candidates(plan, config_path)
2732
2888
 
2889
+ # #2535: independent of the drive-queue plan above (this scans the
2890
+ # MERGE queue directly, not drive-queue rows) — a bounded, best-effort
2891
+ # CI re-run for any entry blocked solely on stale-but-green checks
2892
+ # with an already-approved review. Same `not reconcile_only` posture
2893
+ # as the merge-only fast path just above: a `gh run rerun` is a real
2894
+ # external action that mode promises not to take.
2895
+ if not reconcile_only:
2896
+ _run_auto_revalidate_checks_stale(config_path)
2897
+
2733
2898
  # #2235 Phase 0: record every entry this tick moved INTO or OUT OF
2734
2899
  # `blocked`/`parked`, with the reason the queue stated and — for a
2735
2900
  # release — what the release itself reveals about the true cause.
@@ -11,6 +11,7 @@ from typing import TYPE_CHECKING
11
11
  import httpx
12
12
 
13
13
  if TYPE_CHECKING:
14
+ from coord.merge_queue import QueuedMerge
14
15
  from coord.models import Assignment, Board
15
16
  from coord.progress import SmokeVerdict
16
17
 
@@ -991,6 +992,14 @@ class StalledDispatchAction:
991
992
  (#602).
992
993
  - ``"skipped_human_required"`` — the conflict-fix retry cap was already
993
994
  hit; surfacing to a human, not auto-retrying.
995
+ - ``"skipped_sealed_conflict"`` (#2537) — ``merge_conflict_unresolved``
996
+ on a :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row whose conflict
997
+ was confirmed (:func:`_conflict_confined_to_sealed_paths`) to be
998
+ confined to the repo's sealed acceptance-oracle paths — a
999
+ conflict-fix worker is guaranteed to self-restrict and push nothing
1000
+ there, so the dispatch was skipped rather than spending a worker
1001
+ session on a known no-op; needs a sealed-path-aware rebase dispatcher
1002
+ (a follow-up issue, not yet implemented).
994
1003
  - ``"disabled"`` — ``pipeline.auto_dispatch_stalled`` is
995
1004
  off; detection/narration still happened, dispatch did not.
996
1005
  """
@@ -1044,6 +1053,50 @@ def _stalled_row_has_live_session(board: "Board", work: "Assignment") -> bool:
1044
1053
  return False
1045
1054
 
1046
1055
 
1056
+ def _conflict_confined_to_sealed_paths(
1057
+ entry: "QueuedMerge", config: Config,
1058
+ ) -> list[str] | None:
1059
+ """#2537: best-effort check for whether *entry*'s merge conflict can
1060
+ ONLY be within the repo's sealed acceptance-oracle paths
1061
+ (:meth:`coord.config.AcceptanceConfig.sealed_paths`).
1062
+
1063
+ Returns the entry branch's changed-file list when every file it touches
1064
+ (the three-dot compare of *entry.target_branch*...*entry.branch*, via
1065
+ :func:`coord.github_ops.get_compare_files` — the SAME GitHub-API-only,
1066
+ no-local-checkout seam #1720's dispatch-time overlap fence already uses)
1067
+ falls under a sealed path. GitHub's conflicting-file set is necessarily
1068
+ a SUBSET of this branch's own changed files — a file can only conflict
1069
+ if *this* branch touches it too — so confining the WHOLE branch diff to
1070
+ sealed paths is sufficient to guarantee the conflict is, without needing
1071
+ a local checkout or a `git merge-tree` call.
1072
+
1073
+ Returns ``None`` — "can't confirm confinement, don't skip the ordinary
1074
+ dispatch" — when: the repo has no acceptance driver configured (nothing
1075
+ is sealed); the compare API call fails or reports no files; or anything
1076
+ is touched outside every sealed path. This is a pure availability
1077
+ signal, never a hard "not confined" claim — a caller that gets ``None``
1078
+ falls back to :func:`coord.conflict_fix.dispatch_conflict_fix` exactly
1079
+ as before, which is always safe: a genuinely sealed-confined conflict
1080
+ just makes that dispatch a no-op (the conflict-fix worker self-restricts
1081
+ per CLAUDE.md's own sealed-path rule), so the only cost of a missed
1082
+ detection here is one wasted worker session, never an incorrect action.
1083
+ """
1084
+ sealed = config.acceptance.sealed_paths(entry.repo_name)
1085
+ if not sealed:
1086
+ return None
1087
+ from coord import github_ops # noqa: PLC0415
1088
+ from coord.review import _path_is_sealed # noqa: PLC0415
1089
+
1090
+ files = github_ops.get_compare_files(
1091
+ entry.repo_github, entry.target_branch, entry.branch,
1092
+ )
1093
+ if not files:
1094
+ return None
1095
+ if all(any(_path_is_sealed(f, s) for s in sealed) for f in files):
1096
+ return files
1097
+ return None
1098
+
1099
+
1047
1100
  def dispatch_stalled_pipeline_action(
1048
1101
  detection: StalledDetection,
1049
1102
  work: "Assignment",
@@ -1058,11 +1111,12 @@ def dispatch_stalled_pipeline_action(
1058
1111
  Gated by ``config.pipeline.auto_dispatch_stalled`` (default ``False`` —
1059
1112
  detection/narration via :func:`post_stalled_pipeline` is unconditional;
1060
1113
  this is the opt-in action half) — EXCEPT for a ``review_request_changes_
1061
- no_fix`` stall on a :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row
1062
- (``test-author``/``mock-author``), which dispatches regardless of the
1063
- flag: no loop owns that row (#2302), so the flag would only leave it
1064
- stalled forever with no alternative dispatcher to race. ``work`` rows
1065
- under the same reason keep the opt-in gate ``coord drive`` owns those.
1114
+ no_fix`` OR (#2537) ``merge_conflict_unresolved`` stall on a
1115
+ :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row (``test-author``/
1116
+ ``mock-author``), which dispatches regardless of the flag: no loop owns
1117
+ that row (#2302), so the flag would only leave it stalled forever with
1118
+ no alternative dispatcher to race. ``work`` rows under the same reasons
1119
+ keep the opt-in gate — ``coord drive`` owns those.
1066
1120
  Mutates *board* in place exactly like
1067
1121
  the auto-loop / review-dispatch helpers it delegates to — the caller is
1068
1122
  responsible for persisting it.
@@ -1091,7 +1145,15 @@ def dispatch_stalled_pipeline_action(
1091
1145
  the same bulk gate-checked enqueue the daemon passive tick already
1092
1146
  runs on every interval.
1093
1147
  - ``merge_conflict_unresolved`` → :func:`coord.conflict_fix.dispatch_conflict_fix`,
1094
- the #1474 ``_dispatch_conflict_fixes`` path.
1148
+ the #1474 ``_dispatch_conflict_fixes`` path — UNLESS (#2537) *work* is a
1149
+ :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row AND the conflict can
1150
+ be confirmed (via :func:`_conflict_confined_to_sealed_paths`, a
1151
+ compare-API-only check) to be confined to the repo's sealed
1152
+ acceptance-oracle paths — a conflict-fix worker is REQUIRED by
1153
+ CLAUDE.md's own sealed-path rule to self-restrict from editing those,
1154
+ so it is guaranteed to push nothing; that case returns
1155
+ ``"skipped_sealed_conflict"`` instead of spending a worker session on
1156
+ a known no-op.
1095
1157
  - ``review_failed_no_verdict`` (#1584) → :func:`coord.review.dispatch_review`
1096
1158
  again, the SAME call as ``done_no_review`` — the failed review left no
1097
1159
  verdict behind, so recovery is identical to "no review was ever
@@ -1116,10 +1178,20 @@ def dispatch_stalled_pipeline_action(
1116
1178
  # no drive run over it at all (see #2289). So this one reason+type
1117
1179
  # combination bypasses the flag — every other reason, and `work` rows
1118
1180
  # under this same reason, keep the opt-in gate unchanged.
1181
+ #
1182
+ # #2537: a `merge_conflict_unresolved` stall on the SAME row types is the
1183
+ # identical shape — `coord drive` has no conflict-fix arm for
1184
+ # test-author/mock-author rows either (it `_die()`s on them before ever
1185
+ # reaching a merge), and the passive tick only re-enqueues, never
1186
+ # dispatches a conflict-fix. Without this, the row bounces
1187
+ # PENDING → CONFLICT → parked forever with nobody attempting a fix
1188
+ # (observed live: coord-portal#132). So this reason joins the bypass for
1189
+ # these row types too — every other reason, and `work` rows under either
1190
+ # reason, keep the opt-in gate unchanged.
1119
1191
  from coord.models import SEALED_PATH_AUTHOR_TYPES # noqa: PLC0415
1120
1192
 
1121
1193
  sealed_author_stall = (
1122
- detection.reason == "review_request_changes_no_fix"
1194
+ detection.reason in ("review_request_changes_no_fix", "merge_conflict_unresolved")
1123
1195
  and work.type in SEALED_PATH_AUTHOR_TYPES
1124
1196
  )
1125
1197
  if not config.pipeline.auto_dispatch_stalled and not sealed_author_stall:
@@ -1423,6 +1495,35 @@ def dispatch_stalled_pipeline_action(
1423
1495
  kind="skipped_human_required",
1424
1496
  detail="conflict-fix already active or its retry cap was already hit",
1425
1497
  )
1498
+ # #2537: dispatch_conflict_fix is guaranteed to no-op on a conflict
1499
+ # confined to the repo's sealed acceptance-oracle paths — the
1500
+ # conflict-fix worker is REQUIRED by CLAUDE.md's own sealed-path
1501
+ # rule to self-restrict from editing them (the additive carve-out
1502
+ # applies only to test-author/mock-author dispatches, never
1503
+ # conflict-fix), so it pushes nothing and the entry just re-stalls
1504
+ # next tick. Confirmed live on coord-portal#132/#135: a manually
1505
+ # forced dispatch_conflict_fix restored its worktree clean and
1506
+ # pushed nothing. Skip the known-wasted dispatch when we can
1507
+ # confirm confinement in advance; resolving it for real needs a
1508
+ # sealed-path-aware re-dispatch (tracked as a follow-up issue, not
1509
+ # yet implemented) — dispatch_conflict_fix stays the fallback for
1510
+ # every other case (can't confirm confinement, or genuinely not
1511
+ # confined).
1512
+ if work.type in SEALED_PATH_AUTHOR_TYPES:
1513
+ sealed_files = _conflict_confined_to_sealed_paths(entry, config)
1514
+ if sealed_files is not None:
1515
+ return StalledDispatchAction(
1516
+ kind="skipped_sealed_conflict",
1517
+ detail=(
1518
+ "conflict is confined to sealed acceptance paths ("
1519
+ + ", ".join(sealed_files)
1520
+ + ") — a conflict-fix worker is required to "
1521
+ "self-restrict from editing them (CLAUDE.md's "
1522
+ "sealed-path rule) and would push nothing; needs a "
1523
+ "sealed-path-aware rebase dispatcher (follow-up "
1524
+ "issue), not dispatch_conflict_fix"
1525
+ ),
1526
+ )
1426
1527
  fix = dispatch_conflict_fix(entry, board, config, prefer_machine=work.machine_name)
1427
1528
  if fix is None:
1428
1529
  return StalledDispatchAction(
@@ -393,8 +393,16 @@ Phase 0 steps 1–2 and Phase 1 step 6 above are also reachable by right-clickin
393
393
  not a live session). The CLI's own claim-detection refuses a duplicate dispatch while one is
394
394
  already in flight. This *is* Phase 0 step 1.
395
395
  - **"View Gate A mock (PR)"** 👁 → opens that worker's PR in the browser so a human can read
396
- `contract.md` + the rendered mock(s). Disabled until a PR exists. **Merging that PR does not
397
- satisfy Gate A** (#2063) — it is only how you *see* what you are signing off on.
396
+ `contract.md` and review/merge the branch. Disabled until a PR exists. **This does not show the
397
+ rendered mock(s)** (#2501) — GitHub's "Files changed" view renders `.html` as a source diff,
398
+ never a live page; use "View Gate A mock (local)" below for that. **Merging that PR does not
399
+ satisfy Gate A** (#2063) — it is only how you review/merge what you are signing off on.
400
+ - **"View Gate A mock (local)"** 👁 → the actual mock viewer (#2501). Fast-forward-pulls the local
401
+ checkout's default branch (never forcing, never touching a dirty or diverged tree — aborts with
402
+ a toast instead, same as everywhere else this repo touches git destructively) and then opens
403
+ `tests/acceptance/ms-NN/mocks/` from disk in the OS's default browser, where `.html` actually
404
+ renders. Disabled until that mocks directory exists locally. Opens `mocks/index.html` once #2512
405
+ ships it; falls back to opening the mocks directory itself until then.
398
406
  - **"Approve Gate A"** ✓ → `coord gate-a --approved <repo> <tracking_issue>` — records the verdict
399
407
  that actually satisfies Gate A. Sits directly beside the 👁 on purpose: reviewing and recording
400
408
  are one gesture.
@@ -2166,6 +2166,149 @@ def test_a_parked_merge_only_race_falls_back_to_an_ordinary_relaunch(
2166
2166
  assert len(merge_only_runs.merge) == 1, merge_only_runs.merge
2167
2167
 
2168
2168
 
2169
+ # ── #2535: auto-fire a CI re-run for a merge-queue entry blocked SOLELY on
2170
+ # stale-but-green checks with an already-approved review — no drive-queue row
2171
+ # needed at all, since this scans the merge queue directly. Fixtures below are
2172
+ # deliberately self-contained (not `live_ci_backend`, which fixes the base
2173
+ # timestamp to always read FRESH — the opposite of what a staleness scenario
2174
+ # needs, and whose fake CI stand-in has no `rerun_for_pr` to assert calls on).
2175
+
2176
+
2177
+ def _seed_pending_merge_row(
2178
+ coord_db, issue: int, *, pr_number: int, ci_stale_reruns: int = 0
2179
+ ) -> None:
2180
+ """A bare `merge_queue` row — no drive-queue counterpart — PENDING, with
2181
+ a PR number (required for `ci_revalidation_candidates` to consider it at
2182
+ all) and an optional pre-spent `ci_stale_reruns` budget."""
2183
+ coord_db.execute(
2184
+ "INSERT INTO merge_queue "
2185
+ "(assignment_id, repo_name, repo_github, branch, target_branch, "
2186
+ " issue_number, issue_title, state, pr_number, enqueued_at, "
2187
+ " ci_stale_reruns) "
2188
+ "VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)",
2189
+ (
2190
+ f"w{issue}", REPO, "john/claude-coordinator", f"work-{issue}", "main",
2191
+ issue, f"issue {issue}", pr_number, time.time(), ci_stale_reruns,
2192
+ ),
2193
+ )
2194
+ coord_db.commit()
2195
+
2196
+
2197
+ class _FakeStaleCi:
2198
+ """Stands in for the live backend, like `live_ci_backend`'s `_FakeLiveCi`
2199
+ — but with a `rerun_for_pr` that records its calls (#2182's fake has
2200
+ none, since nothing before #2535 ever needed the tick to trigger one)."""
2201
+
2202
+ is_available = True
2203
+
2204
+ def __init__(self, rerun_calls: list) -> None:
2205
+ self._rerun_calls = rerun_calls
2206
+
2207
+ def list_checks_for_pr(self, repo: str, number: int) -> list:
2208
+ from coord.ci_store import CheckRun
2209
+
2210
+ return [CheckRun(
2211
+ name="build", status="completed", conclusion="success",
2212
+ url="", run_id="1", started_at=100.0, completed_at=160.0,
2213
+ )]
2214
+
2215
+ def expects_checks(self, repo: str, number: int) -> bool:
2216
+ return True
2217
+
2218
+ def rerun_for_pr(self, repo: str, number: int) -> bool:
2219
+ self._rerun_calls.append((repo, number))
2220
+ return True
2221
+
2222
+
2223
+ @pytest.fixture
2224
+ def stale_ci_backend(monkeypatch):
2225
+ """Fakes the #1851 staleness shape directly: a green check that
2226
+ `started_at` well BEFORE the base's own commit timestamp — the base
2227
+ moved out from under an already-green PR. Returns the list of
2228
+ `(repo, pr_number)` pairs `rerun_for_pr` was called with.
2229
+ """
2230
+ import coord.ci_store as ci_store_module
2231
+ import coord.github_ops as github_ops
2232
+
2233
+ rerun_calls: list[tuple[str, int]] = []
2234
+ monkeypatch.setattr(
2235
+ ci_store_module, "build_ci_store", lambda t, **_kw: _FakeStaleCi(rerun_calls)
2236
+ )
2237
+ # The check above started at 100.0; the base's own commit landed at
2238
+ # 1000.0 — well AFTER, so `_ci_checks_are_stale` reads True.
2239
+ monkeypatch.setattr(
2240
+ github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1000.0
2241
+ )
2242
+ monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
2243
+ monkeypatch.setattr(github_ops, "check_pr_mergeable", lambda repo, n: None)
2244
+ return rerun_calls
2245
+
2246
+
2247
+ def test_auto_revalidate_fires_a_ci_rerun_for_an_entry_blocked_solely_on_stale_checks(
2248
+ cli_no_gates, coord_db, stale_ci_backend,
2249
+ ):
2250
+ """The #2530/#2534 shape, unattended: a PENDING entry with a PR, review
2251
+ already satisfied (`cli_no_gates` disables the review requirement —
2252
+ the same minimal "sole blocker is CI" shape
2253
+ `TestCiRevalidationCandidates` uses in tests/test_merge_queue.py), and
2254
+ CI checks that are green but predate the current base. The tick fires
2255
+ the re-run itself — no drive-queue row, no operator running
2256
+ `coord merge --revalidate` by hand.
2257
+ """
2258
+ _seed_pending_merge_row(coord_db, 2534, pr_number=42)
2259
+
2260
+ result = cli_no_gates("tick")
2261
+ assert result.exit_code == 0, result.output
2262
+
2263
+ assert stale_ci_backend == [("john/claude-coordinator", 42)]
2264
+ row = coord_db.execute(
2265
+ "SELECT ci_stale_reruns, error FROM merge_queue WHERE issue_number = ?",
2266
+ (2534,),
2267
+ ).fetchone()
2268
+ assert row["ci_stale_reruns"] == 1
2269
+ assert row["error"].startswith("CI running:")
2270
+ assert "#2535" in row["error"]
2271
+
2272
+ from coord.audit import query_audit_log
2273
+
2274
+ entries = query_audit_log(event_type="merge_checks_stale_auto_revalidate")["entries"]
2275
+ assert len(entries) == 1
2276
+ assert entries[0]["issue"] == 2534
2277
+ assert entries[0]["repo"] == REPO
2278
+
2279
+
2280
+ def test_auto_revalidate_never_exceeds_the_shared_budget(
2281
+ cli_no_gates, coord_db, stale_ci_backend,
2282
+ ):
2283
+ """Budget already spent (whether by a prior tick or a prior live
2284
+ `coord merge` attempt makes no difference — it's the same counter): no
2285
+ NEW rerun fires, but the exhaustion is still recorded so a human
2286
+ watching the audit trail sees it."""
2287
+ from coord.merge_queue import MAX_CI_STALE_RERUNS
2288
+
2289
+ _seed_pending_merge_row(
2290
+ coord_db, 2534, pr_number=42, ci_stale_reruns=MAX_CI_STALE_RERUNS
2291
+ )
2292
+
2293
+ result = cli_no_gates("tick")
2294
+ assert result.exit_code == 0, result.output
2295
+
2296
+ assert stale_ci_backend == [] # no new rerun triggered
2297
+ row = coord_db.execute(
2298
+ "SELECT ci_stale_reruns FROM merge_queue WHERE issue_number = ?",
2299
+ (2534,),
2300
+ ).fetchone()
2301
+ assert row["ci_stale_reruns"] == MAX_CI_STALE_RERUNS # unchanged
2302
+
2303
+ from coord.audit import query_audit_log
2304
+
2305
+ entries = query_audit_log(
2306
+ event_type="merge_checks_stale_auto_revalidate_exhausted"
2307
+ )["entries"]
2308
+ assert len(entries) == 1
2309
+ assert entries[0]["issue"] == 2534
2310
+
2311
+
2169
2312
  def test_a_repeatedly_dead_drive_still_reaches_blocked_and_escalates(
2170
2313
  cli, seed, launches, coord_db
2171
2314
  ):