code-coordinator 0.5.238__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.238 → code_coordinator-0.5.239}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/drive_queue.py +73 -0
  7. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/release.py +78 -15
  8. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/status.py +47 -0
  9. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/confirm_test.py +57 -3
  10. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/drive.py +174 -63
  11. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/drive_queue.py +33 -6
  12. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/predicate.py +41 -4
  13. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/release_propagate.py +64 -0
  14. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/NOTIFIER.md +31 -1
  15. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_drive_queue.py +2 -0
  16. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_release_window.py +36 -2
  17. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_confirm_test.py +60 -1
  18. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_drive.py +161 -55
  19. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_drive_queue.py +78 -0
  20. code_coordinator-0.5.239/tests/test_drive_queue_roll_pending.py +261 -0
  21. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_cli.py +8 -2
  22. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_isolation.py +6 -1
  23. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_predicate.py +96 -13
  24. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_service.py +67 -12
  25. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notify.py +35 -0
  26. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_propagate.py +67 -0
  27. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.claude/commands/board.md +0 -0
  28. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.claude/commands/complete-session.md +0 -0
  29. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.claude/commands/coordinator.md +0 -0
  30. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.githooks/_lib.sh +0 -0
  31. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.githooks/post-checkout +0 -0
  32. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.githooks/post-commit +0 -0
  33. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.githooks/post-merge +0 -0
  34. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  35. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/coord-ci-acceptance.yml +0 -0
  36. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/workflows/auto-release.yml +0 -0
  37. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/workflows/cargo-test.yml +0 -0
  38. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/workflows/publish.yml +0 -0
  39. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/workflows/release-tui.yml +0 -0
  40. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.github/workflows/test.yml +0 -0
  41. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/.gitignore +0 -0
  42. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/CLAUDE.md +0 -0
  43. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/GOAL.md +0 -0
  44. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/LICENSE +0 -0
  45. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/MANIFEST.in +0 -0
  46. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/README.md +0 -0
  47. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/dependency_links.txt +0 -0
  48. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/entry_points.txt +0 -0
  49. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/requires.txt +0 -0
  50. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/code_coordinator.egg-info/top_level.txt +0 -0
  51. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/__init__.py +0 -0
  52. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/_board_mapping.py +0 -0
  53. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/acceptance.py +0 -0
  54. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/acceptance_drivers.py +0 -0
  55. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agent.py +0 -0
  56. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agent_app.py +0 -0
  57. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agent_update.py +0 -0
  58. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agents/opencode/.gitignore +0 -0
  59. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agents/opencode/agents/work.md +0 -0
  60. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/agents/opencode/routing.jsonc +0 -0
  61. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/approved_work.py +0 -0
  62. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/audit.py +0 -0
  63. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/auto_loop.py +0 -0
  64. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/block_log.py +0 -0
  65. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/board_bool_guard.py +0 -0
  66. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/board_service.py +0 -0
  67. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/board_wire.py +0 -0
  68. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/brain.py +0 -0
  69. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/branch_model.py +0 -0
  70. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/bug_intake.py +0 -0
  71. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/cargo_cache.py +0 -0
  72. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/ci_fix.py +0 -0
  73. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/ci_github.py +0 -0
  74. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/ci_gitlab.py +0 -0
  75. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/ci_store.py +0 -0
  76. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/claim.py +0 -0
  77. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/cli.py +0 -0
  78. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/client.py +0 -0
  79. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/__init__.py +0 -0
  80. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/_common.py +0 -0
  81. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/acceptance.py +0 -0
  82. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/agent_ops.py +0 -0
  83. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/audit.py +0 -0
  84. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/chat.py +0 -0
  85. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/dispatch.py +0 -0
  86. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/dispatch_workers.py +0 -0
  87. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/drive.py +0 -0
  88. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/gate_a.py +0 -0
  89. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/gates.py +0 -0
  90. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/issues.py +0 -0
  91. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/lifecycle.py +0 -0
  92. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/merge.py +0 -0
  93. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/milestone.py +0 -0
  94. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/plan_followup.py +0 -0
  95. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/plans.py +0 -0
  96. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/portal.py +0 -0
  97. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/repo.py +0 -0
  98. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/report.py +0 -0
  99. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/review.py +0 -0
  100. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/scorecard.py +0 -0
  101. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/sessions.py +0 -0
  102. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/setup.py +0 -0
  103. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/terminal.py +0 -0
  104. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/test_gate.py +0 -0
  105. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/commands/tui.py +0 -0
  106. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/comments.py +0 -0
  107. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/config.py +0 -0
  108. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/config_reload.py +0 -0
  109. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/db.py +0 -0
  117. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dead_end.py +0 -0
  118. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/decomposition_chat.py +0 -0
  119. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/README.md +0 -0
  120. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-agent.service +0 -0
  121. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-drive-queue.service +0 -0
  125. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-drive-queue.timer +0 -0
  126. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-notify.service +0 -0
  127. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-notify.timer +0 -0
  128. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-release-propagate.service +0 -0
  129. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-release-propagate.timer +0 -0
  130. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-release-window.service +0 -0
  131. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-release-window.timer +0 -0
  132. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-serve.service +0 -0
  133. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-web-dist-build.service +0 -0
  134. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-web-dist-build.timer +0 -0
  135. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy/coord-web.service +0 -0
  136. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy_manifest.py +0 -0
  137. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deploy_units.py +0 -0
  138. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/deps.py +0 -0
  139. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/diagnose.py +0 -0
  140. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dispatch.py +0 -0
  141. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/dist_name.py +0 -0
  142. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/drive_state.py +0 -0
  143. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/events.py +0 -0
  144. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/failure_class.py +0 -0
  145. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/filelock.py +0 -0
  146. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/fleet_config_health.py +0 -0
  147. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/forge_availability.py +0 -0
  148. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/freshness.py +0 -0
  149. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/gate_a.py +0 -0
  150. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/gate_b.py +0 -0
  151. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/gate_snapshot.py +0 -0
  152. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/gates.py +0 -0
  153. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/github_ops.py +0 -0
  154. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/goal.py +0 -0
  155. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/graph_health.py +0 -0
  156. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/__init__.py +0 -0
  157. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/aggregate.py +0 -0
  158. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/__init__.py +0 -0
  159. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/agent_install.py +0 -0
  160. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/cargo_targets.py +0 -0
  161. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/claude_binary.py +0 -0
  162. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/coord_web_ci_pin.py +0 -0
  163. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/deploy_lane_facts.py +0 -0
  164. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/disk.py +0 -0
  165. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/fleet_board.py +0 -0
  166. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  167. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/fleet_phantom.py +0 -0
  168. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/fleet_unit_drift.py +0 -0
  169. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/graph.py +0 -0
  170. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/graphify_cli.py +0 -0
  171. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/index_lock.py +0 -0
  172. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/plan_usage.py +0 -0
  173. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/repo_state.py +0 -0
  174. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/spawned_coord.py +0 -0
  175. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/timer_active.py +0 -0
  176. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/toolchain.py +0 -0
  177. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/unit_drift.py +0 -0
  178. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/unit_enablement.py +0 -0
  179. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/checks/worktrees.py +0 -0
  180. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/cli.py +0 -0
  181. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/context.py +0 -0
  182. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/fleet_snapshot.py +0 -0
  183. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/models.py +0 -0
  184. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/pypi.py +0 -0
  185. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/registry.py +0 -0
  186. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/render.py +0 -0
  187. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/health/units.py +0 -0
  188. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/hooks.py +0 -0
  189. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/housekeeping.py +0 -0
  190. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/liveness_auditor.py +0 -0
  193. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/machine_pause.py +0 -0
  194. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/merge_queue.py +0 -0
  195. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/models.py +0 -0
  201. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/network.py +0 -0
  202. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/service.py +0 -0
  210. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/store.py +0 -0
  211. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notifier/transport.py +0 -0
  212. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/notify.py +0 -0
  213. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/openapi.py +0 -0
  214. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/overlap_fence.py +0 -0
  215. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/overlap_predict.py +0 -0
  216. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/parentage.py +0 -0
  217. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/parentage_github.py +0 -0
  218. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/pipeline.py +0 -0
  219. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/plan_parser.py +0 -0
  220. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/plans.py +0 -0
  221. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/platform_paths.py +0 -0
  222. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/portal_bridge.py +0 -0
  223. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/portal_store.py +0 -0
  224. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/portal_sync.py +0 -0
  225. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/pr_body_lint.py +0 -0
  226. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/prereqs.py +0 -0
  227. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/progress.py +0 -0
  228. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/providers/__init__.py +0 -0
  229. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/providers/base.py +0 -0
  230. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/providers/claude.py +0 -0
  231. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/providers/claude_pty.py +0 -0
  232. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/providers/opencode.py +0 -0
  233. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/queue_diagnose.py +0 -0
  234. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/reconcile.py +0 -0
  235. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/reconcile_tick.py +0 -0
  236. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/refine_chat.py +0 -0
  237. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/release_cordon.py +0 -0
  238. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/release_verify.py +0 -0
  239. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/release_window.py +0 -0
  240. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/repo_edit.py +0 -0
  241. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/repo_onboard.py +0 -0
  242. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/reports.py +0 -0
  243. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/revalidate.py +0 -0
  244. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/review.py +0 -0
  245. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/scorecard.py +0 -0
  246. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/self_health.py +0 -0
  247. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/serve_app.py +0 -0
  248. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  249. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  250. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  251. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  252. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/portal-followup/SKILL.md +0 -0
  254. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  255. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  256. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/skills/update-issue/SKILL.md +0 -0
  257. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/smoke.py +0 -0
  258. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/spend_ceiling.py +0 -0
  259. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/split_work.py +0 -0
  260. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/stage_projection.py +0 -0
  261. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/state.py +0 -0
  262. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/test_author.py +0 -0
  263. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/test_chat.py +0 -0
  264. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/test_orchestrator.py +0 -0
  265. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/test_report.py +0 -0
  266. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/tui_release.py +0 -0
  267. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/usage.py +0 -0
  268. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/usage_limits.py +0 -0
  269. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/usage_rollup.py +0 -0
  270. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coord/worker_events.py +0 -0
  271. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/coordinator.example.yml +0 -0
  272. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-agent.service +0 -0
  273. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-db-backup.service +0 -0
  274. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-db-backup.sh +0 -0
  275. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-db-backup.timer +0 -0
  276. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-drive-queue.service +0 -0
  277. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-drive-queue.timer +0 -0
  278. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-notify.service +0 -0
  279. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-notify.timer +0 -0
  280. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-release-propagate.service +0 -0
  281. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-release-propagate.timer +0 -0
  282. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-release-window.service +0 -0
  283. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-release-window.timer +0 -0
  284. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-serve.service +0 -0
  285. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.service +0 -0
  286. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.sh +0 -0
  287. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-web-dist-build.timer +0 -0
  288. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-web-rollback.sh +0 -0
  289. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/coord-web.service +0 -0
  290. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/deploy/node-shim.sh +0 -0
  291. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  292. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_CI.md +0 -0
  293. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ADR_COORD_WEB_DIST.md +0 -0
  294. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/AGENT_OPERATIONS.md +0 -0
  295. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ARCHITECTURE.md +0 -0
  296. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ARCH_SECURITY_GATES.md +0 -0
  297. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/COCKPIT.md +0 -0
  298. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/CONTROL_CENTER.md +0 -0
  299. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/COST_DISCIPLINE.md +0 -0
  300. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/CROSS_PLATFORM.md +0 -0
  301. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/CUSTOMER_PORTAL.md +0 -0
  302. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/DRIVE_QUEUE.md +0 -0
  303. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/EPHEMERAL_WORKERS.md +0 -0
  304. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/FORGE_MIGRATION.md +0 -0
  305. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/GRAPHIFY_SETUP.md +0 -0
  306. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ISSUE_GUIDANCE.md +0 -0
  307. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/MAC_MINI.md +0 -0
  308. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  309. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/OPENCODE_VERIFICATION.md +0 -0
  310. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/OPERATING_GOTCHAS.md +0 -0
  311. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/ORACLE_LOOP.md +0 -0
  312. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/PHONE_WEBAPP.md +0 -0
  313. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/PIPELINE_V2.md +0 -0
  314. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/PLATFORM_EVOLUTION.md +0 -0
  315. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/SECOND_BACKEND.md +0 -0
  316. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/STORE_SERVICE.md +0 -0
  317. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  318. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/WEB_CONTROL_CENTER.md +0 -0
  319. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/WSL_WINDOWS_WORKER.md +0 -0
  320. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/mocks/web/README.md +0 -0
  321. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/mocks/web/_tokens.css +0 -0
  322. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/mocks/web/issue-detail.html +0 -0
  323. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/mocks/web/pipeline-narrow.html +0 -0
  324. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/docs/mocks/web/pipeline-wide.html +0 -0
  325. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/graphify-out/.gitignore +0 -0
  326. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/install-agent.sh +0 -0
  327. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/pyproject.toml +0 -0
  328. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/audit_review_verdict_overrides.py +0 -0
  329. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  330. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/build-worker-image.sh +0 -0
  331. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/coordinator-machine.py +0 -0
  332. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/epic-down.sh +0 -0
  333. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/epic-up.sh +0 -0
  334. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/preflight.sh +0 -0
  335. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/provision-worker.sh +0 -0
  336. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  337. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  338. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/azure-workers/verify-github-token.sh +0 -0
  339. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/check_gh_argv_containment.py +0 -0
  340. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/codegen.py +0 -0
  341. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/coord-test-runner.sh +0 -0
  342. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/drive-batch.sh +0 -0
  343. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/gen_board_fixture.py +0 -0
  344. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/gen_mock_index.py +0 -0
  345. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/next_release_tag.py +0 -0
  346. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/run_tests_in_populated_home.sh +0 -0
  347. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/run_tests_without_gh.sh +0 -0
  348. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/smoke_437_interactive.py +0 -0
  349. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/verify_878_review_capture.py +0 -0
  350. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/verify_release_published.py +0 -0
  351. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/scripts/verify_release_wheel.py +0 -0
  352. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/setup.cfg +0 -0
  353. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/SMOKE_SET.md +0 -0
  354. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/__init__.py +0 -0
  355. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  356. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/contract.md +0 -0
  357. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/manifest.yml +0 -0
  358. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  359. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  360. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  361. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  362. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-37/conftest.py +0 -0
  363. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-37/contract.md +0 -0
  364. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-37/manifest.yml +0 -0
  365. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  366. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  367. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/contract.md +0 -0
  368. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/manifest.yml +0 -0
  369. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  370. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  371. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  372. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  373. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  374. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  375. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  376. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  377. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  378. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  379. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/contract.md +0 -0
  380. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  381. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  382. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/manifest.yml +0 -0
  383. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-51/tsconfig.json +0 -0
  385. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  386. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  387. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  388. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/contract.md +0 -0
  389. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  390. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/manifest.yml +0 -0
  391. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  392. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  393. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  394. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  395. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  396. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  397. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  398. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  399. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  400. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  401. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  402. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  403. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/contract.md +0 -0
  404. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  405. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/manifest.yml +0 -0
  406. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  407. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  408. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  409. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  410. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  411. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  412. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  413. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/conftest.py +0 -0
  414. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/board-pipeline-basic.json +0 -0
  415. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  416. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  417. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  418. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  419. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/all_pass.json +0 -0
  420. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  421. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/mixed_fail.json +0 -0
  422. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  423. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  424. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/skip.json +0 -0
  425. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/playwright/truncated.json +0 -0
  426. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  427. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  428. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  429. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  430. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  431. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  432. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  433. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  434. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_acceptance.py +0 -0
  435. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_acceptance_drivers.py +0 -0
  436. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent.py +0 -0
  437. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_api_error.py +0 -0
  438. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_app.py +0 -0
  439. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_branch_base.py +0 -0
  440. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_branch_capture.py +0 -0
  441. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_config_free_1712.py +0 -0
  442. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_deploy_units_endpoint.py +0 -0
  443. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_dirty_worktree.py +0 -0
  444. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  445. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_graph_self_heal.py +0 -0
  446. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_health_h3.py +0 -0
  447. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_idle_restart.py +0 -0
  448. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_push_failure.py +0 -0
  449. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_reap.py +0 -0
  450. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_repos_and_pull.py +0 -0
  451. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_restart_services_endpoint.py +0 -0
  452. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_skills_self_heal.py +0 -0
  453. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_startup_diagnostics.py +0 -0
  454. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_update.py +0 -0
  455. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_update_bluegreen.py +0 -0
  456. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_usage_limit.py +0 -0
  457. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_agent_zero_commit.py +0 -0
  458. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ambient_home_isolation.py +0 -0
  459. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_approve_reject_plan.py +0 -0
  460. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_approve_usage_gate.py +0 -0
  461. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_approved_work_2532.py +0 -0
  462. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_assignment_already_recorded_daemon.py +0 -0
  463. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_audit_log.py +0 -0
  464. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_audit_outcome.py +0 -0
  465. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_audit_query.py +0 -0
  466. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_auto_loop.py +0 -0
  467. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_auto_release_publish_2035.py +0 -0
  468. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_base_checkout_restore.py +0 -0
  469. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_block_log.py +0 -0
  470. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_cap_762.py +0 -0
  471. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_fixture.py +0 -0
  472. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_read_path.py +0 -0
  473. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_service.py +0 -0
  474. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_state.py +0 -0
  475. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_board_wire.py +0 -0
  476. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_brain.py +0 -0
  477. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_branch_model.py +0 -0
  478. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_bug_intake.py +0 -0
  479. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_build_worker_image_env_update.py +0 -0
  480. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cargo_cache.py +0 -0
  481. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_check_gh_argv_containment.py +0 -0
  482. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ci_acceptance_gate_1950.py +0 -0
  483. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ci_fix.py +0 -0
  484. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ci_gitlab.py +0 -0
  485. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ci_parity_2091.py +0 -0
  486. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_ci_store.py +0 -0
  487. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_claim.py +0 -0
  488. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_acceptance.py +0 -0
  489. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_assign.py +0 -0
  490. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  491. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_assign_interactive_remote.py +0 -0
  492. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_assign_provider.py +0 -0
  493. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  494. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_audit.py +0 -0
  495. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_chat_continue.py +0 -0
  496. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_decide.py +0 -0
  497. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_diagnose_config_provenance.py +0 -0
  498. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_diagnose_forge_availability.py +0 -0
  499. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_diagnose_graph.py +0 -0
  500. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_diagnose_self.py +0 -0
  501. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_doctor.py +0 -0
  502. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_doctor_config_free_1801.py +0 -0
  503. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  504. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_drive.py +0 -0
  505. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_escalate.py +0 -0
  506. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_fix_headless_review.py +0 -0
  507. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_gate_a.py +0 -0
  508. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_install_drift.py +0 -0
  509. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_install_skills.py +0 -0
  510. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_issue_create_label.py +0 -0
  511. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_issue_reopen.py +0 -0
  512. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_merge.py +0 -0
  513. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_assign.py +0 -0
  514. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_capture.py +0 -0
  515. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_chat_add_child.py +0 -0
  516. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_dispatch.py +0 -0
  517. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_gate_b.py +0 -0
  518. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_gate_c.py +0 -0
  519. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_order.py +0 -0
  520. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  521. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_milestone_ship.py +0 -0
  522. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_network.py +0 -0
  523. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_new_issue_chat.py +0 -0
  524. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_plans.py +0 -0
  525. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_portal.py +0 -0
  526. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_pull_artifact.py +0 -0
  527. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_queue.py +0 -0
  528. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_reattach_sessions.py +0 -0
  529. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_refine_board.py +0 -0
  530. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_release_preflight.py +0 -0
  531. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_release_propagate.py +0 -0
  532. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_repo_2220.py +0 -0
  533. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_scorecard.py +0 -0
  534. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_set_review_findings.py +0 -0
  535. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_advisory_terminal.py +0 -0
  536. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_merge_queue.py +0 -0
  537. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_provider.py +0 -0
  538. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_review_finalizing.py +0 -0
  539. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_test_failed_tag.py +0 -0
  540. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_status_usage_limit.py +0 -0
  541. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_sync_comments_873.py +0 -0
  542. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_test_plan.py +0 -0
  543. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_track.py +0 -0
  544. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_tui_update.py +0 -0
  545. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cli_wait.py +0 -0
  546. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_client_base_install.py +0 -0
  547. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_comments.py +0 -0
  548. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_completion_summary.py +0 -0
  549. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config.py +0 -0
  550. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config_acceptance.py +0 -0
  551. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config_audit.py +0 -0
  552. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config_pricing.py +0 -0
  553. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  554. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_config_usage_gate.py +0 -0
  555. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_conflict_fix.py +0 -0
  556. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_conflict_fix_semantic.py +0 -0
  557. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_test.py +0 -0
  558. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_test_runner_baseline.py +0 -0
  559. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_test_runner_populated_home.py +0 -0
  560. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_test_runner_routing.py +0 -0
  561. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_test_runner_toolchain.py +0 -0
  562. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coord_web_sse_restart_live.py +0 -0
  563. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_coordinator_machine.py +0 -0
  564. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_cross_platform_imports.py +0 -0
  565. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dashboard.py +0 -0
  566. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dashboard_fixture.py +0 -0
  567. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dashboard_terminal.py +0 -0
  568. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dashboard_terminal_live.py +0 -0
  569. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_db.py +0 -0
  570. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dead_end.py +0 -0
  571. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_decomposition_chat.py +0 -0
  572. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_coord_db_backup.py +0 -0
  573. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_coord_web_dist.py +0 -0
  574. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_coord_web_rollback.py +0 -0
  575. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_drive_queue_unit.py +0 -0
  576. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_manifest.py +0 -0
  577. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_notify_unit.py +0 -0
  578. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_units_lane.py +0 -0
  579. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deploy_web_unit.py +0 -0
  580. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_deps.py +0 -0
  581. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_diagnose.py +0 -0
  582. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dispatch.py +0 -0
  583. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dispatch_target_validation.py +0 -0
  584. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_dist_name.py +0 -0
  585. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_done_housekeeping.py +0 -0
  586. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_drive_state.py +0 -0
  587. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_drive_tmux.py +0 -0
  588. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_epic_up_capability_detection.py +0 -0
  589. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  590. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_epic_up_image_provenance.py +0 -0
  591. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_errors.py +0 -0
  592. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_events.py +0 -0
  593. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_failure_class.py +0 -0
  594. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_filelock.py +0 -0
  595. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  596. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_fix_of_force_override.py +0 -0
  597. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_fleet_config_health.py +0 -0
  598. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_fleet_health_probes.py +0 -0
  599. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_fleet_health_snapshot.py +0 -0
  600. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_forge_availability.py +0 -0
  601. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_freshness.py +0 -0
  602. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gate_a.py +0 -0
  603. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gate_b.py +0 -0
  604. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gate_snapshot_staleness.py +0 -0
  605. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gates.py +0 -0
  606. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  607. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_gen_mock_index.py +0 -0
  608. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_generated_types_fixture.py +0 -0
  609. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_github_ops.py +0 -0
  610. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_goal.py +0 -0
  611. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_graph_health.py +0 -0
  612. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_graph_selfheal_absent_2237.py +0 -0
  613. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_handoff.py +0 -0
  614. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_checks.py +0 -0
  615. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_cli.py +0 -0
  616. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_cli_graph.py +0 -0
  617. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_config.py +0 -0
  618. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_context.py +0 -0
  619. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_coord_web_ci_pin.py +0 -0
  620. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_deploy_lane_facts.py +0 -0
  621. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_incident_regression.py +0 -0
  622. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_pypi.py +0 -0
  623. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_registry.py +0 -0
  624. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_timer_active.py +0 -0
  625. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_toolchain.py +0 -0
  626. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_unit_drift.py +0 -0
  627. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_health_unit_enablement.py +0 -0
  628. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_hooks.py +0 -0
  629. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_human_attended_437.py +0 -0
  630. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_init.py +0 -0
  631. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_integration.py +0 -0
  632. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_briefing_echo.py +0 -0
  633. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_pane_log_2541.py +0 -0
  634. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_prefill_state.py +0 -0
  635. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_session_relaunch.py +0 -0
  636. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_test_verdict_backstop.py +0 -0
  637. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_token_attribution.py +0 -0
  638. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_interactive_worktree.py +0 -0
  639. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_issue_store_seam.py +0 -0
  640. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_liveness_auditor.py +0 -0
  641. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_liveness_notify.py +0 -0
  642. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_machine_pause.py +0 -0
  643. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_merge_queue.py +0 -0
  644. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_merge_verify.py +0 -0
  645. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_milestone_chat.py +0 -0
  646. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_milestone_dispatch.py +0 -0
  647. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_milestone_gate.py +0 -0
  648. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_milestone_order.py +0 -0
  649. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_milestone_seam.py +0 -0
  650. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_mock_author.py +0 -0
  651. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_model_tiering.py +0 -0
  652. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_models.py +0 -0
  653. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_models_config_labels.py +0 -0
  654. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_needs_attention.py +0 -0
  655. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_network.py +0 -0
  656. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_new_issue_chat.py +0 -0
  657. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_next_release_tag.py +0 -0
  658. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_node_shim.py +0 -0
  659. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_baseline.py +0 -0
  660. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_collect.py +0 -0
  661. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_config.py +0 -0
  662. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_drive_seam.py +0 -0
  663. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notifier_quiet_hours.py +0 -0
  664. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_notify_drain.py +0 -0
  665. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_openapi.py +0 -0
  666. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_operational_defaults.py +0 -0
  667. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_overlap_fence.py +0 -0
  668. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_overlap_predict.py +0 -0
  669. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_packaged_deploy_units.py +0 -0
  670. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_parentage.py +0 -0
  671. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_paste_landed.py +0 -0
  672. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_pipeline.py +0 -0
  673. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_plan_followup_approve_plan_command.py +0 -0
  674. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_plan_followup_pr_command.py +0 -0
  675. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_plan_followup_review_command.py +0 -0
  676. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_plan_only.py +0 -0
  677. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_plan_parser.py +0 -0
  678. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_platform_paths.py +0 -0
  679. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_portal_bridge.py +0 -0
  680. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_portal_config.py +0 -0
  681. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_portal_store.py +0 -0
  682. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_portal_sync.py +0 -0
  683. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_pr_body_lint.py +0 -0
  684. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_prereqs.py +0 -0
  685. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_production_db_guard.py +0 -0
  686. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_progress.py +0 -0
  687. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_provider_seam.py +0 -0
  688. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_providers.py +0 -0
  689. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_providers_config_labels.py +0 -0
  690. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_providers_pty.py +0 -0
  691. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_quiet_hours.py +0 -0
  692. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_quiet_hours_store_2146.py +0 -0
  693. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reap_merged_sessions.py +0 -0
  694. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reap_stale_interactive_tick.py +0 -0
  695. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile.py +0 -0
  696. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_branch.py +0 -0
  697. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_completions.py +0 -0
  698. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_merges.py +0 -0
  699. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_no_agent_record.py +0 -0
  700. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_tick.py +0 -0
  701. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reconcile_usage_limit_done.py +0 -0
  702. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_refine_chat.py +0 -0
  703. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_cordon_2101.py +0 -0
  704. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  705. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_cordon_deadlock_2240.py +0 -0
  706. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_cordon_stuck_2490.py +0 -0
  707. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_roll_window_handoff.py +0 -0
  708. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_unified_1242.py +0 -0
  709. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_verify.py +0 -0
  710. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_release_window.py +0 -0
  711. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_remote_auto_prune.py +0 -0
  712. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_remote_interactive_reaper.py +0 -0
  713. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_repo_edit_2220.py +0 -0
  714. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_repo_graph_fleet_2237.py +0 -0
  715. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_repo_onboard_2220.py +0 -0
  716. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_report_result_push.py +0 -0
  717. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_reports.py +0 -0
  718. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_retry.py +0 -0
  719. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_retry_advisory_1606.py +0 -0
  720. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_retry_type_1636.py +0 -0
  721. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_revalidate.py +0 -0
  722. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review.py +0 -0
  723. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_end_review_without_verdict.py +0 -0
  724. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_parse_failure_diagnostic.py +0 -0
  725. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_reaffirm.py +0 -0
  726. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_state.py +0 -0
  727. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_verdict_backstop.py +0 -0
  728. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_verdict_override_audit.py +0 -0
  729. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_verdict_relay.py +0 -0
  730. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_review_zero_commits.py +0 -0
  731. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_scoped_review_wiring.py +0 -0
  732. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_scorecard.py +0 -0
  733. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_self_health.py +0 -0
  734. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_serve.py +0 -0
  735. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_serve_app_board_trim.py +0 -0
  736. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_session.py +0 -0
  737. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_slice_issue_attribution.py +0 -0
  738. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_smoke.py +0 -0
  739. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_smoke_live_checkout_restore.py +0 -0
  740. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_smoke_workflow.py +0 -0
  741. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_spend_ceiling.py +0 -0
  742. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_spend_ceiling_coordinator.py +0 -0
  743. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_split.py +0 -0
  744. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_split_work.py +0 -0
  745. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_stage_projection.py +0 -0
  746. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_stalled_pipeline.py +0 -0
  747. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_state.py +0 -0
  748. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_state_review_findings_daemon.py +0 -0
  749. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_status_fleet_footer.py +0 -0
  750. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_stop_1567.py +0 -0
  751. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_stuck.py +0 -0
  752. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_terminal_command.py +0 -0
  753. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_author.py +0 -0
  754. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_chat.py +0 -0
  755. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_orchestrator.py +0 -0
  756. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_report.py +0 -0
  757. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_verdict_parsing.py +0 -0
  758. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_test_verdict_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_thin_client_board_audit.py +0 -0
  760. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_thin_client_config_load_1080.py +0 -0
  761. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_thin_client_daemon_routing_906.py +0 -0
  762. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_tmux_host.py +0 -0
  763. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_tmux_session.py +0 -0
  764. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_transcript_floor.py +0 -0
  765. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_usage.py +0 -0
  766. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_usage_limits.py +0 -0
  767. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_usage_rollup.py +0 -0
  768. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_venv_live_install_2121.py +0 -0
  769. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_version_single_source.py +0 -0
  770. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_watch.py +0 -0
  771. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  772. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worker_events.py +0 -0
  773. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worker_image_pin_sync.py +0 -0
  774. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worker_safety.py +0 -0
  775. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worker_test_scoping.py +0 -0
  776. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worktree.py +0 -0
  777. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  778. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/Cargo.lock +0 -0
  779. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/Cargo.toml +0 -0
  780. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/cargo-config-local-quadraui.toml.example +0 -0
  781. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/approved.rs +0 -0
  782. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/audit.rs +0 -0
  783. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/chat.rs +0 -0
  784. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/data.rs +0 -0
  785. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/dialogs.rs +0 -0
  786. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/doc_tabs.rs +0 -0
  787. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.238 → code_coordinator-0.5.239}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.238 → 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.238
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.238
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.238",
2
+ "tag": "0.5.239",
3
3
  "distance": 0,
4
- "node": "g8d13a39e25627c1a4242ac04e7c279023d414a99",
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",