code-coordinator 0.5.237__tar.gz → 0.5.239__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 (817) hide show
  1. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/drive_queue.py +73 -0
  7. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/release.py +78 -15
  8. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/status.py +47 -0
  9. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/confirm_test.py +57 -3
  10. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/db.py +102 -10
  11. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/drive.py +174 -63
  12. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/drive_queue.py +33 -6
  13. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/predicate.py +41 -4
  14. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/release_propagate.py +64 -0
  15. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/NOTIFIER.md +31 -1
  16. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_drive_queue.py +2 -0
  17. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_release_window.py +36 -2
  18. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_confirm_test.py +60 -1
  19. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_db.py +123 -1
  20. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_drive.py +161 -55
  21. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_drive_queue.py +78 -0
  22. code_coordinator-0.5.239/tests/test_drive_queue_roll_pending.py +261 -0
  23. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_cli.py +8 -2
  24. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_isolation.py +6 -1
  25. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_predicate.py +96 -13
  26. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_service.py +67 -12
  27. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notify.py +35 -0
  28. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_propagate.py +67 -0
  29. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.claude/commands/board.md +0 -0
  30. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.claude/commands/complete-session.md +0 -0
  31. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.claude/commands/coordinator.md +0 -0
  32. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.githooks/_lib.sh +0 -0
  33. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.githooks/post-checkout +0 -0
  34. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.githooks/post-commit +0 -0
  35. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.githooks/post-merge +0 -0
  36. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  37. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/coord-ci-acceptance.yml +0 -0
  38. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/workflows/auto-release.yml +0 -0
  39. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/workflows/cargo-test.yml +0 -0
  40. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/workflows/publish.yml +0 -0
  41. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/workflows/release-tui.yml +0 -0
  42. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.github/workflows/test.yml +0 -0
  43. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/.gitignore +0 -0
  44. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/CLAUDE.md +0 -0
  45. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/GOAL.md +0 -0
  46. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/LICENSE +0 -0
  47. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/MANIFEST.in +0 -0
  48. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/README.md +0 -0
  49. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/dependency_links.txt +0 -0
  50. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/entry_points.txt +0 -0
  51. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/requires.txt +0 -0
  52. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/code_coordinator.egg-info/top_level.txt +0 -0
  53. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/__init__.py +0 -0
  54. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/_board_mapping.py +0 -0
  55. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/acceptance.py +0 -0
  56. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/acceptance_drivers.py +0 -0
  57. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agent.py +0 -0
  58. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agent_app.py +0 -0
  59. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agent_update.py +0 -0
  60. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agents/opencode/.gitignore +0 -0
  61. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agents/opencode/agents/work.md +0 -0
  62. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/agents/opencode/routing.jsonc +0 -0
  63. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/approved_work.py +0 -0
  64. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/audit.py +0 -0
  65. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/auto_loop.py +0 -0
  66. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/block_log.py +0 -0
  67. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/board_bool_guard.py +0 -0
  68. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/board_service.py +0 -0
  69. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/board_wire.py +0 -0
  70. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/brain.py +0 -0
  71. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/branch_model.py +0 -0
  72. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/bug_intake.py +0 -0
  73. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/cargo_cache.py +0 -0
  74. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/ci_fix.py +0 -0
  75. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/ci_github.py +0 -0
  76. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/ci_gitlab.py +0 -0
  77. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/ci_store.py +0 -0
  78. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/claim.py +0 -0
  79. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/cli.py +0 -0
  80. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/client.py +0 -0
  81. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/__init__.py +0 -0
  82. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/_common.py +0 -0
  83. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/acceptance.py +0 -0
  84. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/agent_ops.py +0 -0
  85. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/audit.py +0 -0
  86. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/chat.py +0 -0
  87. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/dispatch.py +0 -0
  88. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/dispatch_workers.py +0 -0
  89. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/drive.py +0 -0
  90. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/gate_a.py +0 -0
  91. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/gates.py +0 -0
  92. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/issues.py +0 -0
  93. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/lifecycle.py +0 -0
  94. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/merge.py +0 -0
  95. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/milestone.py +0 -0
  96. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/plan_followup.py +0 -0
  97. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/plans.py +0 -0
  98. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/portal.py +0 -0
  99. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/repo.py +0 -0
  100. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/report.py +0 -0
  101. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/review.py +0 -0
  102. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/scorecard.py +0 -0
  103. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/sessions.py +0 -0
  104. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/setup.py +0 -0
  105. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/test_gate.py +0 -0
  107. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/commands/tui.py +0 -0
  108. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/comments.py +0 -0
  109. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/config.py +0 -0
  110. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/config_reload.py +0 -0
  111. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/conflict_fix.py +0 -0
  112. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dao.py +0 -0
  113. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dashboard/__init__.py +0 -0
  114. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dashboard/fixture.py +0 -0
  115. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dashboard/index.html +0 -0
  116. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dashboard/server.py +0 -0
  117. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dashboard/terminal.py +0 -0
  118. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dead_end.py +0 -0
  119. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/decomposition_chat.py +0 -0
  120. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/README.md +0 -0
  121. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-agent.service +0 -0
  122. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-notify.service +0 -0
  128. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-notify.timer +0 -0
  129. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-release-propagate.service +0 -0
  130. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-release-propagate.timer +0 -0
  131. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-release-window.service +0 -0
  132. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-release-window.timer +0 -0
  133. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-serve.service +0 -0
  134. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-web-dist-build.service +0 -0
  135. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-web-dist-build.timer +0 -0
  136. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy/coord-web.service +0 -0
  137. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy_manifest.py +0 -0
  138. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deploy_units.py +0 -0
  139. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/deps.py +0 -0
  140. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/diagnose.py +0 -0
  141. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dispatch.py +0 -0
  142. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/dist_name.py +0 -0
  143. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/drive_state.py +0 -0
  144. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/events.py +0 -0
  145. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/failure_class.py +0 -0
  146. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/filelock.py +0 -0
  147. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/fleet_config_health.py +0 -0
  148. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/forge_availability.py +0 -0
  149. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/freshness.py +0 -0
  150. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/gate_a.py +0 -0
  151. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/gate_b.py +0 -0
  152. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/gate_snapshot.py +0 -0
  153. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/gates.py +0 -0
  154. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/github_ops.py +0 -0
  155. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/goal.py +0 -0
  156. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/graph_health.py +0 -0
  157. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/__init__.py +0 -0
  158. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/aggregate.py +0 -0
  159. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/__init__.py +0 -0
  160. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/agent_install.py +0 -0
  161. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/cargo_targets.py +0 -0
  162. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/claude_binary.py +0 -0
  163. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/plan_usage.py +0 -0
  174. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/machine_pause.py +0 -0
  195. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/merge_queue.py +0 -0
  196. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/milestone_chat.py +0 -0
  197. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/milestone_dispatch.py +0 -0
  198. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/milestone_gate.py +0 -0
  199. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/milestone_order.py +0 -0
  200. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/mock_author.py +0 -0
  201. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/models.py +0 -0
  202. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/network.py +0 -0
  203. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/new_issue_chat.py +0 -0
  204. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/__init__.py +0 -0
  205. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/baseline.py +0 -0
  206. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/cli.py +0 -0
  207. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/collect.py +0 -0
  208. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/digest.py +0 -0
  209. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/models.py +0 -0
  210. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/notify.py +0 -0
  214. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/openapi.py +0 -0
  215. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/overlap_fence.py +0 -0
  216. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/overlap_predict.py +0 -0
  217. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/parentage.py +0 -0
  218. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/parentage_github.py +0 -0
  219. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/pipeline.py +0 -0
  220. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/plan_parser.py +0 -0
  221. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/plans.py +0 -0
  222. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/platform_paths.py +0 -0
  223. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/portal_bridge.py +0 -0
  224. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/portal_store.py +0 -0
  225. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/portal_sync.py +0 -0
  226. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/pr_body_lint.py +0 -0
  227. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/prereqs.py +0 -0
  228. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/progress.py +0 -0
  229. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/providers/__init__.py +0 -0
  230. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/providers/base.py +0 -0
  231. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/providers/claude.py +0 -0
  232. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/providers/claude_pty.py +0 -0
  233. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/providers/opencode.py +0 -0
  234. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/queue_diagnose.py +0 -0
  235. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/reconcile.py +0 -0
  236. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/reconcile_tick.py +0 -0
  237. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/refine_chat.py +0 -0
  238. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/release_cordon.py +0 -0
  239. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/release_verify.py +0 -0
  240. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/release_window.py +0 -0
  241. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/repo_edit.py +0 -0
  242. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/repo_onboard.py +0 -0
  243. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/reports.py +0 -0
  244. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/revalidate.py +0 -0
  245. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/review.py +0 -0
  246. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/scorecard.py +0 -0
  247. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/self_health.py +0 -0
  248. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/serve_app.py +0 -0
  249. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  250. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  251. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  252. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  254. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/portal-followup/SKILL.md +0 -0
  255. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  256. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  257. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/skills/update-issue/SKILL.md +0 -0
  258. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/smoke.py +0 -0
  259. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/spend_ceiling.py +0 -0
  260. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/split_work.py +0 -0
  261. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/stage_projection.py +0 -0
  262. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/state.py +0 -0
  263. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/test_author.py +0 -0
  264. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/test_chat.py +0 -0
  265. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/test_orchestrator.py +0 -0
  266. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/test_report.py +0 -0
  267. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/tui_release.py +0 -0
  268. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/usage.py +0 -0
  269. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/usage_limits.py +0 -0
  270. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/usage_rollup.py +0 -0
  271. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coord/worker_events.py +0 -0
  272. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/coordinator.example.yml +0 -0
  273. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-agent.service +0 -0
  274. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-db-backup.service +0 -0
  275. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-db-backup.sh +0 -0
  276. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-db-backup.timer +0 -0
  277. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-drive-queue.service +0 -0
  278. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-drive-queue.timer +0 -0
  279. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-notify.service +0 -0
  280. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-notify.timer +0 -0
  281. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-release-propagate.service +0 -0
  282. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-release-propagate.timer +0 -0
  283. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-release-window.service +0 -0
  284. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-release-window.timer +0 -0
  285. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-serve.service +0 -0
  286. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.service +0 -0
  287. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.sh +0 -0
  288. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.timer +0 -0
  289. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-web-rollback.sh +0 -0
  290. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/coord-web.service +0 -0
  291. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/deploy/node-shim.sh +0 -0
  292. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  293. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_CI.md +0 -0
  294. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_DIST.md +0 -0
  295. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/AGENT_OPERATIONS.md +0 -0
  296. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ARCHITECTURE.md +0 -0
  297. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ARCH_SECURITY_GATES.md +0 -0
  298. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/COCKPIT.md +0 -0
  299. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/CONTROL_CENTER.md +0 -0
  300. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/COST_DISCIPLINE.md +0 -0
  301. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/CROSS_PLATFORM.md +0 -0
  302. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/CUSTOMER_PORTAL.md +0 -0
  303. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/DRIVE_QUEUE.md +0 -0
  304. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/EPHEMERAL_WORKERS.md +0 -0
  305. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/FORGE_MIGRATION.md +0 -0
  306. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/GRAPHIFY_SETUP.md +0 -0
  307. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ISSUE_GUIDANCE.md +0 -0
  308. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/MAC_MINI.md +0 -0
  309. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  310. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/OPENCODE_VERIFICATION.md +0 -0
  311. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/OPERATING_GOTCHAS.md +0 -0
  312. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/ORACLE_LOOP.md +0 -0
  313. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/PHONE_WEBAPP.md +0 -0
  314. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/PIPELINE_V2.md +0 -0
  315. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/PLATFORM_EVOLUTION.md +0 -0
  316. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/SECOND_BACKEND.md +0 -0
  317. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/STORE_SERVICE.md +0 -0
  318. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  319. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/WEB_CONTROL_CENTER.md +0 -0
  320. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/WSL_WINDOWS_WORKER.md +0 -0
  321. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/mocks/web/README.md +0 -0
  322. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/mocks/web/_tokens.css +0 -0
  323. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/mocks/web/issue-detail.html +0 -0
  324. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/mocks/web/pipeline-narrow.html +0 -0
  325. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/docs/mocks/web/pipeline-wide.html +0 -0
  326. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/graphify-out/.gitignore +0 -0
  327. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/install-agent.sh +0 -0
  328. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/pyproject.toml +0 -0
  329. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/audit_review_verdict_overrides.py +0 -0
  330. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  331. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/build-worker-image.sh +0 -0
  332. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/coordinator-machine.py +0 -0
  333. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/epic-down.sh +0 -0
  334. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/epic-up.sh +0 -0
  335. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/preflight.sh +0 -0
  336. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/provision-worker.sh +0 -0
  337. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  338. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  339. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/azure-workers/verify-github-token.sh +0 -0
  340. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/check_gh_argv_containment.py +0 -0
  341. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/codegen.py +0 -0
  342. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/coord-test-runner.sh +0 -0
  343. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/drive-batch.sh +0 -0
  344. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/gen_board_fixture.py +0 -0
  345. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/gen_mock_index.py +0 -0
  346. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/next_release_tag.py +0 -0
  347. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/run_tests_in_populated_home.sh +0 -0
  348. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/run_tests_without_gh.sh +0 -0
  349. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/smoke_437_interactive.py +0 -0
  350. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/verify_878_review_capture.py +0 -0
  351. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/verify_release_published.py +0 -0
  352. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/scripts/verify_release_wheel.py +0 -0
  353. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/setup.cfg +0 -0
  354. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/SMOKE_SET.md +0 -0
  355. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/__init__.py +0 -0
  356. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  357. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/contract.md +0 -0
  358. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/manifest.yml +0 -0
  359. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  360. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  361. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  362. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  363. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-37/conftest.py +0 -0
  364. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-37/contract.md +0 -0
  365. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-37/manifest.yml +0 -0
  366. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  367. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  368. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/contract.md +0 -0
  369. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/manifest.yml +0 -0
  370. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  371. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  372. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  373. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  374. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  375. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  376. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  377. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  378. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  379. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  380. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/contract.md +0 -0
  381. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  382. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  383. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/manifest.yml +0 -0
  384. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  385. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-51/tsconfig.json +0 -0
  386. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  387. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  388. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  389. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/contract.md +0 -0
  390. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  391. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/manifest.yml +0 -0
  392. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  393. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  394. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  395. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  396. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  397. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  398. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  399. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  400. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  401. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  402. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  403. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  404. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/contract.md +0 -0
  405. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  406. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/manifest.yml +0 -0
  407. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  408. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  409. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  410. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  411. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  412. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  413. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  414. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/conftest.py +0 -0
  415. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/board-pipeline-basic.json +0 -0
  416. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  417. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  418. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  419. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  420. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/all_pass.json +0 -0
  421. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  422. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/mixed_fail.json +0 -0
  423. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  424. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  425. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/skip.json +0 -0
  426. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/playwright/truncated.json +0 -0
  427. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  428. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  429. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  430. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  431. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  432. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  433. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  434. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  435. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_acceptance.py +0 -0
  436. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_acceptance_drivers.py +0 -0
  437. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent.py +0 -0
  438. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_api_error.py +0 -0
  439. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_app.py +0 -0
  440. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_branch_base.py +0 -0
  441. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_branch_capture.py +0 -0
  442. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_config_free_1712.py +0 -0
  443. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_deploy_units_endpoint.py +0 -0
  444. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_dirty_worktree.py +0 -0
  445. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  446. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_graph_self_heal.py +0 -0
  447. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_health_h3.py +0 -0
  448. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_idle_restart.py +0 -0
  449. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_push_failure.py +0 -0
  450. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_reap.py +0 -0
  451. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_repos_and_pull.py +0 -0
  452. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_restart_services_endpoint.py +0 -0
  453. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_skills_self_heal.py +0 -0
  454. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_startup_diagnostics.py +0 -0
  455. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_update.py +0 -0
  456. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_update_bluegreen.py +0 -0
  457. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_usage_limit.py +0 -0
  458. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_agent_zero_commit.py +0 -0
  459. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ambient_home_isolation.py +0 -0
  460. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_approve_reject_plan.py +0 -0
  461. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_approve_usage_gate.py +0 -0
  462. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_approved_work_2532.py +0 -0
  463. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_assignment_already_recorded_daemon.py +0 -0
  464. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_audit_log.py +0 -0
  465. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_audit_outcome.py +0 -0
  466. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_audit_query.py +0 -0
  467. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_auto_loop.py +0 -0
  468. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_auto_release_publish_2035.py +0 -0
  469. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_base_checkout_restore.py +0 -0
  470. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_block_log.py +0 -0
  471. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_cap_762.py +0 -0
  472. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_fixture.py +0 -0
  473. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_read_path.py +0 -0
  474. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_service.py +0 -0
  475. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_state.py +0 -0
  476. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_board_wire.py +0 -0
  477. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_brain.py +0 -0
  478. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_branch_model.py +0 -0
  479. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_bug_intake.py +0 -0
  480. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_build_worker_image_env_update.py +0 -0
  481. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cargo_cache.py +0 -0
  482. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_check_gh_argv_containment.py +0 -0
  483. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ci_acceptance_gate_1950.py +0 -0
  484. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ci_fix.py +0 -0
  485. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ci_gitlab.py +0 -0
  486. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ci_parity_2091.py +0 -0
  487. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_ci_store.py +0 -0
  488. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_claim.py +0 -0
  489. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_acceptance.py +0 -0
  490. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_assign.py +0 -0
  491. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  492. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_assign_interactive_remote.py +0 -0
  493. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_assign_provider.py +0 -0
  494. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  495. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_audit.py +0 -0
  496. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_chat_continue.py +0 -0
  497. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_decide.py +0 -0
  498. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_diagnose_config_provenance.py +0 -0
  499. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_diagnose_forge_availability.py +0 -0
  500. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_diagnose_graph.py +0 -0
  501. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_diagnose_self.py +0 -0
  502. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_doctor.py +0 -0
  503. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_doctor_config_free_1801.py +0 -0
  504. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  505. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_drive.py +0 -0
  506. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_escalate.py +0 -0
  507. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_fix_headless_review.py +0 -0
  508. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_gate_a.py +0 -0
  509. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_install_drift.py +0 -0
  510. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_install_skills.py +0 -0
  511. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_issue_create_label.py +0 -0
  512. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_issue_reopen.py +0 -0
  513. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_merge.py +0 -0
  514. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_assign.py +0 -0
  515. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_capture.py +0 -0
  516. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_chat_add_child.py +0 -0
  517. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_dispatch.py +0 -0
  518. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_gate_b.py +0 -0
  519. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_gate_c.py +0 -0
  520. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_order.py +0 -0
  521. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  522. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_milestone_ship.py +0 -0
  523. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_network.py +0 -0
  524. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_new_issue_chat.py +0 -0
  525. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_plans.py +0 -0
  526. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_portal.py +0 -0
  527. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_pull_artifact.py +0 -0
  528. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_queue.py +0 -0
  529. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_reattach_sessions.py +0 -0
  530. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_refine_board.py +0 -0
  531. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_release_preflight.py +0 -0
  532. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_release_propagate.py +0 -0
  533. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_repo_2220.py +0 -0
  534. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_scorecard.py +0 -0
  535. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_set_review_findings.py +0 -0
  536. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_advisory_terminal.py +0 -0
  537. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_merge_queue.py +0 -0
  538. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_provider.py +0 -0
  539. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_review_finalizing.py +0 -0
  540. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_test_failed_tag.py +0 -0
  541. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_status_usage_limit.py +0 -0
  542. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_sync_comments_873.py +0 -0
  543. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_test_plan.py +0 -0
  544. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_track.py +0 -0
  545. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_tui_update.py +0 -0
  546. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cli_wait.py +0 -0
  547. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_client_base_install.py +0 -0
  548. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_comments.py +0 -0
  549. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_completion_summary.py +0 -0
  550. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config.py +0 -0
  551. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config_acceptance.py +0 -0
  552. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config_audit.py +0 -0
  553. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config_pricing.py +0 -0
  554. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  555. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_config_usage_gate.py +0 -0
  556. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_conflict_fix.py +0 -0
  557. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_conflict_fix_semantic.py +0 -0
  558. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_test.py +0 -0
  559. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_test_runner_baseline.py +0 -0
  560. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_test_runner_populated_home.py +0 -0
  561. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_test_runner_routing.py +0 -0
  562. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_test_runner_toolchain.py +0 -0
  563. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coord_web_sse_restart_live.py +0 -0
  564. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_coordinator_machine.py +0 -0
  565. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_cross_platform_imports.py +0 -0
  566. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dashboard.py +0 -0
  567. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dashboard_fixture.py +0 -0
  568. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dashboard_terminal.py +0 -0
  569. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dashboard_terminal_live.py +0 -0
  570. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dead_end.py +0 -0
  571. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_decomposition_chat.py +0 -0
  572. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_coord_db_backup.py +0 -0
  573. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_coord_web_dist.py +0 -0
  574. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_coord_web_rollback.py +0 -0
  575. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_drive_queue_unit.py +0 -0
  576. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_manifest.py +0 -0
  577. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_notify_unit.py +0 -0
  578. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_units_lane.py +0 -0
  579. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deploy_web_unit.py +0 -0
  580. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_deps.py +0 -0
  581. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_diagnose.py +0 -0
  582. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dispatch.py +0 -0
  583. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dispatch_target_validation.py +0 -0
  584. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_dist_name.py +0 -0
  585. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_done_housekeeping.py +0 -0
  586. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_drive_state.py +0 -0
  587. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_drive_tmux.py +0 -0
  588. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_epic_up_capability_detection.py +0 -0
  589. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  590. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_epic_up_image_provenance.py +0 -0
  591. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_errors.py +0 -0
  592. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_events.py +0 -0
  593. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_failure_class.py +0 -0
  594. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_filelock.py +0 -0
  595. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  596. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_fix_of_force_override.py +0 -0
  597. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_fleet_config_health.py +0 -0
  598. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_fleet_health_probes.py +0 -0
  599. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_fleet_health_snapshot.py +0 -0
  600. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_forge_availability.py +0 -0
  601. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_freshness.py +0 -0
  602. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gate_a.py +0 -0
  603. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gate_b.py +0 -0
  604. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gate_snapshot_staleness.py +0 -0
  605. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gates.py +0 -0
  606. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  607. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_gen_mock_index.py +0 -0
  608. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_generated_types_fixture.py +0 -0
  609. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_github_ops.py +0 -0
  610. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_goal.py +0 -0
  611. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_graph_health.py +0 -0
  612. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_graph_selfheal_absent_2237.py +0 -0
  613. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_handoff.py +0 -0
  614. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_checks.py +0 -0
  615. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_cli.py +0 -0
  616. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_cli_graph.py +0 -0
  617. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_config.py +0 -0
  618. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_context.py +0 -0
  619. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_coord_web_ci_pin.py +0 -0
  620. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_deploy_lane_facts.py +0 -0
  621. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_incident_regression.py +0 -0
  622. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_pypi.py +0 -0
  623. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_registry.py +0 -0
  624. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_timer_active.py +0 -0
  625. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_toolchain.py +0 -0
  626. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_unit_drift.py +0 -0
  627. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_health_unit_enablement.py +0 -0
  628. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_hooks.py +0 -0
  629. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_human_attended_437.py +0 -0
  630. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_init.py +0 -0
  631. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_integration.py +0 -0
  632. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_briefing_echo.py +0 -0
  633. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_pane_log_2541.py +0 -0
  634. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_prefill_state.py +0 -0
  635. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_session_relaunch.py +0 -0
  636. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_test_verdict_backstop.py +0 -0
  637. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_token_attribution.py +0 -0
  638. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_interactive_worktree.py +0 -0
  639. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_issue_store_seam.py +0 -0
  640. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_liveness_auditor.py +0 -0
  641. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_liveness_notify.py +0 -0
  642. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_machine_pause.py +0 -0
  643. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_merge_queue.py +0 -0
  644. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_merge_verify.py +0 -0
  645. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_milestone_chat.py +0 -0
  646. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_milestone_dispatch.py +0 -0
  647. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_milestone_gate.py +0 -0
  648. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_milestone_order.py +0 -0
  649. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_milestone_seam.py +0 -0
  650. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_mock_author.py +0 -0
  651. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_model_tiering.py +0 -0
  652. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_models.py +0 -0
  653. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_models_config_labels.py +0 -0
  654. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_needs_attention.py +0 -0
  655. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_network.py +0 -0
  656. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_new_issue_chat.py +0 -0
  657. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_next_release_tag.py +0 -0
  658. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_node_shim.py +0 -0
  659. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_baseline.py +0 -0
  660. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_collect.py +0 -0
  661. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_config.py +0 -0
  662. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_drive_seam.py +0 -0
  663. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notifier_quiet_hours.py +0 -0
  664. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_notify_drain.py +0 -0
  665. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_openapi.py +0 -0
  666. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_operational_defaults.py +0 -0
  667. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_overlap_fence.py +0 -0
  668. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_overlap_predict.py +0 -0
  669. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_packaged_deploy_units.py +0 -0
  670. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_parentage.py +0 -0
  671. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_paste_landed.py +0 -0
  672. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_pipeline.py +0 -0
  673. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_plan_followup_approve_plan_command.py +0 -0
  674. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_plan_followup_pr_command.py +0 -0
  675. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_plan_followup_review_command.py +0 -0
  676. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_plan_only.py +0 -0
  677. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_plan_parser.py +0 -0
  678. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_platform_paths.py +0 -0
  679. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_portal_bridge.py +0 -0
  680. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_portal_config.py +0 -0
  681. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_portal_store.py +0 -0
  682. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_portal_sync.py +0 -0
  683. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_pr_body_lint.py +0 -0
  684. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_prereqs.py +0 -0
  685. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_production_db_guard.py +0 -0
  686. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_progress.py +0 -0
  687. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_provider_seam.py +0 -0
  688. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_providers.py +0 -0
  689. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_providers_config_labels.py +0 -0
  690. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_providers_pty.py +0 -0
  691. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_quiet_hours.py +0 -0
  692. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_quiet_hours_store_2146.py +0 -0
  693. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reap_merged_sessions.py +0 -0
  694. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reap_stale_interactive_tick.py +0 -0
  695. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile.py +0 -0
  696. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_branch.py +0 -0
  697. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_completions.py +0 -0
  698. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_merges.py +0 -0
  699. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_no_agent_record.py +0 -0
  700. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_tick.py +0 -0
  701. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reconcile_usage_limit_done.py +0 -0
  702. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_refine_chat.py +0 -0
  703. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_cordon_2101.py +0 -0
  704. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  705. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_cordon_deadlock_2240.py +0 -0
  706. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_cordon_stuck_2490.py +0 -0
  707. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_roll_window_handoff.py +0 -0
  708. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_unified_1242.py +0 -0
  709. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_verify.py +0 -0
  710. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_release_window.py +0 -0
  711. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_remote_auto_prune.py +0 -0
  712. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_remote_interactive_reaper.py +0 -0
  713. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_repo_edit_2220.py +0 -0
  714. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_repo_graph_fleet_2237.py +0 -0
  715. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_repo_onboard_2220.py +0 -0
  716. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_report_result_push.py +0 -0
  717. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_reports.py +0 -0
  718. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_retry.py +0 -0
  719. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_retry_advisory_1606.py +0 -0
  720. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_retry_type_1636.py +0 -0
  721. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_revalidate.py +0 -0
  722. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review.py +0 -0
  723. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_end_review_without_verdict.py +0 -0
  724. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_parse_failure_diagnostic.py +0 -0
  725. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_reaffirm.py +0 -0
  726. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_state.py +0 -0
  727. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_verdict_backstop.py +0 -0
  728. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_verdict_override_audit.py +0 -0
  729. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_verdict_relay.py +0 -0
  730. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_review_zero_commits.py +0 -0
  731. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_scoped_review_wiring.py +0 -0
  732. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_scorecard.py +0 -0
  733. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_self_health.py +0 -0
  734. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_serve.py +0 -0
  735. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_serve_app_board_trim.py +0 -0
  736. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_session.py +0 -0
  737. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_slice_issue_attribution.py +0 -0
  738. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_smoke.py +0 -0
  739. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_smoke_live_checkout_restore.py +0 -0
  740. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_smoke_workflow.py +0 -0
  741. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_spend_ceiling.py +0 -0
  742. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_spend_ceiling_coordinator.py +0 -0
  743. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_split.py +0 -0
  744. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_split_work.py +0 -0
  745. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_stage_projection.py +0 -0
  746. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_stalled_pipeline.py +0 -0
  747. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_state.py +0 -0
  748. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_state_review_findings_daemon.py +0 -0
  749. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_status_fleet_footer.py +0 -0
  750. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_stop_1567.py +0 -0
  751. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_stuck.py +0 -0
  752. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_terminal_command.py +0 -0
  753. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_author.py +0 -0
  754. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_chat.py +0 -0
  755. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_orchestrator.py +0 -0
  756. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_report.py +0 -0
  757. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_verdict_parsing.py +0 -0
  758. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_test_verdict_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_thin_client_board_audit.py +0 -0
  760. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_thin_client_config_load_1080.py +0 -0
  761. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_thin_client_daemon_routing_906.py +0 -0
  762. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_tmux_host.py +0 -0
  763. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_tmux_session.py +0 -0
  764. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_transcript_floor.py +0 -0
  765. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_usage.py +0 -0
  766. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_usage_limits.py +0 -0
  767. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_usage_rollup.py +0 -0
  768. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_venv_live_install_2121.py +0 -0
  769. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_version_single_source.py +0 -0
  770. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_watch.py +0 -0
  771. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  772. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worker_events.py +0 -0
  773. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worker_image_pin_sync.py +0 -0
  774. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worker_safety.py +0 -0
  775. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worker_test_scoping.py +0 -0
  776. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worktree.py +0 -0
  777. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  778. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/Cargo.lock +0 -0
  779. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/Cargo.toml +0 -0
  780. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/cargo-config-local-quadraui.toml.example +0 -0
  781. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/approved.rs +0 -0
  782. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/audit.rs +0 -0
  783. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/chat.rs +0 -0
  784. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/data.rs +0 -0
  785. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/dialogs.rs +0 -0
  786. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/doc_tabs.rs +0 -0
  787. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.237 → code_coordinator-0.5.239}/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.237
3
+ Version: 0.5.239
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.237
3
+ Version: 0.5.239
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
@@ -496,6 +496,7 @@ tests/test_dist_name.py
496
496
  tests/test_done_housekeeping.py
497
497
  tests/test_drive.py
498
498
  tests/test_drive_queue.py
499
+ tests/test_drive_queue_roll_pending.py
499
500
  tests/test_drive_state.py
500
501
  tests/test_drive_tmux.py
501
502
  tests/test_epic_up_capability_detection.py
@@ -568,6 +568,7 @@
568
568
  "tests/test_done_housekeeping.py",
569
569
  "tests/test_drive.py",
570
570
  "tests/test_drive_queue.py",
571
+ "tests/test_drive_queue_roll_pending.py",
571
572
  "tests/test_drive_state.py",
572
573
  "tests/test_drive_tmux.py",
573
574
  "tests/test_epic_up_capability_detection.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.237",
2
+ "tag": "0.5.239",
3
3
  "distance": 0,
4
- "node": "g855b16cb40a1e4b711059e218b94cd1b8c19f38b",
4
+ "node": "g6bf7406e8a26af4949bd4dac5a486ef69a92af43",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-23"
@@ -1111,6 +1111,79 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
1111
1111
  click.echo("alert: (none)")
1112
1112
 
1113
1113
 
1114
+ @drive_queue_group.command("cancel-roll")
1115
+ @click.option("--json", "output_json", is_flag=True, default=False,
1116
+ help="Emit the cancelled marker (and any cordons cleared with it) as JSON.")
1117
+ def drive_queue_cancel_roll(output_json: bool) -> None:
1118
+ """Cancel a #2587 roll-pending marker so the queue resumes launching now.
1119
+
1120
+ #2607: every OTHER queue-blocking state has an operator override — a
1121
+ held deploy gate has `coord drive-queue resume`, a release cordon has
1122
+ `coord release cordon --clear` — but the roll-pending marker had none.
1123
+ It is supposed to be self-bounding (a TTL / deferral ceiling —
1124
+ `RollPending.expired`), but a marker that keeps getting RE-ARMED before
1125
+ it ever expires never reaches that bound on its own (the defect #2607
1126
+ fixed at the write sites); this command is the escape hatch for while
1127
+ that marker is still live, and for any future case a re-arm loop is not
1128
+ yet ruled out for. Also clears any release cordon still open for the
1129
+ SAME target — the cordon a stalled `coord release propagate`/
1130
+ `nightly-window` run can leave behind — so cancelling actually frees the
1131
+ queue rather than trading one hold for another.
1132
+
1133
+ Does NOT change the target: the next `coord release propagate`/
1134
+ `nightly-window` run re-arms a marker from scratch if the fleet is still
1135
+ behind. This only stops the CURRENT wait.
1136
+ """
1137
+ from coord.machine_pause import clear_cordon, cordons as read_cordons # noqa: PLC0415
1138
+
1139
+ pending = read_roll_pending()
1140
+ cleared_cordons: list[str] = []
1141
+ if pending is not None:
1142
+ try:
1143
+ active_cordons = read_cordons()
1144
+ except Exception: # noqa: BLE001 — best-effort; the marker clear below is load-bearing
1145
+ active_cordons = {}
1146
+ for name, cordon in active_cordons.items():
1147
+ if getattr(cordon, "target_version", None) != pending.target_version:
1148
+ continue
1149
+ try:
1150
+ if clear_cordon(name):
1151
+ cleared_cordons.append(name)
1152
+ except Exception: # noqa: BLE001 — best-effort; never block the marker clear on this
1153
+ pass
1154
+ clear_roll_pending()
1155
+
1156
+ if output_json:
1157
+ click.echo(
1158
+ _json.dumps(
1159
+ {
1160
+ "cancelled": pending.to_dict() if pending is not None else None,
1161
+ "cleared_cordons": sorted(cleared_cordons),
1162
+ },
1163
+ sort_keys=True,
1164
+ )
1165
+ )
1166
+ return
1167
+
1168
+ if pending is None:
1169
+ click.echo("no roll-pending marker to cancel — the queue is not held for a roll")
1170
+ return
1171
+ click.echo(
1172
+ f"cancelled {pending.describe()} — the drive-queue tick resumes "
1173
+ "launching immediately"
1174
+ )
1175
+ if cleared_cordons:
1176
+ click.echo(
1177
+ "also cleared cordon(s) still open for this target: "
1178
+ + ", ".join(sorted(cleared_cordons))
1179
+ )
1180
+ click.echo(
1181
+ "note: this only stops the current wait — the next `coord release "
1182
+ "propagate`/`nightly-window` run re-arms a fresh marker if the "
1183
+ "fleet is still behind"
1184
+ )
1185
+
1186
+
1114
1187
  # ── block-log (#2235 Phase 0) ────────────────────────────────────────────────
1115
1188
 
1116
1189
 
@@ -431,6 +431,24 @@ def _paused_machine_busy(config) -> list:
431
431
  return busy
432
432
 
433
433
 
434
+ def _confirmation_running_busy() -> list:
435
+ """A #2464 out-of-band test confirmation in flight, as a `Busy` signal
436
+ (#2596).
437
+
438
+ Thin wiring around :func:`coord.release_propagate.confirmation_lock_busy`
439
+ — see that function's docstring for the incident and why a LOCAL,
440
+ non-networked lock probe is the right (and sufficient) check here. Feeds
441
+ the same `extra_busy` seam `_interactive_session_busy`/
442
+ `_paused_machine_busy` do, at both call sites that build one (the top of
443
+ `propagate` and `_drain`'s default `extra_busy_fetch`), so a confirmation
444
+ in flight defers a restart exactly like a live headless assignment does.
445
+ """
446
+ from coord import release_propagate as rp # noqa: PLC0415
447
+ from coord.filelock import notify_lock_path # noqa: PLC0415
448
+
449
+ return rp.confirmation_lock_busy(notify_lock_path())
450
+
451
+
434
452
  def _daemon_machine_name(
435
453
  config, override: str | None, machine_health: dict | None = None
436
454
  ) -> str | None:
@@ -595,14 +613,22 @@ def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
595
613
  :class:`coord.drive_queue.RollPending`'s docstring for the mechanism
596
614
  this feeds.
597
615
 
598
- Never overwrites an existing marker for the SAME target — resetting
599
- ``set_at``/``deferrals`` every few minutes while this timer keeps
600
- finding the fleet busy would make the TTL bound
601
- (:meth:`~coord.drive_queue.RollPending.expired`) unreachable in
602
- practice, exactly the "never actually bounded" failure #2587's own
603
- bound exists to prevent. A marker for a DIFFERENT (stale) target IS
604
- replaced — the newly resolved version is the one that should roll.
616
+ Never overwrites an existing marker's ``set_at``/``deferrals`` — for the
617
+ SAME target this is a plain no-op (unchanged from before #2607); for a
618
+ DIFFERENT target the target/reason are updated in place but the clock
619
+ and deferral count carry over unchanged. #2607: PyPI's "latest" climbs on
620
+ every merge (`Auto-release on merge to main`), so a busy fleet's target
621
+ had almost always moved by the time this timer re-fired — treating that
622
+ as a "new" roll and resetting ``set_at``/``deferrals`` made the TTL/
623
+ deferral bound (:meth:`~coord.drive_queue.RollPending.expired`)
624
+ unreachable in practice, exactly the "never actually bounded" failure
625
+ #2587's own bound exists to prevent, and exactly how #2607's queue froze
626
+ for good. A re-arm — same target or not — is a continuation of the SAME
627
+ stuck roll, not a new operator request; only a marker set from scratch
628
+ (no existing one at all, e.g. right after `coord drive-queue
629
+ cancel-roll`) starts a new clock.
605
630
  """
631
+ import dataclasses as _dataclasses # noqa: PLC0415
606
632
  import time as _time # noqa: PLC0415
607
633
 
608
634
  from coord.commands.drive_queue import read_roll_pending, write_roll_pending # noqa: PLC0415
@@ -611,6 +637,11 @@ def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
611
637
  existing = read_roll_pending()
612
638
  if existing is not None and existing.target_version == target_version:
613
639
  return
640
+ if existing is not None:
641
+ write_roll_pending(
642
+ _dataclasses.replace(existing, target_version=target_version, reason=reason)
643
+ )
644
+ return
614
645
  write_roll_pending(
615
646
  RollPending(target_version=target_version, set_at=_time.time(), reason=reason)
616
647
  )
@@ -808,6 +839,13 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
808
839
  # seam from the daemon-aware pause store, so an operator-paused machine
809
840
  # defers exactly like a live assignment does instead of reading idle.
810
841
  extra_busy.extend(_paused_machine_busy(config))
842
+ # #2596: nor can it see a #2464 confirmation running in the notify
843
+ # drain — a restart landing mid-confirmation is exactly what let a
844
+ # SIGTERM get read as a test failure on 2026-08-22 (the confirmation
845
+ # itself now refuses that read, #2527, but the restart still shouldn't
846
+ # have happened at all). Feed the same seam so it defers like a live
847
+ # assignment instead of getting reaped.
848
+ extra_busy.extend(_confirmation_running_busy())
811
849
  quiescence = rp.assess_quiescence(
812
850
  queue_entries=board.get("drive_queue") or [],
813
851
  assignments=board.get("assignments") or [],
@@ -2510,8 +2548,15 @@ def _drain(
2510
2548
  # #2174: paused/quiet-hours state, same as the top-level
2511
2549
  # `propagate` call site — a paused daemon host must keep the
2512
2550
  # drain from ever reading "clear" just because tmux is quiet.
2551
+ # #2596: same for a confirmation running under `notify.lock` —
2552
+ # gated on `config is not None` too, even though the check
2553
+ # itself needs no config, purely to keep this function's
2554
+ # documented "no *config* means no real filesystem I/O"
2555
+ # contract intact for the `config=None` unit-test path above.
2513
2556
  extra_busy_fetch = lambda: ( # noqa: E731
2514
- _interactive_session_busy(config) + _paused_machine_busy(config)
2557
+ _interactive_session_busy(config)
2558
+ + _paused_machine_busy(config)
2559
+ + _confirmation_running_busy()
2515
2560
  )
2516
2561
  else:
2517
2562
  extra_busy_fetch = lambda: [] # noqa: E731
@@ -2799,6 +2844,7 @@ def release_nightly_window(
2799
2844
  genuinely idle is a fine moment to roll immediately. A still-busy fleet
2800
2845
  just leaves the marker exactly as it was for the tick to keep watching.
2801
2846
  """
2847
+ import dataclasses as _dataclasses # noqa: PLC0415
2802
2848
  import json as _json # noqa: PLC0415
2803
2849
  import time # noqa: PLC0415
2804
2850
 
@@ -3002,18 +3048,35 @@ def release_nightly_window(
3002
3048
  _finish(rw.STATUS_PROPAGATE_FAILED, prop_exit or 1)
3003
3049
 
3004
3050
  # ── 3. set (or refresh) the marker and return immediately (#2587) ─────
3051
+ # #2607: a marker already pending for a DIFFERENT target is updated in
3052
+ # place — target_version/reason move, but set_at/deferrals carry over
3053
+ # unchanged. This is the exact site the incident traced back to: PyPI's
3054
+ # "latest" climbs on every merge, so by the time this nightly timer
3055
+ # re-fired the target had almost always moved, and writing a brand new
3056
+ # `RollPending` here reset the TTL/deferral escape hatch on every single
3057
+ # re-arm — the queue froze because the bound that was supposed to save it
3058
+ # could never be reached. Only a genuinely fresh marker (no existing one
3059
+ # at all) gets a new clock.
3005
3060
  if existing is not None:
3006
3061
  click.echo(
3007
3062
  f"replacing stale roll-pending marker ({existing.describe()}) "
3008
- f"with v{record.target_version}"
3063
+ f"with v{record.target_version} — preserving its original "
3064
+ f"set_at/deferrals (#2607: a re-arm is a continuation of the "
3065
+ f"same stuck roll, not a new request)"
3009
3066
  )
3010
- write_roll_pending(
3011
- RollPending(
3012
- target_version=record.target_version,
3013
- set_at=time.time(),
3014
- reason="nightly-window",
3067
+ write_roll_pending(
3068
+ _dataclasses.replace(
3069
+ existing, target_version=record.target_version, reason="nightly-window",
3070
+ )
3071
+ )
3072
+ else:
3073
+ write_roll_pending(
3074
+ RollPending(
3075
+ target_version=record.target_version,
3076
+ set_at=time.time(),
3077
+ reason="nightly-window",
3078
+ )
3015
3079
  )
3016
- )
3017
3080
  click.echo(
3018
3081
  f"roll pending: v{record.target_version} — the drive-queue tick will "
3019
3082
  f"fire `coord release propagate` at the next inter-drive gap "
@@ -629,6 +629,31 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
629
629
  if live_error:
630
630
  click.echo(f" error: {live_error}")
631
631
 
632
+ # #2607: the #2587 roll-pending marker — while it is live the drive-queue
633
+ # tick refuses to launch anything, and #2607 found a re-arm path that
634
+ # could reset its own TTL/deferral escape hatch on every attempt, freezing
635
+ # the queue with no operator-visible sign anywhere OTHER than `coord
636
+ # drive-queue status`. Surfaced here too so an operator staring at plain
637
+ # `coord status` — the first thing anyone reaches for — sees it without
638
+ # having to know the marker exists. Host-local (same file the daemon
639
+ # host's own `coord-drive-queue.timer` reads), so skipped on a thin
640
+ # client exactly like the merge queue above.
641
+ if not svc:
642
+ import time as _time
643
+
644
+ from coord.commands.drive_queue import read_roll_pending
645
+
646
+ roll_pending = read_roll_pending()
647
+ if roll_pending is not None:
648
+ age = _time.time() - roll_pending.set_at
649
+ click.echo("")
650
+ click.echo(
651
+ f"⏸ {roll_pending.describe()} — set {age:.0f}s ago, "
652
+ f"{roll_pending.deferrals}/{roll_pending.max_deferrals} "
653
+ "deferrals — drive queue launches nothing until it fires or "
654
+ "expires. Cancel with `coord drive-queue cancel-roll`."
655
+ )
656
+
632
657
  # #920: sibling-overlap warnings — approved (PENDING) queue entries that
633
658
  # touch overlapping files and have been aging. Mirrors the merge-queue
634
659
  # skip above: the queue is host-local, so this is a no-op on a thin
@@ -1364,6 +1389,28 @@ def doctor(
1364
1389
  if is_problem:
1365
1390
  any_problem = True
1366
1391
 
1392
+ # #2607: name the #2587 roll-pending marker here too, not just in `coord
1393
+ # drive-queue status` — an operator running `coord doctor` to ask "why
1394
+ # isn't the fleet doing anything" must see this without already knowing
1395
+ # the marker exists. Host-local (the file the daemon host's own
1396
+ # `coord-drive-queue.timer` reads), so this only has something to say
1397
+ # when run ON that host — same caveat as the release-verify section
1398
+ # above resolving PyPI locally.
1399
+ from coord.commands.drive_queue import read_roll_pending # noqa: PLC0415
1400
+
1401
+ roll_pending = read_roll_pending()
1402
+ if roll_pending is not None:
1403
+ import time as _time # noqa: PLC0415
1404
+
1405
+ age = _time.time() - roll_pending.set_at
1406
+ click.echo("")
1407
+ click.echo(
1408
+ f"⏸ {roll_pending.describe()} — set {age:.0f}s ago, "
1409
+ f"{roll_pending.deferrals}/{roll_pending.max_deferrals} deferrals "
1410
+ "— the drive queue on this host launches nothing until it fires "
1411
+ "or expires. Escape hatch: `coord drive-queue cancel-roll`."
1412
+ )
1413
+
1367
1414
  # #1862: a quiet-hours window that removes the only machine with a
1368
1415
  # capability makes matching work silently unroutable (`dispatch_smoke`
1369
1416
  # already has this failure shape — #1678: it refuses to route and the
@@ -87,7 +87,14 @@ saying so:
87
87
  #2527) — a negative ``returncode`` from `subprocess.run` (e.g. ``-15`` for
88
88
  SIGTERM), most often a `coord-agent`/`coord-serve` restart landing mid-run.
89
89
  The command never ran to completion, exactly like a timeout, so it gets the
90
- identical inconclusive treatment rather than being read as "ran and failed".
90
+ identical inconclusive treatment rather than being read as "ran and failed";
91
+ * exit 126 (:data:`PERMISSION_DENIED_EXIT`, #2596) — POSIX's "found but not
92
+ executable", the same "toolchain problem, not a branch problem" shape as
93
+ exit 127's "not found";
94
+ * a nonzero exit with literally no captured output (:data:`KIND_NO_OUTPUT`,
95
+ #2596) — a crash with no message, an OOM-kill, a runner that swallowed its
96
+ own output. A refutation is only as good as the evidence behind it, and
97
+ there is nothing here to put in a fix briefing.
91
98
 
92
99
  That asymmetry is the safety property: the worst case of a broken confirmation
93
100
  environment is that the Test stage behaves exactly as it did before this module
@@ -197,6 +204,28 @@ _TRUTHY = frozenset({"1", "true", "yes", "on"})
197
204
  #: existing ``TimeoutExpired`` carve-out and get misread as "ran and failed".
198
205
  KIND_SIGNAL = "signal"
199
206
 
207
+ #: #2596: POSIX's "found but not executable" — a permission bit dropped on a
208
+ #: build script, an environment inconsistency, the identical "toolchain
209
+ #: problem, not a branch problem" shape :data:`~coord.revalidate.
210
+ #: SHELL_NOT_FOUND_EXIT` (127, "not found") already covers. Handled locally
211
+ #: here rather than folded into :func:`~coord.revalidate.
212
+ #: is_infrastructure_failure`: that helper is shared with ``coord merge
213
+ #: --revalidate``, which #2596 does not touch, and this module already keeps
214
+ #: its own signal-kill classification local for the same reason.
215
+ PERMISSION_DENIED_EXIT = 126
216
+
217
+ #: #2596: a build/test command that ran to completion, returned nonzero, and
218
+ #: captured NOTHING — no stdout, no stderr. A genuine failure almost always
219
+ #: leaves a trace (an assertion, a traceback, a compiler error); zero bytes
220
+ #: of output before dying nonzero is more often a crash with no message, an
221
+ #: OOM-kill, or a runner that silently swallowed its own output than a real,
222
+ #: diagnosable test failure. There is nothing here to extract into a fix
223
+ #: briefing (see ``coord/drive.py``'s matching #2596 guard against
224
+ #: dispatching a fix worker with no extracted failure), so this stays
225
+ #: inconclusive rather than refuting a claim we cannot back up with a
226
+ #: single line of evidence.
227
+ KIND_NO_OUTPUT = "no_output"
228
+
200
229
  #: The only kinds that may overturn a PASS claim: a build or test command that
201
230
  #: ran to completion and returned nonzero. Nothing weaker. See the module
202
231
  #: docstring's fail-direction section — this frozenset IS that safety property.
@@ -204,7 +233,9 @@ REFUTING_KINDS = frozenset({KIND_BUILD, KIND_SUITE})
204
233
 
205
234
  #: Kinds meaning "the check could not reach a verdict". The caller falls back to
206
235
  #: the worker's own claim on any of these, which is pre-#2464 behaviour.
207
- INCONCLUSIVE_KINDS = frozenset({KIND_SETUP, KIND_INFRA, KIND_TIMEOUT, KIND_SIGNAL})
236
+ INCONCLUSIVE_KINDS = frozenset({
237
+ KIND_SETUP, KIND_INFRA, KIND_TIMEOUT, KIND_SIGNAL, KIND_NO_OUTPUT,
238
+ })
208
239
 
209
240
 
210
241
  # ── Per-pass budget (#2464-review) ──────────────────────────────────────────
@@ -584,7 +615,9 @@ def _classify_failure(
584
615
  returncode=returncode,
585
616
  worktree=worktree,
586
617
  )
587
- infra = is_infrastructure_failure(returncode, output)
618
+ infra = returncode == PERMISSION_DENIED_EXIT or is_infrastructure_failure(
619
+ returncode, output,
620
+ )
588
621
  baseline = not infra and is_baseline_red_failure(returncode, output)
589
622
  if infra:
590
623
  return ConfirmationResult(
@@ -614,6 +647,25 @@ def _classify_failure(
614
647
  returncode=returncode,
615
648
  worktree=worktree,
616
649
  )
650
+ if not (output or "").strip():
651
+ # #2596: ran to completion, returned nonzero, and captured literally
652
+ # nothing — no stdout, no stderr. Same fail-direction reasoning as
653
+ # every other arm above: a refutation is only as good as the
654
+ # evidence behind it, and there is not one line of it here (a crash
655
+ # with no message, an OOM-kill, a runner that swallowed its own
656
+ # output). Never REFUTING_KINDS on evidence this thin.
657
+ return ConfirmationResult(
658
+ kind=KIND_NO_OUTPUT,
659
+ reason=(
660
+ f"the independently-run {stage} command exited nonzero (exit "
661
+ f"{returncode}) but produced NO captured output — there is "
662
+ "nothing here to diagnose as a branch failure, so this is "
663
+ "not treated as a refutation (#2596)"
664
+ ),
665
+ command=command,
666
+ returncode=returncode,
667
+ worktree=worktree,
668
+ )
617
669
  return ConfirmationResult(
618
670
  kind=KIND_BUILD if stage == "build" else KIND_SUITE,
619
671
  reason=(
@@ -885,8 +937,10 @@ __all__ = [
885
937
  "CONFIRM_PASS_BUDGET_SECONDS",
886
938
  "DISABLE_ENV_VAR",
887
939
  "INCONCLUSIVE_KINDS",
940
+ "KIND_NO_OUTPUT",
888
941
  "KIND_SIGNAL",
889
942
  "NOTIFY_BASE_CLIENT_TIMEOUT_SECONDS",
943
+ "PERMISSION_DENIED_EXIT",
890
944
  "REFUTING_KINDS",
891
945
  "ConfirmationResult",
892
946
  "begin_confirmation_pass",
@@ -69,10 +69,22 @@ def _open(path: Path) -> sqlite3.Connection:
69
69
  conn.execute("PRAGMA busy_timeout=5000")
70
70
  conn.execute("PRAGMA foreign_keys=ON")
71
71
  conn.row_factory = sqlite3.Row
72
- _ensure_schema(conn)
73
- _maybe_migrate_json(conn)
74
- _migrate_gate_order(conn)
75
- _backfill_orphaned_review_verdicts(conn)
72
+ # #2598: _ensure_schema/_maybe_migrate_json/_migrate_gate_order/
73
+ # _backfill_orphaned_review_verdicts are convergent one-time operations,
74
+ # not per-open invariants — but every one of them ran unconditionally on
75
+ # every process's DB open, so a read-only command (`coord status`) began
76
+ # a write transaction (and, for the unconstrained schema_version table,
77
+ # left a junk row behind — 45,708 of them observed in the field) purely
78
+ # to open a connection it only ever intended to read from. Gate the
79
+ # whole block on a cheap read-only version check: a database already at
80
+ # _DB_SCHEMA_VERSION does none of this work, so opening it issues no
81
+ # write at all. See _read_schema_version's docstring for why this read
82
+ # is correct against both the pre-#2598 and post-#2598 table shapes.
83
+ if _read_schema_version(conn) < _DB_SCHEMA_VERSION:
84
+ _ensure_schema(conn)
85
+ _maybe_migrate_json(conn)
86
+ _migrate_gate_order(conn)
87
+ _backfill_orphaned_review_verdicts(conn)
76
88
  return conn
77
89
 
78
90
 
@@ -143,13 +155,94 @@ def retry_on_locked(
143
155
 
144
156
  # ── Schema ────────────────────────────────────────────────────────────────────
145
157
 
158
+ # #2598: bumped from the original unversioned "1" written by every process
159
+ # forever. Read by _read_schema_version()/_open() as the target a database
160
+ # must reach before _open() can skip its write path entirely. Whoever adds
161
+ # the NEXT one-shot migration (another _migrate_* or _backfill_* function
162
+ # meant to run once per database, not once per process) must bump this too
163
+ # — otherwise an already-caught-up database (version == _DB_SCHEMA_VERSION)
164
+ # will never run it, because the whole write path is gated on this compare.
165
+ _DB_SCHEMA_VERSION = 2
166
+
167
+
168
+ def _read_schema_version(conn: sqlite3.Connection) -> int:
169
+ """Cheap, read-only probe of how caught-up *conn*'s database is (#2598).
170
+
171
+ A plain ``SELECT`` — never begins a write transaction, so calling this
172
+ to decide whether _open() needs to do any write work cannot itself take
173
+ the write lock.
174
+
175
+ Returns 0 when ``schema_version`` doesn't exist yet (brand-new database)
176
+ or is empty. Otherwise returns the highest stored value, which reads
177
+ correctly against *either* table shape: the pre-#2598 unconstrained
178
+ table (every row holds the same value, so MAX is that value — junk rows
179
+ don't change the answer) or the post-#2598 constrained table (exactly
180
+ one row). A pre-#2598 database therefore reads as version 1, which is
181
+ ``< _DB_SCHEMA_VERSION`` (2) — so it takes the write path exactly once
182
+ more, which is what collapses its schema_version duplicates and applies
183
+ the PRIMARY KEY (see _fix_schema_version_table). Every open after that
184
+ reads 2 and skips the write path entirely.
185
+ """
186
+ try:
187
+ row = conn.execute("SELECT MAX(version) FROM schema_version").fetchone()
188
+ except sqlite3.OperationalError:
189
+ return 0 # table doesn't exist yet
190
+ if row is None or row[0] is None:
191
+ return 0
192
+ return int(row[0])
193
+
194
+
195
+ def _fix_schema_version_table(conn: sqlite3.Connection) -> None:
196
+ """Collapse the pre-#2598 unconstrained ``schema_version`` table.
197
+
198
+ The original table declared no ``PRIMARY KEY``/``UNIQUE`` constraint, so
199
+ ``INSERT OR IGNORE INTO schema_version VALUES (1)`` — meant to be a
200
+ once-per-database no-op — actually succeeded on every single process
201
+ open, leaving one junk row per open (45,708 observed in the field).
202
+ This rebuilds the table with a real ``PRIMARY KEY`` on ``version`` so
203
+ that no longer happens, collapsing any existing duplicate rows down to
204
+ their distinct values in the process.
205
+
206
+ Safe to call against any existing shape: the old broken table (any
207
+ number of duplicate rows, no constraint), the new constrained table
208
+ (already migrated — a no-op), or no table at all (fresh database).
209
+ """
210
+ row = conn.execute(
211
+ "SELECT sql FROM sqlite_master WHERE type='table' AND name='schema_version'"
212
+ ).fetchone()
213
+ if row is not None and "PRIMARY KEY" in (row[0] or ""):
214
+ return # already the constrained post-#2598 shape
215
+ conn.executescript(
216
+ """
217
+ CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL);
218
+ CREATE TABLE schema_version_new (version INTEGER PRIMARY KEY);
219
+ INSERT OR IGNORE INTO schema_version_new
220
+ SELECT DISTINCT version FROM schema_version;
221
+ DROP TABLE schema_version;
222
+ ALTER TABLE schema_version_new RENAME TO schema_version;
223
+ """
224
+ )
225
+ conn.commit()
226
+
227
+
228
+ def _set_schema_version(conn: sqlite3.Connection, version: int) -> None:
229
+ """Overwrite ``schema_version`` with a single row holding *version*.
230
+
231
+ ``schema_version`` holds exactly one fact — how caught-up this database
232
+ is — so a version bump DELETEs the old row rather than accumulating one
233
+ row per version ever seen (which ``INSERT OR IGNORE``/``INSERT OR
234
+ REPLACE`` would do here, since they only dedupe on a *matching* primary
235
+ key, and a version bump's whole point is that the key changes).
236
+ """
237
+ conn.execute("DELETE FROM schema_version")
238
+ conn.execute("INSERT INTO schema_version (version) VALUES (?)", (version,))
239
+ conn.commit()
240
+
241
+
146
242
  def _ensure_schema(conn: sqlite3.Connection) -> None:
147
243
  """Create all tables and indexes if they don't already exist."""
244
+ _fix_schema_version_table(conn)
148
245
  conn.executescript("""
149
- CREATE TABLE IF NOT EXISTS schema_version (
150
- version INTEGER NOT NULL
151
- );
152
-
153
246
  CREATE TABLE IF NOT EXISTS assignments (
154
247
  assignment_id TEXT PRIMARY KEY,
155
248
  machine_name TEXT NOT NULL,
@@ -686,13 +779,12 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
686
779
  ON portal_outbox(state, submission_id, seq);
687
780
  CREATE INDEX IF NOT EXISTS idx_portal_events_submission
688
781
  ON portal_events(submission_id);
689
-
690
- INSERT OR IGNORE INTO schema_version VALUES (1);
691
782
  """)
692
783
  conn.commit()
693
784
  # Column-level migrations for existing databases. SQLite does not support
694
785
  # "ADD COLUMN IF NOT EXISTS", so we catch OperationalError instead.
695
786
  _migrate_add_columns(conn)
787
+ _set_schema_version(conn, _DB_SCHEMA_VERSION)
696
788
 
697
789
 
698
790
  def _migrate_add_columns(conn: sqlite3.Connection) -> None: