code-coordinator 0.5.267__tar.gz → 0.5.269__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 (873) hide show
  1. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/drive_queue.py +113 -9
  5. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/release.py +71 -5
  6. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive.py +117 -8
  7. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive_queue.py +60 -9
  8. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive_state.py +25 -0
  9. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_propagate.py +31 -0
  10. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_window.py +53 -0
  11. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive.py +65 -0
  12. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue.py +17 -0
  13. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_state.py +38 -0
  14. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_propagate_threshold.py +56 -0
  15. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_roll_window_handoff.py +93 -0
  16. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/board.md +0 -0
  17. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/complete-session.md +0 -0
  18. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/coordinator.md +0 -0
  19. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/_lib.sh +0 -0
  20. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-checkout +0 -0
  21. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-commit +0 -0
  22. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-merge +0 -0
  23. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/coord-ci-acceptance.yml +0 -0
  25. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/auto-release.yml +0 -0
  26. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/cargo-test.yml +0 -0
  27. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/publish.yml +0 -0
  28. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/release-tui.yml +0 -0
  29. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.gitignore +0 -0
  31. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/GOAL.md +0 -0
  33. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/LICENSE +0 -0
  34. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/README.md +0 -0
  36. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/SOURCES.txt +0 -0
  37. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_file_list.json +0 -0
  41. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/top_level.txt +0 -0
  42. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/__init__.py +0 -0
  43. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/_board_mapping.py +0 -0
  44. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/acceptance.py +0 -0
  45. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/block_log.py +0 -0
  56. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_bool_guard.py +0 -0
  57. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_fix.py +0 -0
  65. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_github.py +0 -0
  66. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_gitlab.py +0 -0
  67. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/cli.py +0 -0
  70. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/client.py +0 -0
  71. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/__init__.py +0 -0
  72. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/_common.py +0 -0
  73. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/acceptance.py +0 -0
  74. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/agent_ops.py +0 -0
  75. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/audit.py +0 -0
  76. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/chat.py +0 -0
  77. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/gate_a.py +0 -0
  81. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/repo.py +0 -0
  91. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/report.py +0 -0
  92. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/review.py +0 -0
  93. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/scorecard.py +0 -0
  94. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/sessions.py +0 -0
  95. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/setup.py +0 -0
  96. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/status.py +0 -0
  97. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/terminal.py +0 -0
  98. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/test_gate.py +0 -0
  99. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/tui.py +0 -0
  100. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/comments.py +0 -0
  101. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/config.py +0 -0
  102. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/config_reload.py +0 -0
  103. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/confirm_test.py +0 -0
  104. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/db.py +0 -0
  112. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/decomposition_chat.py +0 -0
  114. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/README.md +0 -0
  115. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-agent.service +0 -0
  116. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.service +0 -0
  117. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.sh +0 -0
  118. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.timer +0 -0
  119. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.service +0 -0
  120. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.timer +0 -0
  121. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-failure-notify.service +0 -0
  122. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.service +0 -0
  123. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  124. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-notify.service +0 -0
  125. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-notify.timer +0 -0
  126. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.service +0 -0
  127. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.timer +0 -0
  128. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.service +0 -0
  129. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.timer +0 -0
  130. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-serve.service +0 -0
  131. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.service +0 -0
  132. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.timer +0 -0
  133. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web.service +0 -0
  134. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy_manifest.py +0 -0
  135. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy_units.py +0 -0
  136. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deps.py +0 -0
  137. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/diagnose.py +0 -0
  138. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dispatch.py +0 -0
  139. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dist_name.py +0 -0
  140. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/events.py +0 -0
  141. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/failure_class.py +0 -0
  142. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/filelock.py +0 -0
  143. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/fleet_config_health.py +0 -0
  144. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/forge_availability.py +0 -0
  145. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/freshness.py +0 -0
  146. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_a.py +0 -0
  147. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_b.py +0 -0
  148. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_snapshot.py +0 -0
  149. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gates.py +0 -0
  150. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/github_ops.py +0 -0
  151. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/github_throttle.py +0 -0
  152. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/goal.py +0 -0
  153. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/graph_health.py +0 -0
  154. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/__init__.py +0 -0
  155. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/aggregate.py +0 -0
  156. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/__init__.py +0 -0
  157. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/issues_sync_staleness.py +0 -0
  171. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/plan_usage.py +0 -0
  172. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/release_cordon.py +0 -0
  173. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/repo_state.py +0 -0
  174. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/spawned_coord.py +0 -0
  175. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/stalled_pipeline.py +0 -0
  176. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/issues_sync_status.py +0 -0
  194. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/liveness_auditor.py +0 -0
  195. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/machine_pause.py +0 -0
  196. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/merge_queue.py +0 -0
  197. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_chat.py +0 -0
  198. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_dispatch.py +0 -0
  199. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_gate.py +0 -0
  200. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_order.py +0 -0
  201. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/mock_author.py +0 -0
  202. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/models.py +0 -0
  203. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/network.py +0 -0
  204. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/new_issue_chat.py +0 -0
  205. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/__init__.py +0 -0
  206. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/baseline.py +0 -0
  207. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/cli.py +0 -0
  208. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/collect.py +0 -0
  209. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/digest.py +0 -0
  210. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/models.py +0 -0
  211. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/predicate.py +0 -0
  212. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/service.py +0 -0
  213. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/store.py +0 -0
  214. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/transport.py +0 -0
  215. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notify.py +0 -0
  216. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/openapi.py +0 -0
  217. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/overlap_fence.py +0 -0
  218. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/overlap_predict.py +0 -0
  219. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/parentage.py +0 -0
  220. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/parentage_github.py +0 -0
  221. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/pipeline.py +0 -0
  222. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/plan_parser.py +0 -0
  223. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/plans.py +0 -0
  224. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/platform_paths.py +0 -0
  225. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_bridge.py +0 -0
  226. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_store.py +0 -0
  227. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_sync.py +0 -0
  228. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/pr_body_lint.py +0 -0
  229. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/prereqs.py +0 -0
  230. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/progress.py +0 -0
  231. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/__init__.py +0 -0
  232. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/base.py +0 -0
  233. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/claude.py +0 -0
  234. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/claude_pty.py +0 -0
  235. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/opencode.py +0 -0
  236. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/queue_diagnose.py +0 -0
  237. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reconcile.py +0 -0
  238. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reconcile_tick.py +0 -0
  239. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/refine_chat.py +0 -0
  240. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_cordon.py +0 -0
  241. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_propagate.py +0 -0
  242. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_verify.py +0 -0
  243. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_window.py +0 -0
  244. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/repo_edit.py +0 -0
  245. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/repo_onboard.py +0 -0
  246. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reports.py +0 -0
  247. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/revalidate.py +0 -0
  248. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/review.py +0 -0
  249. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/scorecard.py +0 -0
  250. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/self_health.py +0 -0
  251. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/serve_app.py +0 -0
  252. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/release-now/SKILL.md +0 -0
  259. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/state.py +0 -0
  268. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_author.py +0 -0
  269. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_chat.py +0 -0
  270. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_orchestrator.py +0 -0
  271. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_report.py +0 -0
  272. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/tui_release.py +0 -0
  273. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage.py +0 -0
  274. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage_limits.py +0 -0
  275. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage_rollup.py +0 -0
  276. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/worker_events.py +0 -0
  277. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coordinator.example.yml +0 -0
  278. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-agent.service +0 -0
  279. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.service +0 -0
  280. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.sh +0 -0
  281. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.timer +0 -0
  282. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-drive-queue.service +0 -0
  283. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-drive-queue.timer +0 -0
  284. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-failure-notify.service +0 -0
  285. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-failure-notify.sh +0 -0
  286. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.service +0 -0
  287. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.timer +0 -0
  288. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-notify.service +0 -0
  289. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-notify.timer +0 -0
  290. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-propagate.service +0 -0
  291. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-propagate.timer +0 -0
  292. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-window.service +0 -0
  293. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-window.timer +0 -0
  294. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-serve.service +0 -0
  295. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.service +0 -0
  296. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.sh +0 -0
  297. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.timer +0 -0
  298. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-rollback.sh +0 -0
  299. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web.service +0 -0
  300. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/node-shim.sh +0 -0
  301. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  302. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_CI.md +0 -0
  303. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_DIST.md +0 -0
  304. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/AGENT_OPERATIONS.md +0 -0
  305. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ARCHITECTURE.md +0 -0
  306. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ARCH_SECURITY_GATES.md +0 -0
  307. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/COCKPIT.md +0 -0
  308. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CONTROL_CENTER.md +0 -0
  309. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/COST_DISCIPLINE.md +0 -0
  310. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CROSS_PLATFORM.md +0 -0
  311. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CUSTOMER_FACING_APPS.md +0 -0
  312. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CUSTOMER_PORTAL.md +0 -0
  313. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/DRIVE_QUEUE.md +0 -0
  314. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/EPHEMERAL_WORKERS.md +0 -0
  315. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/FORGE_MIGRATION.md +0 -0
  316. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/GRAPHIFY_SETUP.md +0 -0
  317. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ISSUE_GUIDANCE.md +0 -0
  318. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/MAC_MINI.md +0 -0
  319. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  320. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/NOTIFIER.md +0 -0
  321. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPENCODE_VERIFICATION.md +0 -0
  322. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPERATING_GOTCHAS.md +0 -0
  323. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPERATOR_GUIDES.md +0 -0
  324. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ORACLE_LOOP.md +0 -0
  325. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PHONE_WEBAPP.md +0 -0
  326. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PIPELINE_V2.md +0 -0
  327. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PLATFORM_EVOLUTION.md +0 -0
  328. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/SECOND_BACKEND.md +0 -0
  329. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/STORE_SERVICE.md +0 -0
  330. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  331. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/WEB_CONTROL_CENTER.md +0 -0
  332. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/WSL_WINDOWS_WORKER.md +0 -0
  333. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/README.md +0 -0
  334. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/_tokens.css +0 -0
  335. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/issue-detail.html +0 -0
  336. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-narrow.html +0 -0
  337. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-wide.html +0 -0
  338. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/graphify-out/.gitignore +0 -0
  339. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/install-agent.sh +0 -0
  340. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/pyproject.toml +0 -0
  341. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/audit_review_verdict_overrides.py +0 -0
  342. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  343. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/build-worker-image.sh +0 -0
  344. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/coordinator-machine.py +0 -0
  345. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/epic-down.sh +0 -0
  346. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/epic-up.sh +0 -0
  347. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/preflight.sh +0 -0
  348. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/provision-worker.sh +0 -0
  349. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  350. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  351. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/verify-github-token.sh +0 -0
  352. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/check_gh_argv_containment.py +0 -0
  353. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/codegen.py +0 -0
  354. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/coord-test-runner.sh +0 -0
  355. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/coord-venv-rollback.sh +0 -0
  356. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/drive-batch.sh +0 -0
  357. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/fleet_watchdog.py +0 -0
  358. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/gen_board_fixture.py +0 -0
  359. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/gen_mock_index.py +0 -0
  360. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/next_release_tag.py +0 -0
  361. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/run_tests_in_populated_home.sh +0 -0
  362. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/run_tests_without_gh.sh +0 -0
  363. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/smoke_437_interactive.py +0 -0
  364. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_878_review_capture.py +0 -0
  365. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_release_published.py +0 -0
  366. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_release_wheel.py +0 -0
  367. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/setup.cfg +0 -0
  368. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/SMOKE_SET.md +0 -0
  369. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/__init__.py +0 -0
  370. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  371. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/contract.md +0 -0
  372. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/manifest.yml +0 -0
  373. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  374. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  375. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  376. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  377. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/conftest.py +0 -0
  378. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/contract.md +0 -0
  379. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/manifest.yml +0 -0
  380. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  381. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  382. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/contract.md +0 -0
  383. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/manifest.yml +0 -0
  384. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  385. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  386. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  387. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  388. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  389. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  390. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  391. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  392. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  393. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  394. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/contract.md +0 -0
  395. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  396. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  397. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/manifest.yml +0 -0
  398. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  399. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/tsconfig.json +0 -0
  400. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  401. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  402. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  403. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/contract.md +0 -0
  404. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  405. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/manifest.yml +0 -0
  406. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  407. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  408. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  409. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  410. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  411. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  412. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  413. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  414. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  415. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  416. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  417. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  418. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/contract.md +0 -0
  419. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  420. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.yml +0 -0
  421. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  422. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  423. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  424. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  425. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  426. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  427. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  428. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/conftest.py +0 -0
  429. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-basic.json +0 -0
  430. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  431. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  432. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  433. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  434. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/all_pass.json +0 -0
  435. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  436. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/mixed_fail.json +0 -0
  437. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  438. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  439. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/skip.json +0 -0
  440. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/truncated.json +0 -0
  441. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  442. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  443. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  444. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  445. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  446. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  447. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  448. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_acceptance.py +0 -0
  450. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_acceptance_drivers.py +0 -0
  451. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent.py +0 -0
  452. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_api_error.py +0 -0
  453. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_app.py +0 -0
  454. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_branch_base.py +0 -0
  455. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_branch_capture.py +0 -0
  456. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_config_free_1712.py +0 -0
  457. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_deploy_units_endpoint.py +0 -0
  458. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_dirty_worktree.py +0 -0
  459. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  460. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_graph_self_heal.py +0 -0
  461. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_health_h3.py +0 -0
  462. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_idle_restart.py +0 -0
  463. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_push_failure.py +0 -0
  464. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_reap.py +0 -0
  465. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_repos_and_pull.py +0 -0
  466. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_restart_services_endpoint.py +0 -0
  467. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_skills_self_heal.py +0 -0
  468. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_startup_diagnostics.py +0 -0
  469. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_update.py +0 -0
  470. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_update_bluegreen.py +0 -0
  471. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_usage_limit.py +0 -0
  472. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_zero_commit.py +0 -0
  473. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ambient_home_isolation.py +0 -0
  474. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_dependency_busy_2804.py +0 -0
  475. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_reject_plan.py +0 -0
  476. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_usage_gate.py +0 -0
  477. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approved_work_2532.py +0 -0
  478. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_assignment_already_recorded_daemon.py +0 -0
  479. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_log.py +0 -0
  480. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_outcome.py +0 -0
  481. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_query.py +0 -0
  482. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_auto_loop.py +0 -0
  483. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_auto_release_publish_2035.py +0 -0
  484. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_base_checkout_restore.py +0 -0
  485. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_block_log.py +0 -0
  486. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_cap_762.py +0 -0
  487. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_fixture.py +0 -0
  488. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_read_path.py +0 -0
  489. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_schema.py +0 -0
  490. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_service.py +0 -0
  491. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_state.py +0 -0
  492. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_wire.py +0 -0
  493. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_brain.py +0 -0
  494. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_branch_model.py +0 -0
  495. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_bug_intake.py +0 -0
  496. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_build_worker_image_env_update.py +0 -0
  497. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cargo_cache.py +0 -0
  498. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_check_gh_argv_containment.py +0 -0
  499. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_acceptance_gate_1950.py +0 -0
  500. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_fix.py +0 -0
  501. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_gitlab.py +0 -0
  502. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_parity_2091.py +0 -0
  503. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_store.py +0 -0
  504. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_claim.py +0 -0
  505. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_claude_md_budget.py +0 -0
  506. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_acceptance.py +0 -0
  507. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign.py +0 -0
  508. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  509. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_remote.py +0 -0
  510. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_provider.py +0 -0
  511. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  512. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_audit.py +0 -0
  513. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_chat_continue.py +0 -0
  514. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_decide.py +0 -0
  515. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_config_provenance.py +0 -0
  516. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_forge_availability.py +0 -0
  517. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_graph.py +0 -0
  518. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_self.py +0 -0
  519. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor.py +0 -0
  520. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_free_1801.py +0 -0
  521. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  522. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_drive.py +0 -0
  523. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_drive_queue.py +0 -0
  524. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_escalate.py +0 -0
  525. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_fix_headless_review.py +0 -0
  526. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_gate_a.py +0 -0
  527. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_install_drift.py +0 -0
  528. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_install_skills.py +0 -0
  529. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_comment.py +0 -0
  530. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_create_label.py +0 -0
  531. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_reopen.py +0 -0
  532. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_view_list.py +0 -0
  533. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_merge.py +0 -0
  534. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_assign.py +0 -0
  535. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_capture.py +0 -0
  536. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_chat_add_child.py +0 -0
  537. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_dispatch.py +0 -0
  538. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_b.py +0 -0
  539. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_c.py +0 -0
  540. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_order.py +0 -0
  541. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  542. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_ship.py +0 -0
  543. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_network.py +0 -0
  544. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_new_issue_chat.py +0 -0
  545. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_plans.py +0 -0
  546. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_portal.py +0 -0
  547. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_pr.py +0 -0
  548. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_pull_artifact.py +0 -0
  549. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_queue.py +0 -0
  550. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_reattach_sessions.py +0 -0
  551. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_refine_board.py +0 -0
  552. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_preflight.py +0 -0
  553. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_repo_2220.py +0 -0
  554. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  555. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_scorecard.py +0 -0
  556. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_set_review_findings.py +0 -0
  557. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_advisory_terminal.py +0 -0
  558. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_contested_tag.py +0 -0
  559. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_merge_queue.py +0 -0
  560. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_provider.py +0 -0
  561. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_review_finalizing.py +0 -0
  562. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_test_failed_tag.py +0 -0
  563. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_usage_limit.py +0 -0
  564. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_sync_comments_873.py +0 -0
  565. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_test_plan.py +0 -0
  566. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_track.py +0 -0
  567. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_tui_update.py +0 -0
  568. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_wait.py +0 -0
  569. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_client_base_install.py +0 -0
  570. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_commands_common.py +0 -0
  571. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_comments.py +0 -0
  572. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_completion_summary.py +0 -0
  573. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config.py +0 -0
  574. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_acceptance.py +0 -0
  575. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_audit.py +0 -0
  576. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_pricing.py +0 -0
  577. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  578. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_usage_gate.py +0 -0
  579. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_confirm_test.py +0 -0
  580. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_conflict_fix.py +0 -0
  581. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_conflict_fix_semantic.py +0 -0
  582. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  583. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test.py +0 -0
  584. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_baseline.py +0 -0
  585. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_populated_home.py +0 -0
  586. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_routing.py +0 -0
  587. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_toolchain.py +0 -0
  588. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_uat.py +0 -0
  589. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_web_sse_restart_live.py +0 -0
  590. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coordinator_machine.py +0 -0
  591. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cross_platform_imports.py +0 -0
  592. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dao.py +0 -0
  593. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard.py +0 -0
  594. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_fixture.py +0 -0
  595. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_terminal.py +0 -0
  596. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_terminal_live.py +0 -0
  597. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_db.py +0 -0
  598. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dead_end.py +0 -0
  599. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_decomposition_chat.py +0 -0
  600. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_db_backup.py +0 -0
  601. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_dist.py +0 -0
  602. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_rollback.py +0 -0
  603. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_drive_queue_unit.py +0 -0
  604. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_failure_notify_unit.py +0 -0
  605. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_manifest.py +0 -0
  606. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_notify_unit.py +0 -0
  607. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_units_lane.py +0 -0
  608. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_web_unit.py +0 -0
  609. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deps.py +0 -0
  610. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_diagnose.py +0 -0
  611. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dispatch.py +0 -0
  612. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dispatch_target_validation.py +0 -0
  613. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dist_name.py +0 -0
  614. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_done_housekeeping.py +0 -0
  615. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_blocked_rendering.py +0 -0
  616. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_launch_argv.py +0 -0
  617. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  618. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_roll_pending.py +0 -0
  619. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  620. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_tmux.py +0 -0
  621. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_capability_detection.py +0 -0
  622. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  623. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_image_provenance.py +0 -0
  624. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_errors.py +0 -0
  625. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_events.py +0 -0
  626. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_failure_class.py +0 -0
  627. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_filelock.py +0 -0
  628. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  629. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fix_of_force_override.py +0 -0
  630. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_config_health.py +0 -0
  631. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_health_probes.py +0 -0
  632. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_health_snapshot.py +0 -0
  633. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_watchdog.py +0 -0
  634. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_forge_availability.py +0 -0
  635. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_freshness.py +0 -0
  636. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_a.py +0 -0
  637. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_b.py +0 -0
  638. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_snapshot_staleness.py +0 -0
  639. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gates.py +0 -0
  640. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  641. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gen_mock_index.py +0 -0
  642. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_generated_rust_fixture.py +0 -0
  643. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_generated_types_fixture.py +0 -0
  644. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_github_ops.py +0 -0
  645. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_github_throttle.py +0 -0
  646. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_goal.py +0 -0
  647. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_graph_health.py +0 -0
  648. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_graph_selfheal_absent_2237.py +0 -0
  649. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_handoff.py +0 -0
  650. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_checks.py +0 -0
  651. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_cli.py +0 -0
  652. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_cli_graph.py +0 -0
  653. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_config.py +0 -0
  654. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_context.py +0 -0
  655. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_coord_web_ci_pin.py +0 -0
  656. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_deploy_lane_facts.py +0 -0
  657. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_fix.py +0 -0
  658. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_incident_regression.py +0 -0
  659. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_issues_sync_staleness.py +0 -0
  660. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_pypi.py +0 -0
  661. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_registry.py +0 -0
  662. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_release_cordon_probe.py +0 -0
  663. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_timer_active.py +0 -0
  664. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_toolchain.py +0 -0
  665. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_unit_drift.py +0 -0
  666. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_unit_enablement.py +0 -0
  667. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_hooks.py +0 -0
  668. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_human_attended_437.py +0 -0
  669. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_init.py +0 -0
  670. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_integration.py +0 -0
  671. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_briefing_echo.py +0 -0
  672. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_pane_log_2541.py +0 -0
  673. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_prefill_state.py +0 -0
  674. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_session_relaunch.py +0 -0
  675. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_test_verdict_backstop.py +0 -0
  676. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_token_attribution.py +0 -0
  677. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_worktree.py +0 -0
  678. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_issue_store_seam.py +0 -0
  679. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_issues_sync_status.py +0 -0
  680. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_liveness_auditor.py +0 -0
  681. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_liveness_notify.py +0 -0
  682. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_lock_contention_ratchet.py +0 -0
  683. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_machine_pause.py +0 -0
  684. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_merge_queue.py +0 -0
  685. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_merge_verify.py +0 -0
  686. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_chat.py +0 -0
  687. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_dispatch.py +0 -0
  688. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_gate.py +0 -0
  689. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_order.py +0 -0
  690. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_seam.py +0 -0
  691. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_mock_author.py +0 -0
  692. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_model_tiering.py +0 -0
  693. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_models.py +0 -0
  694. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_models_config_labels.py +0 -0
  695. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_needs_attention.py +0 -0
  696. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_network.py +0 -0
  697. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_new_issue_chat.py +0 -0
  698. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_next_release_tag.py +0 -0
  699. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_node_shim.py +0 -0
  700. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_baseline.py +0 -0
  701. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_cli.py +0 -0
  702. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_collect.py +0 -0
  703. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_config.py +0 -0
  704. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_drive_seam.py +0 -0
  705. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_isolation.py +0 -0
  706. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_predicate.py +0 -0
  707. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_quiet_hours.py +0 -0
  708. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_service.py +0 -0
  709. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notify.py +0 -0
  710. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notify_drain.py +0 -0
  711. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_openapi.py +0 -0
  712. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_operational_defaults.py +0 -0
  713. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_overlap_fence.py +0 -0
  714. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_overlap_predict.py +0 -0
  715. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_packaged_deploy_units.py +0 -0
  716. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_parentage.py +0 -0
  717. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_paste_landed.py +0 -0
  718. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  719. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_pipeline.py +0 -0
  720. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_approve_plan_command.py +0 -0
  721. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_pr_command.py +0 -0
  722. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_review_command.py +0 -0
  723. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_only.py +0 -0
  724. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_parser.py +0 -0
  725. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_platform_paths.py +0 -0
  726. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_bridge.py +0 -0
  727. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_config.py +0 -0
  728. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_store.py +0 -0
  729. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_sync.py +0 -0
  730. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_pr_body_lint.py +0 -0
  731. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_prereqs.py +0 -0
  732. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_production_db_guard.py +0 -0
  733. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_progress.py +0 -0
  734. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_provider_seam.py +0 -0
  735. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers.py +0 -0
  736. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers_config_labels.py +0 -0
  737. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers_pty.py +0 -0
  738. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_quiet_hours.py +0 -0
  739. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_quiet_hours_store_2146.py +0 -0
  740. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reap_merged_sessions.py +0 -0
  741. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reap_stale_interactive_tick.py +0 -0
  742. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile.py +0 -0
  743. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_branch.py +0 -0
  744. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_completions.py +0 -0
  745. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  746. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_merges.py +0 -0
  747. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_no_agent_record.py +0 -0
  748. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_tick.py +0 -0
  749. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_usage_limit_done.py +0 -0
  750. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_refine_chat.py +0 -0
  751. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_2101.py +0 -0
  752. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  753. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_deadlock_2240.py +0 -0
  754. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_stuck_2490.py +0 -0
  755. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_propagate.py +0 -0
  756. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_roll_between_legs_2854.py +0 -0
  757. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_unified_1242.py +0 -0
  758. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_verify.py +0 -0
  759. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_window.py +0 -0
  760. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_remote_auto_prune.py +0 -0
  761. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_remote_interactive_reaper.py +0 -0
  762. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_add.py +0 -0
  763. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_edit_2220.py +0 -0
  764. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_graph_fleet_2237.py +0 -0
  765. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_onboard_2220.py +0 -0
  766. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_report_result_push.py +0 -0
  767. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reports.py +0 -0
  768. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry.py +0 -0
  769. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry_advisory_1606.py +0 -0
  770. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry_type_1636.py +0 -0
  771. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_revalidate.py +0 -0
  772. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review.py +0 -0
  773. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_end_review_without_verdict.py +0 -0
  774. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_parse_failure_diagnostic.py +0 -0
  775. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_reaffirm.py +0 -0
  776. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_state.py +0 -0
  777. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_backstop.py +0 -0
  778. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_override_audit.py +0 -0
  779. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_relay.py +0 -0
  780. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_zero_commits.py +0 -0
  781. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_scoped_review_wiring.py +0 -0
  782. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_scorecard.py +0 -0
  783. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_self_health.py +0 -0
  784. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_serve.py +0 -0
  785. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_serve_app_board_trim.py +0 -0
  786. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_session.py +0 -0
  787. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_slice_issue_attribution.py +0 -0
  788. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke.py +0 -0
  789. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke_live_checkout_restore.py +0 -0
  790. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke_workflow.py +0 -0
  791. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_spend_ceiling.py +0 -0
  792. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_spend_ceiling_coordinator.py +0 -0
  793. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_split.py +0 -0
  794. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_split_work.py +0 -0
  795. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_sql_dialect.py +0 -0
  796. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stage_projection.py +0 -0
  797. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stalled_pipeline.py +0 -0
  798. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_state.py +0 -0
  799. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_state_review_findings_daemon.py +0 -0
  800. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_status_fleet_footer.py +0 -0
  801. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stop_1567.py +0 -0
  802. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_store_contract.py +0 -0
  803. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stuck.py +0 -0
  804. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  805. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_terminal_command.py +0 -0
  806. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_author.py +0 -0
  807. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_chat.py +0 -0
  808. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_orchestrator.py +0 -0
  809. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_report.py +0 -0
  810. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_verdict_parsing.py +0 -0
  811. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_verdict_transcript_floor.py +0 -0
  812. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_text_io_encoding_audit.py +0 -0
  813. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_board_audit.py +0 -0
  814. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_config_load_1080.py +0 -0
  815. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_daemon_routing_906.py +0 -0
  816. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_tmux_host.py +0 -0
  817. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_tmux_session.py +0 -0
  818. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_transcript_floor.py +0 -0
  819. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage.py +0 -0
  820. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage_limits.py +0 -0
  821. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage_rollup.py +0 -0
  822. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_venv_live_install_2121.py +0 -0
  823. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_version_single_source.py +0 -0
  824. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_watch.py +0 -0
  825. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  826. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_env_venv_isolation.py +0 -0
  827. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_events.py +0 -0
  828. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_image_pin_sync.py +0 -0
  829. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_safety.py +0 -0
  830. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_test_scoping.py +0 -0
  831. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worktree.py +0 -0
  832. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  833. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/Cargo.lock +0 -0
  834. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/Cargo.toml +0 -0
  835. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/cargo-config-local-quadraui.toml.example +0 -0
  836. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/approved.rs +0 -0
  837. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/audit.rs +0 -0
  838. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/chat.rs +0 -0
  839. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/data.rs +0 -0
  840. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/dialogs.rs +0 -0
  841. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/doc_tabs.rs +0 -0
  842. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/drive.rs +0 -0
  843. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/drive_queue.rs +0 -0
  844. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/escalation.rs +0 -0
  845. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/events.rs +0 -0
  846. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fixtures.rs +0 -0
  847. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_health.rs +0 -0
  848. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_sessions.rs +0 -0
  849. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_terminals.rs +0 -0
  850. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/format.rs +0 -0
  851. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/milestone_dag.rs +0 -0
  852. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/mod.rs +0 -0
  853. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/msv.rs +0 -0
  854. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/pipeline.rs +0 -0
  855. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/plans.rs +0 -0
  856. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/render.rs +0 -0
  857. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/reports.rs +0 -0
  858. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/sessions.rs +0 -0
  859. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/settings_ui.rs +0 -0
  860. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/sidebar.rs +0 -0
  861. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/terminal.rs +0 -0
  862. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/tests.rs +0 -0
  863. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/types/generated.rs +0 -0
  864. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/types.rs +0 -0
  865. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/workspace.rs +0 -0
  866. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/bin/gtk.rs +0 -0
  867. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/commands.rs +0 -0
  868. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/lib.rs +0 -0
  869. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/main.rs +0 -0
  870. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/settings.rs +0 -0
  871. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/tests/acceptance.rs +0 -0
  872. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/tests/cli.rs +0 -0
  873. {code_coordinator-0.5.267 → code_coordinator-0.5.269}/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.267
3
+ Version: 0.5.269
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.267
3
+ Version: 0.5.269
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.267",
2
+ "tag": "0.5.269",
3
3
  "distance": 0,
4
- "node": "g1fa630fb3cebe560405cb33c1b2ce1e3fed742a4",
4
+ "node": "gfb3b3633ce05c303a5c7243c93486fab73020f5e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -2587,6 +2587,68 @@ def clear_roll_pending() -> None:
2587
2587
  pass
2588
2588
 
2589
2589
 
2590
+ def _roll_pending_may_fire(*, occupied: int, now: float, queue_rows) -> tuple[bool, str]:
2591
+ """Is it worth attempting to fire a pending roll THIS tick? (#2870 part 2)
2592
+
2593
+ #2587's original rule was ``occupied == 0`` — this tick's own
2594
+ reconciliation (`_reconcile_running`'s ``occupies`` verdict) found
2595
+ literally nothing left running. That rule never learned #2854: `coord
2596
+ release propagate`'s own quiescence check
2597
+ (:func:`coord.release_propagate.assess_quiescence`) treats a `running`
2598
+ drive-queue row with no LIVE assignment right now, past its settle
2599
+ window, as genuinely idle — the row just hasn't reached a terminal state
2600
+ yet (nothing has reconciled it to ``done``). This tick's own ``occupied``
2601
+ count has no such reading: a between-legs row launched on a different
2602
+ host reads ``unknown`` here (#1870 — this tick's local tmux check proves
2603
+ nothing about a row launched elsewhere) and stays charged, forever,
2604
+ against an ``occupied == 0`` bar it can never clear. The 2026-08-28
2605
+ incident this closes: `coord release propagate`, run directly, reported
2606
+ ``quiescent — nothing in flight`` (between-legs, past the settle window)
2607
+ for the SAME row this tick's own ``occupied`` reading was still counting
2608
+ — so the tick never even ATTEMPTED the roll `coord release propagate`
2609
+ would have accepted.
2610
+
2611
+ ``occupied == 0`` stays the cheap fast path — no extra board read. Only
2612
+ when it is nonzero does this re-derive the SAME between-legs/settle-
2613
+ window reading `coord release propagate` itself makes, from a fresh
2614
+ board fetch. This is an ADVISORY re-check, not the authoritative one:
2615
+ firing merely hands off to `coord-release-window.service`, which invokes
2616
+ `coord release propagate` for real (never `--force`) and simply defers
2617
+ again — costing nothing — if this read turns out to have been too
2618
+ optimistic. So there is no harm in checking, and every reason to: the
2619
+ alternative is a marker that can sit past its own between-legs row
2620
+ forever with `coord drive-queue status` reporting `alert: (none)` the
2621
+ whole time, because from the queue's own point of view nothing is wrong
2622
+ — it is waiting on a roll, exactly as designed.
2623
+
2624
+ *queue_rows* are the SAME raw `drive_queue` rows this tick already read
2625
+ (`coord.state.list_drive_queue()`) — reused rather than re-fetched, and
2626
+ passed straight through as `assess_quiescence`'s ``queue_entries``: that
2627
+ function reads the raw ``state``/``repo_name``/``issue_number`` columns,
2628
+ not `QueueEntry` or `BoardView`'s reduced shapes.
2629
+
2630
+ A board this cannot read degrades to "no, don't fire" (never raises) —
2631
+ the tick's own fail-closed abort already covers a board it cannot read
2632
+ for reconciliation; a re-check that itself cannot read the board must
2633
+ not provoke a fire it cannot justify.
2634
+ """
2635
+ if occupied == 0:
2636
+ return True, ""
2637
+ from coord import release_propagate as rp # noqa: PLC0415
2638
+
2639
+ try:
2640
+ payload = _fetch_board_payload()
2641
+ except Exception: # noqa: BLE001 — see docstring: fail closed, never raise
2642
+ return False, ""
2643
+ quiescence = rp.assess_quiescence(
2644
+ queue_entries=queue_rows,
2645
+ assignments=payload.get("assignments") or [],
2646
+ issues=payload.get("issues") or [],
2647
+ now=now,
2648
+ )
2649
+ return quiescence.quiescent, quiescence.reason
2650
+
2651
+
2590
2652
  def _fire_pending_roll(*, dry_run: bool = False) -> tuple[bool, str]:
2591
2653
  """Best-effort ``systemctl --user start --no-block
2592
2654
  coord-release-window.service`` (#2587 design point 3).
@@ -2954,16 +3016,22 @@ def _escalate_persistent_self_cordon(
2954
3016
  _write_self_cordon_state(state)
2955
3017
 
2956
3018
 
2957
- def _fetch_board_view() -> BoardView:
2958
- """Board + live drive sessions, typed.
3019
+ def _fetch_board_payload() -> dict:
3020
+ """The raw ``/board`` payload (+ standalone top-ups), untyped.
2959
3021
 
2960
- Raises whatever the fetch raised — the caller turns that into a fail-closed
2961
- abort. ``list_drive_sessions()`` is deliberately NOT allowed to fail the
2962
- tick: it returns ``[]`` when tmux is unavailable, and the board's
2963
- ``active_work`` signal still holds the capacity line in that case.
3022
+ Split out of :func:`_fetch_board_view` (#2870) so a caller that needs the
3023
+ RAW ``assignments``/``issues`` rows — not `BoardView`'s already-reduced
3024
+ per-issue facts — has one place to get them. :func:`coord.
3025
+ release_propagate.assess_quiescence` is exactly such a caller (#2870's
3026
+ between-legs settle-window re-check for the roll-pending fire condition,
3027
+ see :func:`_roll_pending_may_fire`): it reads raw assignment rows
3028
+ (``machine_name``/``dispatched_at``/``finished_at``) `BoardView` never
3029
+ carries at all.
3030
+
3031
+ Raises whatever the fetch raised — same fail-closed contract as before
3032
+ this split.
2964
3033
  """
2965
3034
  from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
2966
- from coord.drive import list_drive_sessions # noqa: PLC0415
2967
3035
  from coord.drive_state import BoardFetcher # noqa: PLC0415
2968
3036
 
2969
3037
  payload = BoardFetcher().fetch()
@@ -2986,6 +3054,20 @@ def _fetch_board_view() -> BoardView:
2986
3054
  top_up["merge_queue"] = _local_merge_queue_rows()
2987
3055
  if top_up:
2988
3056
  payload = {**payload, **top_up}
3057
+ return payload
3058
+
3059
+
3060
+ def _fetch_board_view() -> BoardView:
3061
+ """Board + live drive sessions, typed.
3062
+
3063
+ Raises whatever the fetch raised — the caller turns that into a fail-closed
3064
+ abort. ``list_drive_sessions()`` is deliberately NOT allowed to fail the
3065
+ tick: it returns ``[]`` when tmux is unavailable, and the board's
3066
+ ``active_work`` signal still holds the capacity line in that case.
3067
+ """
3068
+ from coord.drive import list_drive_sessions # noqa: PLC0415
3069
+
3070
+ payload = _fetch_board_payload()
2989
3071
  return build_board_view(payload, list_drive_sessions())
2990
3072
 
2991
3073
 
@@ -4382,7 +4464,12 @@ def drive_queue_tick(
4382
4464
  f"could not read the board — aborting without launching anything: {exc}"
4383
4465
  ) from None
4384
4466
 
4385
- entries = entries_from_rows(list_drive_queue())
4467
+ # #2870: the raw rows are kept alongside the typed `entries` — see
4468
+ # `_roll_pending_may_fire`'s `queue_rows` parameter, which needs the
4469
+ # untyped `state`/`repo_name`/`issue_number` shape
4470
+ # `coord.release_propagate.assess_quiescence` reads, not `QueueEntry`.
4471
+ raw_queue_rows = list_drive_queue()
4472
+ entries = entries_from_rows(raw_queue_rows)
4386
4473
 
4387
4474
  # #2587: is a fleet roll queued for the next inter-drive gap? Read
4388
4475
  # BEFORE `effective_capacity` is resolved — a live, unexpired marker
@@ -4563,7 +4650,24 @@ def drive_queue_tick(
4563
4650
  # `--dry-run`'s "mutate nothing" contract for every other write in
4564
4651
  # this function.
4565
4652
  if roll_pending is not None:
4566
- if plan.occupied == 0:
4653
+ # #2870: `plan.occupied == 0` alone is the pre-#2854 reading —
4654
+ # a between-legs row with no live assignment right now, past
4655
+ # its settle window, can sit `occupied` here (e.g. #1870's
4656
+ # `unknown` verdict for a row launched on another host)
4657
+ # forever, even though `coord release propagate` itself would
4658
+ # already call the fleet quiescent for that exact row. See
4659
+ # `_roll_pending_may_fire`'s own docstring for the full
4660
+ # mechanism and the incident this closes.
4661
+ fire_ready, fire_note = _roll_pending_may_fire(
4662
+ occupied=plan.occupied, now=now, queue_rows=raw_queue_rows
4663
+ )
4664
+ if fire_ready:
4665
+ if plan.occupied and fire_note:
4666
+ click.echo(
4667
+ f"(queue still shows {plan.occupied} occupying a slot, "
4668
+ f"but #2854's settle-window reading calls it quiescent — "
4669
+ f"{fire_note} — attempting the roll anyway)"
4670
+ )
4567
4671
  fired, detail = _fire_pending_roll()
4568
4672
  if fired:
4569
4673
  # #2587 review: this must NOT clear the marker. `fired`
@@ -654,11 +654,24 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
654
654
 
655
655
 
656
656
  def _ensure_roll_pending_marker(
657
- target_version: str, *, reason: str, dry_run: bool = False
657
+ target_version: str, *, reason: str, min_releases_behind: int | None = None,
658
+ dry_run: bool = False,
658
659
  ) -> None:
659
660
  """#2587: make sure a roll-pending marker exists for *target_version*,
660
661
  without resetting an already-live one's clock.
661
662
 
663
+ #2870: *min_releases_behind* is the effective `propagation.
664
+ min_releases_behind`/`--min-behind` threshold THIS run resolved and
665
+ already gated on before reaching this call (see the #2583 gate just
666
+ above this function's one call site) — stamped onto the marker
667
+ (`RollPending.min_releases_behind`) so whatever eventually discharges it
668
+ (`coord.commands.release._run_propagate`, threaded a matching
669
+ `--min-behind`) is gated at the SAME threshold this arm used, not
670
+ whatever threshold ITS OWN invocation happens to resolve. Like
671
+ `target_version`/`reason`, this is updated on every re-arm (a re-arm is
672
+ a fresh decision about what SHOULD roll and at what threshold) — only
673
+ `set_at`/`deferrals` stay frozen (see below).
674
+
662
675
  #2869: ``dry_run=True`` is the ONE seam every call site must go through —
663
676
  it never touches disk, only echoing what it *would* have written, in the
664
677
  same "would ..." register as ``_fire_pending_roll``'s and
@@ -712,7 +725,10 @@ def _ensure_roll_pending_marker(
712
725
  )
713
726
  return
714
727
  write_roll_pending(
715
- _dataclasses.replace(existing, target_version=target_version, reason=reason)
728
+ _dataclasses.replace(
729
+ existing, target_version=target_version, reason=reason,
730
+ min_releases_behind=min_releases_behind,
731
+ )
716
732
  )
717
733
  return
718
734
  if dry_run:
@@ -723,7 +739,10 @@ def _ensure_roll_pending_marker(
723
739
  )
724
740
  return
725
741
  write_roll_pending(
726
- RollPending(target_version=target_version, set_at=_time.time(), reason=reason)
742
+ RollPending(
743
+ target_version=target_version, set_at=_time.time(), reason=reason,
744
+ min_releases_behind=min_releases_behind,
745
+ )
727
746
  )
728
747
 
729
748
 
@@ -1123,7 +1142,14 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1123
1142
  # too, so a plain periodic `coord-release-propagate.timer` run also
1124
1143
  # arms the drive-queue tick's own inter-drive-gap trigger instead of
1125
1144
  # requiring an operator to separately reach for `nightly-window`.
1126
- _ensure_roll_pending_marker(record.target_version, reason="propagate", dry_run=dry_run)
1145
+ # #2870: stamp THIS run's own already-passed `effective_min_behind`
1146
+ # (resolved above, 3a) onto the marker, so whatever discharges it is
1147
+ # gated at the threshold that armed it, not a threshold re-resolved
1148
+ # from scratch later.
1149
+ _ensure_roll_pending_marker(
1150
+ record.target_version, reason="propagate",
1151
+ min_releases_behind=effective_min_behind, dry_run=dry_run,
1152
+ )
1127
1153
  _finish(rp.STATUS_DEFERRED, 0)
1128
1154
 
1129
1155
  still_busy = busy_hosts - set(current)
@@ -2846,7 +2872,7 @@ def _latest_propagate_record_since(state_dir: Path, since: float) -> dict | None
2846
2872
 
2847
2873
  def _run_propagate(
2848
2874
  *, daemon_host: str, target_version: str, config_path: Path, state_dir: Path,
2849
- runner=None, now_fn=None,
2875
+ min_behind: int | None = None, runner=None, now_fn=None,
2850
2876
  ) -> tuple[str, int, str, float | None]:
2851
2877
  """``coord release propagate --daemon-host ... --target ... --json``.
2852
2878
 
@@ -2858,6 +2884,20 @@ def _run_propagate(
2858
2884
  run decided was needed is the version that actually rolls, even if a new
2859
2885
  release lands on PyPI mid-drain.
2860
2886
 
2887
+ #2870: *min_behind*, when given, is passed through as `--min-behind` —
2888
+ the threshold the roll-pending marker being discharged here was ARMED
2889
+ at (`RollPending.min_releases_behind`), NOT this process's own
2890
+ `propagation.min_releases_behind`. Before this, this call never passed
2891
+ `--min-behind` at all, so `coord release propagate` always re-resolved
2892
+ ITS OWN threshold from `coordinator.yml` — a marker armed below the
2893
+ fleet default (e.g. `coord release nightly-window --min-behind 1`
2894
+ against a fleet configured `min_releases_behind: 5`) could never reach
2895
+ the threshold ITS discharge required and held forever, `alert: (none)`
2896
+ the whole time. ``None`` (an old marker with no recorded threshold, or
2897
+ one whose arming run never evaluated the gate) omits the flag, matching
2898
+ the pre-#2870 behaviour — this process resolves its own default exactly
2899
+ as it always did.
2900
+
2861
2901
  Returns ``(status, exit_code, combined_output, propagate_started_at)``.
2862
2902
  ``status`` is read from the propagation journal entry that run itself
2863
2903
  wrote (:func:`_latest_propagate_record_since`) — the same ground truth
@@ -2883,6 +2923,8 @@ def _run_propagate(
2883
2923
  "--daemon-host", daemon_host, "--target", target_version,
2884
2924
  "--json", "--config", str(config_path),
2885
2925
  ]
2926
+ if min_behind is not None:
2927
+ argv.extend(["--min-behind", str(min_behind)])
2886
2928
  try:
2887
2929
  proc = run(argv, capture_output=True, text=True, timeout=1800)
2888
2930
  except Exception as exc: # noqa: BLE001
@@ -3224,9 +3266,24 @@ def release_nightly_window(
3224
3266
  # attempt, safe to make redundantly since `coord release propagate`
3225
3267
  # never carries `--force` here (trap 1) and simply defers again if
3226
3268
  # the fleet is still busy.
3269
+ # #2870: gate the discharge at the threshold the marker was ARMED
3270
+ # at (`existing.min_releases_behind`), not whatever `coord release
3271
+ # propagate` would re-resolve on its own — that mismatch is exactly
3272
+ # how a marker armed via `--min-behind 1` froze the queue against a
3273
+ # fleet configured `min_releases_behind: 5`, forever holding at "3
3274
+ # behind, threshold 5" no matter how many times this fired. A
3275
+ # marker with no recorded threshold (written before this field
3276
+ # existed, or whose arming run never evaluated the gate at all)
3277
+ # falls back to THIS run's own `effective_min_behind` — the same
3278
+ # value it would have used before #2870.
3227
3279
  prop_status, prop_exit, prop_output, prop_started_at = _run_propagate(
3228
3280
  daemon_host=daemon_name, target_version=existing.target_version,
3229
3281
  config_path=config_path, state_dir=state_dir,
3282
+ min_behind=(
3283
+ existing.min_releases_behind
3284
+ if existing.min_releases_behind is not None
3285
+ else effective_min_behind
3286
+ ),
3230
3287
  )
3231
3288
  record.propagate_status = prop_status
3232
3289
  record.propagate_exit_code = prop_exit
@@ -3303,6 +3360,13 @@ def release_nightly_window(
3303
3360
  # re-arm — the queue froze because the bound that was supposed to save it
3304
3361
  # could never be reached. Only a genuinely fresh marker (no existing one
3305
3362
  # at all) gets a new clock.
3363
+ # #2870: every write below stamps `effective_min_behind` — THIS run's
3364
+ # own already-resolved threshold (section 2b above) — onto the marker,
3365
+ # so `_run_propagate`'s belt-and-braces call above (and any future
3366
+ # discharge) is gated at the SAME threshold that armed it, not whatever
3367
+ # `coord release propagate` would re-resolve on its own later. Updated
3368
+ # on every re-arm, same as `target_version`/`reason` just below — only
3369
+ # `set_at`/`deferrals` are the frozen "clock" #2607 protects.
3306
3370
  if existing is not None:
3307
3371
  click.echo(
3308
3372
  f"replacing stale roll-pending marker ({existing.describe()}) "
@@ -3313,6 +3377,7 @@ def release_nightly_window(
3313
3377
  write_roll_pending(
3314
3378
  _dataclasses.replace(
3315
3379
  existing, target_version=record.target_version, reason="nightly-window",
3380
+ min_releases_behind=effective_min_behind,
3316
3381
  )
3317
3382
  )
3318
3383
  else:
@@ -3321,6 +3386,7 @@ def release_nightly_window(
3321
3386
  target_version=record.target_version,
3322
3387
  set_at=time.time(),
3323
3388
  reason="nightly-window",
3389
+ min_releases_behind=effective_min_behind,
3324
3390
  )
3325
3391
  )
3326
3392
  click.echo(
@@ -587,6 +587,14 @@ class Action:
587
587
  # the work row's own last attempt reported, or `_decide_merge` would
588
588
  # diagnose one PR using the other PR's gates.
589
589
  merge_scope: str = "work"
590
+ # #2871: an explicit ``(event_type, summary, details)`` for `Driver._loop`
591
+ # to write via `_record_drive_audit`, independent of whatever this Action
592
+ # otherwise does (WAIT/RUN/EXIT). `decide()` stays a pure function of its
593
+ # inputs — it hands back *what happened*, never writes the audit log
594
+ # itself — while still letting a poll that neither dispatches nor exits
595
+ # (e.g. bypassing a stale pre-dispatch refusal) leave a durable trail
596
+ # instead of only a run-log line nobody queries later.
597
+ audit_event: tuple[str, str, dict[str, Any]] | None = None
590
598
 
591
599
  @property
592
600
  def is_exit(self) -> bool:
@@ -605,6 +613,44 @@ def _die(message: str, exit_code: int = EXIT_TERMINAL_FAILURE) -> Action:
605
613
  return Action(kind=EXIT, message=message, exit_code=exit_code)
606
614
 
607
615
 
616
+ def _format_age(seconds: float) -> str:
617
+ """Coarse human age ('38m', '15h', '1.2d') for a pre-dispatch audit note.
618
+
619
+ Deliberately not the CLI's full relative-time renderer — this is one
620
+ field inside an audit `summary`/`details`, not a UI surface, so a small
621
+ self-contained formatter is enough (#2871).
622
+ """
623
+ seconds = max(0.0, seconds)
624
+ if seconds < 3600:
625
+ return f"{int(seconds // 60)}m"
626
+ if seconds < 86400:
627
+ return f"{seconds / 3600:.0f}h"
628
+ return f"{seconds / 86400:.1f}d"
629
+
630
+
631
+ def _refused_policy_is_stale(state: IssueState) -> bool:
632
+ """True when a terminal ``refused_policy`` work row no longer describes
633
+ the issue as it stands now (#2871).
634
+
635
+ A worker refuses pre-dispatch work exactly once, correctly, for the ask
636
+ it was shown — the refusal says nothing about a DIFFERENT ask on the same
637
+ issue number. If the issue was retargeted (title rewritten) after that
638
+ row finished, the branch it would have produced (workers name branches
639
+ ``issue-{N}-{slugify(title)}`` at dispatch time, see
640
+ ``coord.agent``'s ``branch_name`` construction) no longer matches what a
641
+ fresh dispatch would name — that mismatch is the signal a retarget
642
+ happened. Conservative on every uncertainty (no branch recorded, no
643
+ title resolved): returns ``False`` — i.e. still treated as blocking —
644
+ rather than risk waving a genuinely-unresolved refusal through.
645
+ """
646
+ if not state.work_branch or not state.issue_title:
647
+ return False
648
+ from coord.agent import _slugify # noqa: PLC0415
649
+
650
+ expected_branch = f"issue-{state.issue}-{_slugify(state.issue_title)}"
651
+ return state.work_branch != expected_branch
652
+
653
+
608
654
  # ── oracle-loop JIT slice authoring (#1453) ─────────────────────────────────
609
655
 
610
656
 
@@ -2036,8 +2082,58 @@ def decide(
2036
2082
  # deliverable was a doc edit, which CLAUDE.md itself tells a worker
2037
2083
  # to refuse and stop rather than attempt). Unlike an ADVISORY 0-commit
2038
2084
  # exit, retrying changes nothing — the rule this worker cited is not
2039
- # going anywhere — so this is a `_die()` exactly like every other
2040
- # terminal branch here, but the message embeds
2085
+ # going anywhere — UNLESS the issue itself has since changed.
2086
+ #
2087
+ # #2871: a refusal is a verdict on the ASK the worker was shown, not
2088
+ # a standing veto on the issue NUMBER forever. `coord/claim.py`'s
2089
+ # `find_work_claim` never even sees this row (it's terminal, so it
2090
+ # lives in `board.completed`) — the reason a stale refusal blocks
2091
+ # every later drive is entirely HERE: `work_aid`/`work_status` above
2092
+ # are the latest work-like row for this issue regardless of how old
2093
+ # or how differently-scoped it is, so a fresh `coord drive` launch
2094
+ # reads the fossil row as "this run's" state before ever reaching
2095
+ # `_dispatch_work_stage`. If the issue was retargeted (title
2096
+ # rewritten) after this row finished, `_refused_policy_is_stale`
2097
+ # detects it — the old refusal no longer describes what a fresh
2098
+ # dispatch would even be asked to do — and this bypasses the veto
2099
+ # instead of dying again on the SAME prose a fresh worker never
2100
+ # produced this run (CC#916).
2101
+ age_seconds = (
2102
+ time.time() - state.work_finished_at
2103
+ if state.work_finished_at is not None
2104
+ else None
2105
+ )
2106
+ age = _format_age(age_seconds) if age_seconds is not None else "unknown age"
2107
+ if _refused_policy_is_stale(state):
2108
+ bypass_summary = (
2109
+ f"pre-dispatch: bypassing stale refused_policy assignment "
2110
+ f"{state.work_aid} ({age} old) on issue {state.repo}#{state.issue} "
2111
+ f"— retargeted since (branch {state.work_branch!r} no longer "
2112
+ "matches the issue's current title); dispatching fresh work (#2871)"
2113
+ )
2114
+ dispatch = _dispatch_work_stage(
2115
+ state, opts, counters, machine, oracle, gate_checker, verifier
2116
+ )
2117
+ return replace(
2118
+ dispatch,
2119
+ audit_event=(
2120
+ "refused_policy_stale",
2121
+ bypass_summary,
2122
+ {
2123
+ "stale_assignment_id": state.work_aid,
2124
+ "stale_branch": state.work_branch,
2125
+ "age_seconds": age_seconds,
2126
+ },
2127
+ ),
2128
+ )
2129
+ # Still genuinely blocking: `_die()` exactly like every other
2130
+ # terminal branch here, but the message now says explicitly that
2131
+ # THIS run refused pre-dispatch on an OLD row (naming it and its
2132
+ # age) rather than reading as a fresh worker refusing again — and
2133
+ # names the remedy that actually clears it (#2871: retargeting is
2134
+ # what makes the branch above fire on the next drive; `coord
2135
+ # drive-queue remove`+`add` alone does nothing, since the queue row
2136
+ # was never what was blocking). The message still embeds
2041
2137
  # `POLICY_REFUSAL_MARKER`: `coord/drive_queue.py`'s
2042
2138
  # `_reconcile_running` recognises that marker in this run's own
2043
2139
  # `drive_exited` audit summary and parks the queue entry
@@ -2046,12 +2142,16 @@ def decide(
2046
2142
  # principle #1844 already applies pre-dispatch, applied here
2047
2143
  # post-dispatch.
2048
2144
  return _die(
2049
- f"work {state.work_aid} refused on a standing repo-rule "
2050
- "prohibition rather than doing the dispatched work — the worker "
2051
- "did the CORRECT thing (#2234). Needs the coordinator: do the "
2052
- "work directly (or re-scope the issue so its deliverable isn't "
2053
- f"coordinator-only), then `coord drive-queue remove {state.repo} "
2054
- f"{state.issue}` once handled.\n"
2145
+ f"pre-dispatch refusal on assignment {state.work_aid} "
2146
+ f"(refused_policy, {age} old) — work refused on a standing "
2147
+ "repo-rule prohibition rather than doing the dispatched work; "
2148
+ "the worker did the CORRECT thing (#2234). Needs the "
2149
+ "coordinator: do the work directly, OR retarget the issue "
2150
+ "(rewrite its title so the deliverable matches what should "
2151
+ "actually be dispatched) — the next `coord drive` detects the "
2152
+ "retarget and dispatches fresh work automatically (#2871), so "
2153
+ f"`coord drive-queue remove {state.repo} {state.issue}` + `add` "
2154
+ "then genuinely clears this once the issue is retargeted.\n"
2055
2155
  f" inspect: coord log {state.work_aid} --machine "
2056
2156
  f"{state.work_machine or machine}\n"
2057
2157
  f" {POLICY_REFUSAL_MARKER}"
@@ -4680,6 +4780,15 @@ class Driver:
4680
4780
  for warning in action.warnings:
4681
4781
  self.warn(warning)
4682
4782
 
4783
+ # #2871: `decide()` stays a pure function of its inputs — it
4784
+ # cannot write the audit log itself — so an Action that carries
4785
+ # its own audit note (e.g. bypassing a stale pre-dispatch
4786
+ # refusal) gets recorded here, the one place this loop already
4787
+ # writes durable `drive_*` audit rows.
4788
+ if action.audit_event is not None:
4789
+ event_type, summary, details = action.audit_event
4790
+ self._record_drive_audit(event_type, summary, details=details)
4791
+
4683
4792
  # #2443: self-heal — see `_self_heal_drift_message`. Tracked off
4684
4793
  # the Action's own `label`, NOT `fingerprint` above: a WAIT can
4685
4794
  # (and, in the #2286 shape, does) repeat the identical reason
@@ -1561,6 +1561,26 @@ class RollPending:
1561
1561
  #: fleet still busy — bumped by the shell each tick it does NOT fire the
1562
1562
  #: roll. Never bumped by `plan_tick` itself (pure; no counting state).
1563
1563
  deferrals: int = 0
1564
+ #: #2870: the ``propagation.min_releases_behind``/``--min-behind``
1565
+ #: threshold this marker was ARMED at — `coord release nightly-window`/
1566
+ #: `coord.commands.release._ensure_roll_pending_marker` stamp the
1567
+ #: effective threshold THEIR OWN run resolved (override, else
1568
+ #: `coordinator.yml`, else 1) at the moment they write this marker.
1569
+ #: Before #2870, discharge (`_run_propagate`'s `coord release propagate`
1570
+ #: subprocess) always re-resolved its OWN threshold from scratch — the
1571
+ #: fleet default, never whatever `--min-behind` armed this marker at —
1572
+ #: so a marker armed below the fleet default (e.g. a
1573
+ #: `coord-release-window.service` ExecStart carrying `--min-behind 1`
1574
+ #: against a fleet configured `min_releases_behind: 5`) could never
1575
+ #: reach the threshold its own discharge path required and froze the
1576
+ #: queue forever. Carried through to `_run_propagate` as `--min-behind`
1577
+ #: so discharge is gated at the SAME threshold arm used. `None` for a
1578
+ #: marker written before this field existed (`from_dict`'s tolerant
1579
+ #: parse) or one whose arming run never evaluated the gate at all
1580
+ #: (`effective_min_behind <= 1`) — the discharge call then falls back to
1581
+ #: ITS OWN effective threshold, matching the pre-#2870 behaviour rather
1582
+ #: than guessing.
1583
+ min_releases_behind: int | None = None
1564
1584
 
1565
1585
  def expired(self, now: float) -> bool:
1566
1586
  """Has this marker outlived ITS OWN bound — TTL or deferral ceiling?
@@ -1589,6 +1609,7 @@ class RollPending:
1589
1609
  "ttl_seconds": self.ttl_seconds,
1590
1610
  "max_deferrals": self.max_deferrals,
1591
1611
  "deferrals": self.deferrals,
1612
+ "min_releases_behind": self.min_releases_behind,
1592
1613
  }
1593
1614
 
1594
1615
  @classmethod
@@ -1615,6 +1636,7 @@ class RollPending:
1615
1636
  data.get("max_deferrals"), ROLL_PENDING_DEFAULT_MAX_DEFERRALS
1616
1637
  ),
1617
1638
  deferrals=_as_int_default(data.get("deferrals"), 0),
1639
+ min_releases_behind=_as_optional_int(data.get("min_releases_behind")),
1618
1640
  )
1619
1641
 
1620
1642
 
@@ -1632,6 +1654,21 @@ def _as_int_default(value: Any, default: int) -> int:
1632
1654
  return default
1633
1655
 
1634
1656
 
1657
+ def _as_optional_int(value: Any) -> int | None:
1658
+ """Tolerant parse for a field that is legitimately absent (``None``),
1659
+ unlike :func:`_as_int_default`'s fields which always have a real
1660
+ fallback — see `RollPending.min_releases_behind`'s own docstring for why
1661
+ "not recorded" must stay `None` rather than silently becoming some
1662
+ default int a caller could mistake for a real threshold.
1663
+ """
1664
+ if value is None:
1665
+ return None
1666
+ try:
1667
+ return int(value)
1668
+ except (TypeError, ValueError):
1669
+ return None
1670
+
1671
+
1635
1672
  @dataclass(frozen=True)
1636
1673
  class TickPlan:
1637
1674
  """Everything one tick decided, and nothing it has done yet."""
@@ -3107,18 +3144,32 @@ def _reconcile_running(
3107
3144
  # _decide` marks a `refused_policy` work row with `POLICY_REFUSAL_
3108
3145
  # MARKER` (coord.models) rather than `EXIT_DISPATCH_REFUSED`, so this is
3109
3146
  # checked purely off `own_reason` text, independent of `exit_refused`.
3110
- # Unlike #2063 this NEVER self-clears — a policy refusal names a
3111
- # STANDING rule, not a pending verdict — so it deliberately does not get
3112
- # the "queue resumes it automatically" wording Gate-A's park does; see
3113
- # `plan_tick`'s pre-pass below, which recognises this same marker and
3114
- # leaves the entry parked rather than falling through to the CI-park
3115
- # auto-resume. An operator clears it exactly like a `blocked` entry:
3116
- # handle it, then `coord drive-queue remove`.
3147
+ # Unlike #2063 this does not self-clear on its own timer — a policy
3148
+ # refusal names a STANDING rule, not a pending verdict — so it
3149
+ # deliberately does not get the "queue resumes it automatically" wording
3150
+ # Gate-A's park does; see `plan_tick`'s pre-pass below, which recognises
3151
+ # this same marker and leaves the entry parked rather than falling
3152
+ # through to the CI-park auto-resume.
3153
+ #
3154
+ # #2871: the precondition IS an operator action, but it is a RETARGET
3155
+ # (rewrite the issue so its deliverable isn't the coordinator-only thing
3156
+ # that got refused), not queue surgery. Before #2871, `coord.drive.
3157
+ # decide()` re-read the SAME stale `refused_policy` row on every relaunch
3158
+ # regardless of what the issue said by then, so `remove`+`add` looked
3159
+ # like the fix but did nothing — a fresh queue row, same blocking
3160
+ # assignment. `decide()` now compares that row's branch against the
3161
+ # issue's CURRENT title-derived slug (`_refused_policy_is_stale`) and
3162
+ # bypasses a stale refusal instead of dying on it again, so `remove`+
3163
+ # `add` (or any later relaunch) genuinely works — but only once the
3164
+ # retarget has actually happened.
3117
3165
  if own_reason and is_policy_refusal_reason(own_reason):
3118
3166
  reason = (
3119
3167
  f"{own_reason} — parking without spending an attempt (#2234); "
3120
- "needs the coordinator, not a relaunch — `coord drive-queue "
3121
- "remove` once handled"
3168
+ "needs the coordinator, not a relaunch — retarget the issue "
3169
+ "(rewrite its title so the deliverable isn't coordinator-only), "
3170
+ "then `coord drive-queue remove`+`add` (or just relaunch "
3171
+ "`coord drive`) — it now detects the retarget and dispatches "
3172
+ "fresh work automatically (#2871)"
3122
3173
  )
3123
3174
  return (
3124
3175
  Reconcile(