code-coordinator 0.5.328__tar.gz → 0.5.330__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 (822) hide show
  1. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent.py +59 -1
  5. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/drive_queue.py +38 -3
  6. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/portal.py +10 -2
  7. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive_queue.py +69 -0
  8. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_drive_queue.py +72 -0
  9. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_decomposition_chat.py +111 -0
  10. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue.py +82 -0
  11. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.gitignore +0 -0
  24. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/GOAL.md +0 -0
  26. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/LICENSE +0 -0
  27. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/README.md +0 -0
  29. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/client.py +0 -0
  62. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/gate_a.py +0 -0
  72. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/gates.py +0 -0
  73. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/issues.py +0 -0
  74. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/lifecycle.py +0 -0
  75. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/machine.py +0 -0
  76. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/milestone.py +0 -0
  78. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/plan_followup.py +0 -0
  79. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/plans.py +0 -0
  80. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/pr.py +0 -0
  81. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/release.py +0 -0
  82. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/repo.py +0 -0
  83. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/report.py +0 -0
  84. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/review.py +0 -0
  85. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/scorecard.py +0 -0
  86. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/sessions.py +0 -0
  87. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/setup.py +0 -0
  88. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/status.py +0 -0
  89. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/store_migrate.py +0 -0
  90. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/config.py +0 -0
  95. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/confirm_test.py +0 -0
  97. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/server.py +0 -0
  103. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/db.py +0 -0
  105. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dead_end.py +0 -0
  106. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/decomposition_chat.py +0 -0
  107. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/README.md +0 -0
  108. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-agent.service +0 -0
  109. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.service +0 -0
  110. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.sh +0 -0
  111. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.timer +0 -0
  112. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-drive-queue.service +0 -0
  113. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-drive-queue.timer +0 -0
  114. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-failure-notify.service +0 -0
  115. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-fleet-watchdog.service +0 -0
  116. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  117. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-notify.service +0 -0
  118. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-notify.timer +0 -0
  119. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-propagate.service +0 -0
  120. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-propagate.timer +0 -0
  121. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-window.service +0 -0
  122. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-window.timer +0 -0
  123. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-serve.service +0 -0
  124. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web-dist-build.service +0 -0
  125. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web-dist-build.timer +0 -0
  126. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web.service +0 -0
  127. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy_manifest.py +0 -0
  128. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy_units.py +0 -0
  129. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deprecation_telemetry.py +0 -0
  130. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deps.py +0 -0
  131. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/diagnose.py +0 -0
  132. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dispatch.py +0 -0
  133. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dist_name.py +0 -0
  134. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive.py +0 -0
  135. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive_state.py +0 -0
  136. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/events.py +0 -0
  137. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/failure_class.py +0 -0
  138. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/filelock.py +0 -0
  139. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/fleet_config_health.py +0 -0
  140. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/forge_availability.py +0 -0
  141. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/github_throttle.py +0 -0
  148. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/goal.py +0 -0
  149. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/graph_health.py +0 -0
  150. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/__init__.py +0 -0
  151. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/aggregate.py +0 -0
  152. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/__init__.py +0 -0
  153. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/_ci_pin.py +0 -0
  154. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/agent_install.py +0 -0
  155. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/cargo_targets.py +0 -0
  156. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/claude_binary.py +0 -0
  157. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  158. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/coord_web_ci_pin.py +0 -0
  159. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/deploy_lane_facts.py +0 -0
  160. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/disk.py +0 -0
  161. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_board.py +0 -0
  162. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  163. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_phantom.py +0 -0
  164. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_unit_drift.py +0 -0
  165. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/graph.py +0 -0
  166. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/graphify_cli.py +0 -0
  167. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/index_lock.py +0 -0
  168. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/issues_sync_staleness.py +0 -0
  169. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/plan_usage.py +0 -0
  170. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/release_cordon.py +0 -0
  171. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/stalled_pipeline.py +0 -0
  174. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/wedged_drive_queue.py +0 -0
  179. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/worktrees.py +0 -0
  180. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/cli.py +0 -0
  181. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/context.py +0 -0
  182. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/fleet_snapshot.py +0 -0
  183. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/models.py +0 -0
  184. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/pypi.py +0 -0
  185. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/registry.py +0 -0
  186. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/render.py +0 -0
  187. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/units.py +0 -0
  188. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/hooks.py +0 -0
  189. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/housekeeping.py +0 -0
  190. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/issues_sync_status.py +0 -0
  193. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/machine_onboard.py +0 -0
  195. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/machine_pause.py +0 -0
  196. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/merge_queue.py +0 -0
  197. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_chat.py +0 -0
  198. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_dispatch.py +0 -0
  199. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_gate.py +0 -0
  200. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_order.py +0 -0
  201. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/mock_author.py +0 -0
  202. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/models.py +0 -0
  203. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/network.py +0 -0
  204. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/new_issue_chat.py +0 -0
  205. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/__init__.py +0 -0
  206. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/baseline.py +0 -0
  207. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/cli.py +0 -0
  208. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/collect.py +0 -0
  209. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/digest.py +0 -0
  210. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/models.py +0 -0
  211. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/predicate.py +0 -0
  212. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/service.py +0 -0
  213. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/store.py +0 -0
  214. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/transport.py +0 -0
  215. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notify.py +0 -0
  216. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/openapi.py +0 -0
  217. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/overlap_fence.py +0 -0
  218. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/overlap_predict.py +0 -0
  219. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/parentage.py +0 -0
  220. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/parentage_github.py +0 -0
  221. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/pipeline.py +0 -0
  222. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/plan_parser.py +0 -0
  223. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/plans.py +0 -0
  224. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/platform_paths.py +0 -0
  225. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_bridge.py +0 -0
  226. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_store.py +0 -0
  227. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_sync.py +0 -0
  228. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/pr_body_lint.py +0 -0
  229. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/prereqs.py +0 -0
  230. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/progress.py +0 -0
  231. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/__init__.py +0 -0
  232. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/base.py +0 -0
  233. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/claude.py +0 -0
  234. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/claude_pty.py +0 -0
  235. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/opencode.py +0 -0
  236. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/queue_diagnose.py +0 -0
  237. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reconcile.py +0 -0
  238. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reconcile_tick.py +0 -0
  239. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/refine_chat.py +0 -0
  240. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_cordon.py +0 -0
  241. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_propagate.py +0 -0
  242. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_verify.py +0 -0
  243. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_window.py +0 -0
  244. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_dormancy.py +0 -0
  245. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_edit.py +0 -0
  246. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_onboard.py +0 -0
  247. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reports.py +0 -0
  248. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/rest_schema.py +0 -0
  249. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/revalidate.py +0 -0
  250. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/review.py +0 -0
  251. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/scorecard.py +0 -0
  252. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/self_health.py +0 -0
  253. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/serve_app.py +0 -0
  254. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  255. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  256. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  257. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/portal-followup/SKILL.md +0 -0
  260. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/release-now/SKILL.md +0 -0
  261. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  262. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  263. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/update-issue/SKILL.md +0 -0
  264. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/smoke.py +0 -0
  265. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/spend_ceiling.py +0 -0
  266. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/split_work.py +0 -0
  267. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/sql.py +0 -0
  268. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/stage_projection.py +0 -0
  269. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/state.py +0 -0
  270. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/store_migrate.py +0 -0
  271. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_author.py +0 -0
  272. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_chat.py +0 -0
  273. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_orchestrator.py +0 -0
  274. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_report.py +0 -0
  275. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/tui_release.py +0 -0
  276. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage.py +0 -0
  277. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage_limits.py +0 -0
  278. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage_rollup.py +0 -0
  279. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/worker_events.py +0 -0
  280. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coordinator.example.yml +0 -0
  281. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-agent.service +0 -0
  282. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.service +0 -0
  283. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.sh +0 -0
  284. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.timer +0 -0
  285. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-drive-queue.service +0 -0
  286. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-drive-queue.timer +0 -0
  287. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-failure-notify.service +0 -0
  288. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-failure-notify.sh +0 -0
  289. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-fleet-watchdog.service +0 -0
  290. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-fleet-watchdog.timer +0 -0
  291. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-notify.service +0 -0
  292. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-notify.timer +0 -0
  293. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-propagate.service +0 -0
  294. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-propagate.timer +0 -0
  295. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-window.service +0 -0
  296. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-window.timer +0 -0
  297. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-serve.service +0 -0
  298. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.service +0 -0
  299. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.sh +0 -0
  300. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.timer +0 -0
  301. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-rollback.sh +0 -0
  302. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web.service +0 -0
  303. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/node-shim.sh +0 -0
  304. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_TUI_CI.md +0 -0
  305. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  306. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_CI.md +0 -0
  307. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_DIST.md +0 -0
  308. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  309. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/AGENT_OPERATIONS.md +0 -0
  310. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ARCHITECTURE.md +0 -0
  311. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ARCH_SECURITY_GATES.md +0 -0
  312. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/COCKPIT.md +0 -0
  313. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CONTROL_CENTER.md +0 -0
  314. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/COST_DISCIPLINE.md +0 -0
  315. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CROSS_PLATFORM.md +0 -0
  316. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CUSTOMER_FACING_APPS.md +0 -0
  317. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CUSTOMER_PORTAL.md +0 -0
  318. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/DRIVE_QUEUE.md +0 -0
  319. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/EPHEMERAL_WORKERS.md +0 -0
  320. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/FORGE_MIGRATION.md +0 -0
  321. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/GRAPHIFY_SETUP.md +0 -0
  322. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ISSUE_GUIDANCE.md +0 -0
  323. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/MAC_MINI.md +0 -0
  324. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  325. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/NOTIFIER.md +0 -0
  326. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPENCODE_VERIFICATION.md +0 -0
  327. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPERATING_GOTCHAS.md +0 -0
  328. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPERATOR_GUIDES.md +0 -0
  329. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ORACLE_LOOP.md +0 -0
  330. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PHONE_WEBAPP.md +0 -0
  331. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PIPELINE_V2.md +0 -0
  332. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PLATFORM_EVOLUTION.md +0 -0
  333. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/SECOND_BACKEND.md +0 -0
  334. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/STORE_SERVICE.md +0 -0
  335. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  336. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/WEB_CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/WSL_WINDOWS_WORKER.md +0 -0
  338. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/README.md +0 -0
  339. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/_tokens.css +0 -0
  340. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/issue-detail.html +0 -0
  341. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/pipeline-narrow.html +0 -0
  342. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/pipeline-wide.html +0 -0
  343. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/graphify-out/.gitignore +0 -0
  344. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/install-agent.sh +0 -0
  345. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/pyproject.toml +0 -0
  346. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/audit_review_verdict_overrides.py +0 -0
  347. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  348. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/build-worker-image.sh +0 -0
  349. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/coordinator-machine.py +0 -0
  350. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/epic-down.sh +0 -0
  351. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/epic-up.sh +0 -0
  352. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/preflight.sh +0 -0
  353. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/provision-worker.sh +0 -0
  354. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  355. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  356. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/verify-github-token.sh +0 -0
  357. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/check_gh_argv_containment.py +0 -0
  358. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/codegen.py +0 -0
  359. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-test-runner.sh +0 -0
  360. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  361. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  362. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  363. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  364. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/extract-coord-tui.sh +0 -0
  367. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/fleet_watchdog.py +0 -0
  368. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/gen_board_fixture.py +0 -0
  369. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/gen_mock_index.py +0 -0
  370. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/next_release_tag.py +0 -0
  371. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/run_tests_in_populated_home.sh +0 -0
  372. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/run_tests_without_gh.sh +0 -0
  373. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/smoke_437_interactive.py +0 -0
  374. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_878_review_capture.py +0 -0
  375. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_release_published.py +0 -0
  376. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_release_wheel.py +0 -0
  377. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/setup.cfg +0 -0
  378. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/SMOKE_SET.md +0 -0
  379. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/__init__.py +0 -0
  380. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/conftest.py +0 -0
  381. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/contract.md +0 -0
  382. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/manifest.yml +0 -0
  383. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  384. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  385. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/contract.md +0 -0
  386. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  387. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  388. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/manifest.yml +0 -0
  389. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/tsconfig.json +0 -0
  391. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/backends.py +0 -0
  393. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/conftest.py +0 -0
  394. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/board-pipeline-basic.json +0 -0
  395. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  396. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  397. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  398. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  399. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/all_pass.json +0 -0
  400. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  401. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/mixed_fail.json +0 -0
  402. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  403. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  404. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/skip.json +0 -0
  405. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/truncated.json +0 -0
  406. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  407. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  408. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  409. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  410. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  411. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  412. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  413. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  414. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_acceptance.py +0 -0
  415. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_acceptance_drivers.py +0 -0
  416. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent.py +0 -0
  417. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_api_error.py +0 -0
  418. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_app.py +0 -0
  419. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_branch_base.py +0 -0
  420. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_branch_capture.py +0 -0
  421. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_config_free_1712.py +0 -0
  422. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_deploy_units_endpoint.py +0 -0
  423. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_dirty_worktree.py +0 -0
  424. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  425. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_graph_self_heal.py +0 -0
  426. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_health_h3.py +0 -0
  427. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_idle_restart.py +0 -0
  428. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_push_failure.py +0 -0
  429. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_reap.py +0 -0
  430. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_repos_and_pull.py +0 -0
  431. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_restart_services_endpoint.py +0 -0
  432. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_skills_self_heal.py +0 -0
  433. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_startup_diagnostics.py +0 -0
  434. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_update.py +0 -0
  435. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_update_bluegreen.py +0 -0
  436. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_usage_limit.py +0 -0
  437. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_zero_commit.py +0 -0
  438. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ambient_home_isolation.py +0 -0
  439. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_dependency_busy_2804.py +0 -0
  440. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_reject_plan.py +0 -0
  441. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_usage_gate.py +0 -0
  442. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approved_work_2532.py +0 -0
  443. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approved_work_2996.py +0 -0
  444. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_assignment_already_recorded_daemon.py +0 -0
  445. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_log.py +0 -0
  446. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_outcome.py +0 -0
  447. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_query.py +0 -0
  448. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_auto_loop.py +0 -0
  449. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_auto_release_publish_2035.py +0 -0
  450. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_backend_selection.py +0 -0
  451. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_base_checkout_restore.py +0 -0
  452. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_block_log.py +0 -0
  453. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_cap_762.py +0 -0
  454. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_fixture.py +0 -0
  455. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_read_path.py +0 -0
  456. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_schema.py +0 -0
  457. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_service.py +0 -0
  458. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_state.py +0 -0
  459. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_wire.py +0 -0
  460. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_brain.py +0 -0
  461. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_branch_model.py +0 -0
  462. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_bug_intake.py +0 -0
  463. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_build_worker_image_env_update.py +0 -0
  464. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cargo_cache.py +0 -0
  465. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_check_gh_argv_containment.py +0 -0
  466. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_acceptance_gate_1950.py +0 -0
  467. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_fix.py +0 -0
  468. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_gitlab.py +0 -0
  469. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_parity_2091.py +0 -0
  470. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_store.py +0 -0
  471. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_claim.py +0 -0
  472. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_claude_md_budget.py +0 -0
  473. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_acceptance.py +0 -0
  474. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign.py +0 -0
  475. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  476. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_interactive_remote.py +0 -0
  477. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_provider.py +0 -0
  478. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  479. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_audit.py +0 -0
  480. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_chat_continue.py +0 -0
  481. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_decide.py +0 -0
  482. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_capability_rules.py +0 -0
  483. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_config_provenance.py +0 -0
  484. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_forge_availability.py +0 -0
  485. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_graph.py +0 -0
  486. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_self.py +0 -0
  487. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_test_coverage.py +0 -0
  488. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor.py +0 -0
  489. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor_config_free_1801.py +0 -0
  490. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  491. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_drive.py +0 -0
  492. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_escalate.py +0 -0
  493. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_fix_headless_review.py +0 -0
  494. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_gate_a.py +0 -0
  495. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_install_drift.py +0 -0
  496. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_install_skills.py +0 -0
  497. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_comment.py +0 -0
  498. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_create_label.py +0 -0
  499. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_reopen.py +0 -0
  500. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_view_list.py +0 -0
  501. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_merge.py +0 -0
  502. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_assign.py +0 -0
  503. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_capture.py +0 -0
  504. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_chat_add_child.py +0 -0
  505. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_dispatch.py +0 -0
  506. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_gate_b.py +0 -0
  507. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_gate_c.py +0 -0
  508. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_order.py +0 -0
  509. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  510. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_ship.py +0 -0
  511. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_network.py +0 -0
  512. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_new_issue_chat.py +0 -0
  513. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_plans.py +0 -0
  514. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_portal.py +0 -0
  515. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_pr.py +0 -0
  516. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_pull_artifact.py +0 -0
  517. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_queue.py +0 -0
  518. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_reattach_sessions.py +0 -0
  519. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_refine_board.py +0 -0
  520. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_preflight.py +0 -0
  521. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_propagate.py +0 -0
  522. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_window.py +0 -0
  523. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_repo_2220.py +0 -0
  524. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  525. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_scorecard.py +0 -0
  526. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_set_review_findings.py +0 -0
  527. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_advisory_terminal.py +0 -0
  528. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_contested_tag.py +0 -0
  529. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_merge_queue.py +0 -0
  530. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_provider.py +0 -0
  531. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_review_finalizing.py +0 -0
  532. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_test_failed_tag.py +0 -0
  533. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_usage_limit.py +0 -0
  534. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_sync_comments_873.py +0 -0
  535. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_test_plan.py +0 -0
  536. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_track.py +0 -0
  537. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_tui_update.py +0 -0
  538. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_wait.py +0 -0
  539. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_client_base_install.py +0 -0
  540. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_client_resource_migration_1946.py +0 -0
  541. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_commands_common.py +0 -0
  542. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_comments.py +0 -0
  543. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_completion_summary.py +0 -0
  544. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config.py +0 -0
  545. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_acceptance.py +0 -0
  546. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_audit.py +0 -0
  547. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_pricing.py +0 -0
  548. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  549. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_usage_gate.py +0 -0
  550. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_confirm_test.py +0 -0
  551. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_conflict_fix.py +0 -0
  552. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_conflict_fix_semantic.py +0 -0
  553. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  554. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test.py +0 -0
  555. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  556. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_baseline.py +0 -0
  557. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_populated_home.py +0 -0
  558. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_routing.py +0 -0
  559. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_toolchain.py +0 -0
  560. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_uat.py +0 -0
  561. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_web_sse_restart_live.py +0 -0
  562. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coordinator_machine.py +0 -0
  563. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cross_platform_imports.py +0 -0
  564. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dao.py +0 -0
  565. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard.py +0 -0
  566. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_api.py +0 -0
  567. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_fixture.py +0 -0
  568. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_terminal.py +0 -0
  569. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_terminal_live.py +0 -0
  570. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_db.py +0 -0
  571. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dead_end.py +0 -0
  572. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_db_backup.py +0 -0
  573. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_web_dist.py +0 -0
  574. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_web_rollback.py +0 -0
  575. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_drive_queue_unit.py +0 -0
  576. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_failure_notify_unit.py +0 -0
  577. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_manifest.py +0 -0
  578. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_notify_unit.py +0 -0
  579. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_units_lane.py +0 -0
  580. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_web_unit.py +0 -0
  581. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deprecation_telemetry.py +0 -0
  582. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deps.py +0 -0
  583. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_diagnose.py +0 -0
  584. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dispatch.py +0 -0
  585. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dispatch_target_validation.py +0 -0
  586. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dist_name.py +0 -0
  587. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_done_housekeeping.py +0 -0
  588. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive.py +0 -0
  589. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_blocked_rendering.py +0 -0
  590. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_launch_argv.py +0 -0
  591. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  592. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_roll_pending.py +0 -0
  593. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  594. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_state.py +0 -0
  595. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_tmux.py +0 -0
  596. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_capability_detection.py +0 -0
  597. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  598. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_image_provenance.py +0 -0
  599. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_errors.py +0 -0
  600. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_events.py +0 -0
  601. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_failure_class.py +0 -0
  602. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_filelock.py +0 -0
  603. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  604. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fix_of_force_override.py +0 -0
  605. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_config_health.py +0 -0
  606. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_health_probes.py +0 -0
  607. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_health_snapshot.py +0 -0
  608. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_watchdog.py +0 -0
  609. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_forge_availability.py +0 -0
  610. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_freshness.py +0 -0
  611. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_a.py +0 -0
  612. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_b.py +0 -0
  613. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_snapshot_staleness.py +0 -0
  614. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gates.py +0 -0
  615. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  616. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gen_mock_index.py +0 -0
  617. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_rust_fixture.py +0 -0
  618. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_rust_requests.py +0 -0
  619. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_types_fixture.py +0 -0
  620. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_github_ops.py +0 -0
  621. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_github_throttle.py +0 -0
  622. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_graph_selfheal_absent_2237.py +0 -0
  625. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_coord_tui_ci_pin.py +0 -0
  632. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_coord_web_ci_pin.py +0 -0
  633. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_deploy_lane_facts.py +0 -0
  634. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_fix.py +0 -0
  635. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_incident_regression.py +0 -0
  636. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_issues_sync_staleness.py +0 -0
  637. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_pypi.py +0 -0
  638. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_registry.py +0 -0
  639. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_release_cordon_probe.py +0 -0
  640. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_timer_active.py +0 -0
  641. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_toolchain.py +0 -0
  642. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_unit_drift.py +0 -0
  643. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_unit_enablement.py +0 -0
  644. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_wedged_drive_queue.py +0 -0
  645. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_hooks.py +0 -0
  646. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_human_attended_437.py +0 -0
  647. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_init.py +0 -0
  648. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_install_agent_venv_2911.py +0 -0
  649. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_integration.py +0 -0
  650. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_briefing_echo.py +0 -0
  651. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_pane_log_2541.py +0 -0
  652. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_prefill_state.py +0 -0
  653. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_session_relaunch.py +0 -0
  654. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_test_verdict_backstop.py +0 -0
  655. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_token_attribution.py +0 -0
  656. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_worktree.py +0 -0
  657. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_issue_store_seam.py +0 -0
  658. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_issues_sync_status.py +0 -0
  659. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_liveness_auditor.py +0 -0
  660. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_liveness_notify.py +0 -0
  661. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_lock_contention_ratchet.py +0 -0
  662. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_machine_onboard.py +0 -0
  663. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_machine_pause.py +0 -0
  664. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_merge_queue.py +0 -0
  665. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_merge_verify.py +0 -0
  666. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_chat.py +0 -0
  667. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_dispatch.py +0 -0
  668. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_gate.py +0 -0
  669. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_order.py +0 -0
  670. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_seam.py +0 -0
  671. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_mock_author.py +0 -0
  672. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_model_tiering.py +0 -0
  673. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_models.py +0 -0
  674. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_models_config_labels.py +0 -0
  675. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_needs_attention.py +0 -0
  676. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_network.py +0 -0
  677. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_new_issue_chat.py +0 -0
  678. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_next_release_tag.py +0 -0
  679. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_node_shim.py +0 -0
  680. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_baseline.py +0 -0
  681. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_cli.py +0 -0
  682. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_collect.py +0 -0
  683. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_config.py +0 -0
  684. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_drive_seam.py +0 -0
  685. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_isolation.py +0 -0
  686. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_predicate.py +0 -0
  687. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_quiet_hours.py +0 -0
  688. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_service.py +0 -0
  689. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notify.py +0 -0
  690. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notify_drain.py +0 -0
  691. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_openapi.py +0 -0
  692. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_operational_defaults.py +0 -0
  693. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_overlap_fence.py +0 -0
  694. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_overlap_predict.py +0 -0
  695. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_packaged_deploy_units.py +0 -0
  696. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_parentage.py +0 -0
  697. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_paste_landed.py +0 -0
  698. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  699. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_pipeline.py +0 -0
  700. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_approve_plan_command.py +0 -0
  701. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_pr_command.py +0 -0
  702. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_review_command.py +0 -0
  703. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_only.py +0 -0
  704. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_parser.py +0 -0
  705. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_platform_paths.py +0 -0
  706. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_bridge.py +0 -0
  707. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_config.py +0 -0
  708. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_store.py +0 -0
  709. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_sync.py +0 -0
  710. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_pr_body_lint.py +0 -0
  711. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_prereqs.py +0 -0
  712. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_production_db_guard.py +0 -0
  713. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_progress.py +0 -0
  714. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_provider_seam.py +0 -0
  715. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers.py +0 -0
  716. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers_config_labels.py +0 -0
  717. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers_pty.py +0 -0
  718. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_py_rust_mirror_inventory.py +0 -0
  719. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_quiet_hours.py +0 -0
  720. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_quiet_hours_store_2146.py +0 -0
  721. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reap_merged_sessions.py +0 -0
  722. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reap_stale_interactive_tick.py +0 -0
  723. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile.py +0 -0
  724. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_branch.py +0 -0
  725. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_completions.py +0 -0
  726. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  727. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_merges.py +0 -0
  728. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_no_agent_record.py +0 -0
  729. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_tick.py +0 -0
  730. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_usage_limit_done.py +0 -0
  731. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_refine_chat.py +0 -0
  732. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_2101.py +0 -0
  733. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  734. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_deadlock_2240.py +0 -0
  735. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_stuck_2490.py +0 -0
  736. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_propagate.py +0 -0
  737. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_propagate_threshold.py +0 -0
  738. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_roll_between_legs_2854.py +0 -0
  739. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_roll_window_handoff.py +0 -0
  740. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_add.py +0 -0
  746. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_dormancy.py +0 -0
  747. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_edit_2220.py +0 -0
  748. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_graph_fleet_2237.py +0 -0
  749. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_onboard_2220.py +0 -0
  750. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_report_result_push.py +0 -0
  751. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reports.py +0 -0
  752. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry.py +0 -0
  753. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry_advisory_1606.py +0 -0
  754. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry_type_1636.py +0 -0
  755. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_revalidate.py +0 -0
  756. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review.py +0 -0
  757. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_end_review_without_verdict.py +0 -0
  758. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_parse_failure_diagnostic.py +0 -0
  759. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_reaffirm.py +0 -0
  760. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_state.py +0 -0
  761. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_backstop.py +0 -0
  762. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_override_audit.py +0 -0
  763. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_relay.py +0 -0
  764. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_zero_commits.py +0 -0
  765. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_scoped_review_wiring.py +0 -0
  766. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_scorecard.py +0 -0
  767. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_self_health.py +0 -0
  768. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve.py +0 -0
  769. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve_app_board_trim.py +0 -0
  770. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve_rest_routes.py +0 -0
  771. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_session.py +0 -0
  772. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_slice_issue_attribution.py +0 -0
  773. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke.py +0 -0
  774. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke_live_checkout_restore.py +0 -0
  775. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke_workflow.py +0 -0
  776. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_spend_ceiling.py +0 -0
  777. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_spend_ceiling_coordinator.py +0 -0
  778. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_split.py +0 -0
  779. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_split_work.py +0 -0
  780. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_sql_dialect.py +0 -0
  781. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_sqlite_connect_ratchet.py +0 -0
  782. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stage_projection.py +0 -0
  783. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stale_busy_reviewer_697.py +0 -0
  784. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stalled_pipeline.py +0 -0
  785. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_state.py +0 -0
  786. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_state_review_findings_daemon.py +0 -0
  787. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_status_fleet_footer.py +0 -0
  788. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stop_1567.py +0 -0
  789. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_store_contract.py +0 -0
  790. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_store_migrate.py +0 -0
  791. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stuck.py +0 -0
  792. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  793. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_terminal_command.py +0 -0
  794. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_author.py +0 -0
  795. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_chat.py +0 -0
  796. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_orchestrator.py +0 -0
  797. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_report.py +0 -0
  798. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_verdict_parsing.py +0 -0
  799. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_verdict_transcript_floor.py +0 -0
  800. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_text_io_encoding_audit.py +0 -0
  801. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_board_audit.py +0 -0
  802. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_config_load_1080.py +0 -0
  803. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_daemon_routing_906.py +0 -0
  804. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_tmux_host.py +0 -0
  805. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_tmux_session.py +0 -0
  806. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage.py +0 -0
  808. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage_limits.py +0 -0
  809. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage_rollup.py +0 -0
  810. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_venv_live_install_2121.py +0 -0
  811. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_version_single_source.py +0 -0
  812. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_watch.py +0 -0
  813. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  814. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_env_venv_isolation.py +0 -0
  815. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_events.py +0 -0
  816. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_image_pin_sync.py +0 -0
  817. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_safety.py +0 -0
  818. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_test_scoping.py +0 -0
  819. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worktree.py +0 -0
  820. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  821. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_write_parity.py +0 -0
  822. {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.328
3
+ Version: 0.5.330
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.328
3
+ Version: 0.5.330
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.328",
2
+ "tag": "0.5.330",
3
3
  "distance": 0,
4
- "node": "g96977c771489f05d7c30eb4cc2696206c872072b",
4
+ "node": "g1b5009cd9bd233460972d0e1bfca11135eb4058b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-31"
@@ -4282,7 +4282,41 @@ exists. Any time the operator gives you a substantive fact about the \
4282
4282
  client, the users, or the scope, say back what you would record and ask \
4283
4283
  whether to record it. Keep the wording theirs, not your paraphrase — the \
4284
4284
  ledger is verbatim by design, and the narrative (which is regenerable) is \
4285
- where summarizing belongs.\
4285
+ where summarizing belongs.
4286
+
4287
+ **Confirming a decision on the operator's instruction (#2998).** The base \
4288
+ prompt above says never to run `coord portal decision confirm` — that rule \
4289
+ was written for a session with nobody to ask. You have someone to ask: the \
4290
+ operator sitting at this terminal, who is exactly who that command is \
4291
+ reserved for. What never changes, headless or attended, is that YOU may \
4292
+ never confirm your own proposal on your own initiative — inferring consent, \
4293
+ or treating agreement about something else as consent to confirm, is \
4294
+ exactly the self-approval the base rule exists to prevent.
4295
+
4296
+ But when the operator gives you an EXPLICIT, PRESENT-TURN instruction to \
4297
+ confirm a specific decision ("confirm decision 8", "yes, confirm that"), you \
4298
+ MAY act on it, in this order:
4299
+
4300
+ 1. Quote the operator's instruction back, verbatim, so the transcript makes \
4301
+ unambiguous that this was ordered, not inferred.
4302
+ 2. Record the attribution on the ledger BEFORE confirming, so a later \
4303
+ session (or a human reading the ledger) can see this was operator-\
4304
+ instructed rather than session-initiated:
4305
+
4306
+ coord portal note <submission_id> "Operator instructed: confirm decision #<seq> (\"<their exact words>\")"
4307
+
4308
+ 3. Only then run:
4309
+
4310
+ coord portal decision confirm <submission_id> <seq>
4311
+
4312
+ Do not collapse this into one step, and do not run it on a vague or implied \
4313
+ go-ahead — if you are not sure which decision the operator means, ask for \
4314
+ the seq before running anything. This carve-out covers `decision confirm` \
4315
+ ONLY. Every other entry on the deny list stays forbidden in this session \
4316
+ exactly as it is headlessly (raw `gh` mutations, `git push`, `git commit`, \
4317
+ destructive git, `coord approve`, `coord merge`, `coord assign`) — an \
4318
+ operator being present changes who may authorize a RESERVED command, it \
4319
+ does not change whether a DANGEROUS one is safe.\
4286
4320
  """
4287
4321
 
4288
4322
  # Deny list applied to decomposition-chat workers (#2533; extended #2750
@@ -4296,6 +4330,13 @@ where summarizing belongs.\
4296
4330
  # confirm` (the OPERATOR's move, never this session's own — #2750's "Propose"
4297
4331
  # terminal move must not self-confirm), while every write path this session
4298
4332
  # actually needs is allowed by omission.
4333
+ #
4334
+ # This is the HEADLESS list — used verbatim by `default_worker_command`'s
4335
+ # `spec.type == "decomposition-chat"` branch below, where the session
4336
+ # genuinely has nobody to ask, so `decision confirm` stays hard-denied. The
4337
+ # `--interactive` posture has an operator in the room; see
4338
+ # DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS below (#2998) for its own,
4339
+ # narrower carve-out of exactly this one entry.
4299
4340
  DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
4300
4341
  "Bash(gh issue edit *)",
4301
4342
  "Bash(gh issue create *)",
@@ -4324,6 +4365,23 @@ DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
4324
4365
  "Bash(coord portal decision confirm *)",
4325
4366
  ]
4326
4367
 
4368
+ # #2998: the ATTENDED counterpart to the list above — every entry the same
4369
+ # EXCEPT `coord portal decision confirm`. An attended session has an
4370
+ # operator sitting at the terminal, and `decision confirm` is RESERVED for
4371
+ # the operator (not DANGEROUS the way `git push`/`coord merge`/destructive
4372
+ # git are) — the question in that posture is who authorised it, not whether
4373
+ # it's safe. DECOMPOSITION_CHAT_ATTENDED_ADDENDUM spells out the condition
4374
+ # under which the session may actually run it (an explicit, present-turn
4375
+ # operator instruction, quoted back and attributed on the ledger via `coord
4376
+ # portal note` before confirming) — this list only stops blanket-denying it
4377
+ # so that addendum isn't fighting a FORBIDDEN COMMANDS entry telling the
4378
+ # session the opposite. Every genuinely dangerous entry stays denied,
4379
+ # unchanged, in both postures.
4380
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS: list[str] = [
4381
+ cmd for cmd in DECOMPOSITION_CHAT_DENY_COMMANDS
4382
+ if cmd != "Bash(coord portal decision confirm *)"
4383
+ ]
4384
+
4327
4385
  MOCK_AUTHOR_SYSTEM_PROMPT = """\
4328
4386
  You are an independent mock-author agent for Gate A of a milestone \
4329
4387
  (#930, docs/ORACLE_LOOP.md) — the pre-work architecture gate. You have \
@@ -80,9 +80,12 @@ from coord.drive_queue import (
80
80
  find_cycle,
81
81
  fired_holds,
82
82
  is_dispatch_failure_reason,
83
+ is_merge_gate_block_reason,
83
84
  is_permanent_block_reason,
84
85
  is_pre_dispatch_block_reason,
85
86
  is_unsatisfiable_prereq_reason,
87
+ merge_gate_remedy_command,
88
+ merge_plan_inspect_command,
86
89
  parse_after_spec,
87
90
  parse_key,
88
91
  pending_probe_targets,
@@ -4526,6 +4529,30 @@ def _requeue_command(entry: QueueEntry | None, key: str) -> str:
4526
4529
  )
4527
4530
 
4528
4531
 
4532
+ def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str) -> str:
4533
+ """The command a `blocked`/`oscillating` escalation should propose
4534
+ (#3016) — `_requeue_command` ONLY for a genuinely never-dispatched entry;
4535
+ a gate-specific remedy (or the safe read-only inspect fallback) whenever
4536
+ *reason* already names a merge-gate block.
4537
+
4538
+ `_requeue_command` is right exactly once: nothing was ever dispatched
4539
+ for this row (or every dispatch attempt died before an assignment
4540
+ existed), so there is nothing left to lose by dropping and re-adding it.
4541
+ But `is_merge_gate_block_reason` names the other shape — Work/Test/
4542
+ Review already completed and it is the MERGE stage that is stuck — where
4543
+ the same requeue would discard that completed cycle instead of fixing
4544
+ the one gate actually blocking it. `merge_gate_remedy_command` is the
4545
+ one place that maps a merge-gate reason to its safe one-line fix (or, if
4546
+ none is known blind, the inspect command); this only decides WHICH of
4547
+ the two families applies.
4548
+ """
4549
+ if is_merge_gate_block_reason(reason):
4550
+ parsed = parse_key(key)
4551
+ if parsed is not None:
4552
+ return merge_gate_remedy_command(reason, parsed[0], parsed[1])
4553
+ return _requeue_command(entry, key)
4554
+
4555
+
4529
4556
  @drive_queue_group.command("tick")
4530
4557
  @click.option(
4531
4558
  "--max-parallel",
@@ -5071,7 +5098,7 @@ def drive_queue_tick(
5071
5098
  f"{entry.position if entry else '?'} | after="
5072
5099
  f"{','.join(entry.after) if entry and entry.after else '(none)'}"
5073
5100
  ),
5074
- command=_requeue_command(entry, item.key),
5101
+ command=_blocked_escalation_command(entry, item.key, item.reason),
5075
5102
  )
5076
5103
 
5077
5104
  # #2230: an entry #2230's sweep would have resumed, but has already
@@ -5098,7 +5125,7 @@ def drive_queue_tick(
5098
5125
  f"/{MAX_BLOCKED_RESUMES} | position="
5099
5126
  f"{entry.position if entry else '?'}"
5100
5127
  ),
5101
- command=_requeue_command(entry, item.key),
5128
+ command=_blocked_escalation_command(entry, item.key, item.reason),
5102
5129
  )
5103
5130
 
5104
5131
  # #2806: a `blocked` entry #2230's sweep targeted this tick, but whose
@@ -5117,6 +5144,14 @@ def drive_queue_tick(
5117
5144
  if parsed is None:
5118
5145
  continue
5119
5146
  entry = by_key.get(item.key)
5147
+ # #3016: NEVER the `remove && add` requeue here — `item.reason`
5148
+ # already says "the next tick re-probes rather than guessing"
5149
+ # (#2806); a destructive requeue directly contradicts that, and
5150
+ # would additionally discard a completed Work/Test/Review cycle
5151
+ # for no reason connected to what actually failed (a probe, not
5152
+ # a gate). The read-only inspect command is the only thing safe
5153
+ # to propose when the tick itself does not yet know what shape
5154
+ # this block is.
5120
5155
  _escalate(
5121
5156
  parsed[0],
5122
5157
  parsed[1],
@@ -5125,7 +5160,7 @@ def drive_queue_tick(
5125
5160
  f"queue_state=blocked | gate_reading=unreadable | "
5126
5161
  f"position={entry.position if entry else '?'}"
5127
5162
  ),
5128
- command=_requeue_command(entry, item.key),
5163
+ command=merge_plan_inspect_command(parsed[0]),
5129
5164
  )
5130
5165
 
5131
5166
  if plan.alert is not None:
@@ -723,7 +723,7 @@ def _run_decompose_chat_interactive(
723
723
  from coord.agent import ( # noqa: PLC0415
724
724
  AssignmentSpec as _AssignmentSpecDc,
725
725
  DECOMPOSITION_CHAT_ATTENDED_ADDENDUM,
726
- DECOMPOSITION_CHAT_DENY_COMMANDS,
726
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS,
727
727
  DECOMPOSITION_CHAT_SYSTEM_PROMPT,
728
728
  build_deny_prompt,
729
729
  )
@@ -854,13 +854,21 @@ def _run_decompose_chat_interactive(
854
854
  # This session, by contrast, has a human in the pane: the addendum makes
855
855
  # its first turn confirm-then-write (#2742's absorbed half, which #2750
856
856
  # only ever wired into mode SELECTION, never into the posture itself).
857
+ #
858
+ # #2998: the deny list here is the ATTENDED one — identical to the
859
+ # headless DECOMPOSITION_CHAT_DENY_COMMANDS except it does not blanket-
860
+ # forbid `coord portal decision confirm`, because DECOMPOSITION_CHAT_
861
+ # ATTENDED_ADDENDUM spells out the (narrow, operator-instruction-gated)
862
+ # condition under which this session may run it. The headless path above
863
+ # keeps using the unmodified list, so a headless session still cannot
864
+ # confirm, self-confirm, or be talked into confirming.
857
865
  argv = provider.build_command(
858
866
  spec,
859
867
  resolved_model=resolved_model,
860
868
  system_prompt=(
861
869
  DECOMPOSITION_CHAT_SYSTEM_PROMPT
862
870
  + DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
863
- + build_deny_prompt(DECOMPOSITION_CHAT_DENY_COMMANDS)
871
+ + build_deny_prompt(DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS)
864
872
  ),
865
873
  allowed_tools="Read,Bash",
866
874
  )
@@ -94,6 +94,7 @@ from coord.gate_a import is_gate_a_refusal_reason
94
94
  from coord.github_ops import is_throttle_skip_reason, parse_throttle_skip_until
95
95
  from coord.issues_sync_status import STALENESS_WARN_SECONDS as ISSUE_CACHE_STALE_CEILING_S
96
96
  from coord.merge_queue import (
97
+ CI_STALE_PREFIX,
97
98
  PLAN_READY,
98
99
  ci_rollup_all_clear,
99
100
  is_ci_flaky_reason,
@@ -2746,6 +2747,74 @@ def _is_merge_gate_block_reason(reason: str | None) -> bool:
2746
2747
  return "merge_status=" in lowered
2747
2748
 
2748
2749
 
2750
+ def merge_plan_inspect_command(repo: str) -> str:
2751
+ """The read-only ``coord merge --plan`` fallback (#3016) — safe to
2752
+ propose whenever no specific, blind-runnable remedy is known, because it
2753
+ never mutates anything. Used both as :func:`merge_gate_remedy_command`'s
2754
+ own fallback and directly by callers escalating a #2806 ``gate_unreadable``
2755
+ outcome, whose reason text already says "the next tick re-probes" — the
2756
+ destructive `remove && add` requeue would directly contradict that.
2757
+ """
2758
+ return f"coord merge --plan --repo {repo}"
2759
+
2760
+
2761
+ def merge_gate_remedy_command(reason: str | None, repo: str, issue: int) -> str:
2762
+ """The gate-specific one-line fix for a `_is_merge_gate_block_reason`
2763
+ block (#3016) — never the blanket ``drive-queue remove && add`` requeue
2764
+ a synthetic escalation writer would otherwise reach for by default.
2765
+
2766
+ A requeue is not merely useless for a merge-gate block, it is actively
2767
+ destructive: it discards a completed Work/Test/Review cycle to re-run it
2768
+ from scratch, when the real fix is a single, targeted merge-lane command
2769
+ — exactly the misdirection `_is_merge_gate_block_reason`'s own docstring
2770
+ already names two live escalations (claude-coordinator#2405, coord-web#2)
2771
+ as having produced, and #2424 only fixed on the prose (``reason``) side,
2772
+ leaving this — the field a one-click "Run proposed fix" menu actually
2773
+ executes — untouched.
2774
+
2775
+ Only the CI-stale / stale-but-passed-smoke shape has a remedy that is
2776
+ both KNOWN and SAFE to run blind: ``coord merge --revalidate --only
2777
+ <repo>#<issue>``, the exact command :func:`coord.merge_queue.
2778
+ ci_stale_reason`'s own prose already tells the operator to run (matched
2779
+ textually here — via :data:`coord.merge_queue.CI_STALE_PREFIX` and
2780
+ :func:`is_stale_smoke_reason` — rather than re-derived, so the two can
2781
+ never diverge on what "CI stale" means).
2782
+
2783
+ Every other shape this matches — red CI (``checks failed``), a
2784
+ review/smoke gate divergence (``review_required —``/``smoke_required
2785
+ —``), an opaque terminal ``merge_status=`` — has no single command that
2786
+ is always both correct and safe to run without a human first reading
2787
+ the actual gate state (fixing a named CI check, recovering or re-running
2788
+ a review, deciding a UAT verdict). Guessing wrong there is worse than
2789
+ not guessing: the menu this feeds runs the command on one click. So
2790
+ every one of those falls back to the read-only inspect command instead
2791
+ — see #3016's design note ("a wrong 'Recommended' is worse than no
2792
+ recommendation").
2793
+
2794
+ Callers are expected to gate on :func:`_is_merge_gate_block_reason`
2795
+ first; called on a reason that ISN'T a merge-gate block at all, this
2796
+ still returns the safe inspect fallback rather than raising — there is
2797
+ no reason this text-matching helper needs to enforce that precondition
2798
+ itself when a wrong answer here is never destructive.
2799
+ """
2800
+ if reason and (
2801
+ CI_STALE_PREFIX.lower() in reason.lower() or is_stale_smoke_reason(reason)
2802
+ ):
2803
+ return f"coord merge --revalidate --only {entry_key(repo, issue)}"
2804
+ return merge_plan_inspect_command(repo)
2805
+
2806
+
2807
+ def is_merge_gate_block_reason(reason: str | None) -> bool:
2808
+ """Public alias for :func:`_is_merge_gate_block_reason` (#3016).
2809
+
2810
+ Same convention as ``is_empty_branch_death_reason``/
2811
+ ``is_unsatisfiable_prereq_reason``: the classifier is shared with the
2812
+ synthetic escalation writers in ``coord.commands.drive_queue``, so it
2813
+ gets a non-underscored name rather than a second copy of the text match.
2814
+ """
2815
+ return _is_merge_gate_block_reason(reason)
2816
+
2817
+
2749
2818
  def _is_empty_branch_death_reason(reason: str | None) -> bool:
2750
2819
  """#2363: does *reason* name the "claimed success, wrote nothing"
2751
2820
  signature — an acceptance-author or plain work session that exited
@@ -1987,6 +1987,78 @@ def test_a_dead_drives_own_exit_reason_reaches_the_queue_row(
1987
1987
  assert state._get_drive_escalation_local(REPO, 1762) is not None
1988
1988
 
1989
1989
 
1990
+ def test_exhausted_ci_stale_escalation_proposes_revalidate_not_a_requeue(
1991
+ cli, seed, launches, coord_db, config_file
1992
+ ):
1993
+ """#3016 regression fixture — the exact claude-coordinator#2983 shape
1994
+ (2026-08-31), rendered end-to-end through the real `coord drive-queue
1995
+ tick` -> escalation write -> `coord escalate list` path: a merge-gate
1996
+ death whose OWN reason already names `coord merge --revalidate` as the
1997
+ fix must not have the escalation's `proposed_command` — the ONE field a
1998
+ one-click "Run proposed fix" menu actually runs — propose the blanket
1999
+ `drive-queue remove && add` requeue instead. #2424 already fixed the
2000
+ parallel misdirection in the `reason` prose; this pins the field that
2001
+ executes.
2002
+ """
2003
+ from coord.audit import record_audit
2004
+
2005
+ seed(issues={2983: "open"})
2006
+ cli("add", REPO, "2983")
2007
+ cli("tick")
2008
+
2009
+ def _own_reason(n: int) -> str:
2010
+ return (
2011
+ f"drive exited for {REPO}#2983 (exit_code=1): merge attempted "
2012
+ f"3 times without landing.\n"
2013
+ " Last board state: status='PENDING' reason='CI stale: checks "
2014
+ "predate the current base (...); auto-rerun budget exhausted "
2015
+ "(2/2) — re-run CI (`coord merge --revalidate`) before merging'"
2016
+ f" (attempt {n})"
2017
+ )
2018
+
2019
+ launched_at = queued(2983)["launched_at"]
2020
+ _backdate(2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
2021
+ record_audit(
2022
+ tier="business", category="drive", event_type="drive_exited",
2023
+ actor="drive", summary=_own_reason(1), repo=REPO, issue=2983,
2024
+ ts=launched_at + 5,
2025
+ )
2026
+ cli("tick")
2027
+
2028
+ _backdate_reason(coord_db, 2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
2029
+ relaunch = cli("tick")
2030
+ assert relaunch.exit_code == 0, relaunch.output
2031
+ assert queued(2983)["state"] == "running"
2032
+
2033
+ launched_at = queued(2983)["launched_at"]
2034
+ _backdate(2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
2035
+ record_audit(
2036
+ tier="business", category="drive", event_type="drive_exited",
2037
+ actor="drive", summary=_own_reason(2), repo=REPO, issue=2983,
2038
+ ts=launched_at + 5,
2039
+ )
2040
+ second_retry = cli("tick")
2041
+ assert second_retry.exit_code == 0, second_retry.output
2042
+
2043
+ entry = queued(2983)
2044
+ assert entry["state"] == "blocked"
2045
+
2046
+ listing = CliRunner().invoke(
2047
+ main, ["escalate", "list", "--config", str(config_file)]
2048
+ )
2049
+ assert listing.exit_code == 0, listing.output
2050
+ assert f"{REPO} #2983" in listing.output
2051
+ assert "coord merge --revalidate" in listing.output
2052
+ assert f"--only {REPO}#2983" in listing.output
2053
+ assert "drive-queue remove" not in listing.output
2054
+ assert "drive-queue add" not in listing.output
2055
+
2056
+ escalation = state._get_drive_escalation_local(REPO, 2983)
2057
+ assert escalation is not None
2058
+ proposed = escalation["proposed_command"]
2059
+ assert proposed == f"coord merge --revalidate --only {REPO}#2983"
2060
+
2061
+
1990
2062
  def test_a_permanent_dispatch_refusal_blocks_on_the_first_tick_no_attempt_spent(
1991
2063
  cli, seed, launches,
1992
2064
  ):
@@ -10,6 +10,7 @@ import pytest
10
10
  from coord import decomposition_chat
11
11
  from coord.agent import (
12
12
  AssignmentSpec,
13
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS,
13
14
  DECOMPOSITION_CHAT_DENY_COMMANDS,
14
15
  DECOMPOSITION_CHAT_SYSTEM_PROMPT,
15
16
  WRITE_CAPABLE_SPEC_TYPES,
@@ -1108,6 +1109,116 @@ def test_deny_list_blocks_self_confirming_a_proposal():
1108
1109
  assert "Bash(coord portal decision confirm *)" in DECOMPOSITION_CHAT_DENY_COMMANDS
1109
1110
 
1110
1111
 
1112
+ # ── #2998: attended sessions may confirm on explicit operator instruction ──
1113
+
1114
+
1115
+ def test_attended_deny_list_omits_only_decision_confirm():
1116
+ """The attended deny list is the headless one minus exactly one entry —
1117
+ `coord portal decision confirm`. Every genuinely dangerous entry (raw
1118
+ `gh` mutations, `git push`/`commit`, destructive git, `coord approve`/
1119
+ `merge`/`assign`) must stay denied in both postures."""
1120
+ assert (
1121
+ "Bash(coord portal decision confirm *)"
1122
+ not in DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS
1123
+ )
1124
+ removed = set(DECOMPOSITION_CHAT_DENY_COMMANDS) - set(
1125
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS
1126
+ )
1127
+ assert removed == {"Bash(coord portal decision confirm *)"}
1128
+ # Nothing was added that wasn't already on the headless list.
1129
+ assert set(DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS) <= set(
1130
+ DECOMPOSITION_CHAT_DENY_COMMANDS
1131
+ )
1132
+
1133
+
1134
+ def test_headless_deny_list_is_untouched_by_the_attended_carve_out():
1135
+ """Acceptance bar: "the headless posture is unchanged" — the constant the
1136
+ headless dispatch path actually uses still hard-denies confirm."""
1137
+ assert "Bash(coord portal decision confirm *)" in DECOMPOSITION_CHAT_DENY_COMMANDS
1138
+
1139
+
1140
+ def test_attended_addendum_permits_confirm_on_explicit_operator_instruction():
1141
+ from coord.agent import DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1142
+
1143
+ assert "#2998" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1144
+ assert "coord portal decision confirm" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1145
+ # Requires an explicit, present-turn instruction — never inferred assent.
1146
+ assert "EXPLICIT, PRESENT-TURN instruction" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1147
+ assert "own initiative" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1148
+ # Attribution: a ledger note recorded BEFORE the confirm runs.
1149
+ assert "coord portal note" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1150
+ assert "Operator instructed" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
1151
+ confirm_section = DECOMPOSITION_CHAT_ATTENDED_ADDENDUM.split(
1152
+ "Confirming a decision on the operator's instruction"
1153
+ )[1]
1154
+ assert confirm_section.index("coord portal note") < confirm_section.index(
1155
+ "coord portal decision confirm <submission_id> <seq>"
1156
+ )
1157
+ # The dangerous entries are called out as staying forbidden regardless.
1158
+ assert "coord approve" in confirm_section
1159
+ assert "coord merge" in confirm_section
1160
+ assert "git push" in confirm_section
1161
+
1162
+
1163
+ def test_cli_interactive_dry_run_permits_confirm_but_keeps_dangerous_entries_denied():
1164
+ """The system prompt `_run_decompose_chat_interactive` actually builds
1165
+ must not list `coord portal decision confirm` under FORBIDDEN COMMANDS
1166
+ (the addendum, not a blanket deny, governs it) while every dangerous
1167
+ entry stays listed."""
1168
+ from click.testing import CliRunner
1169
+
1170
+ from coord.commands.portal import portal_group
1171
+
1172
+ runner = CliRunner()
1173
+ local = _machine("here", ["api"])
1174
+ cfg = Config(repos=[_repo("api")], machines=[local])
1175
+ with patch("coord.commands.portal._load_config", return_value=cfg), patch(
1176
+ "coord.decomposition_chat.resolve_approved_submission", return_value=SUBMISSION
1177
+ ), patch("coord.test_orchestrator.local_machine", return_value=local), patch(
1178
+ "coord.board_service.resolve", return_value=None
1179
+ ), patch("coord.state.record_dispatched_assignment"), patch(
1180
+ "coord.interactive.launch_human_attended_interactive"
1181
+ ):
1182
+ result = runner.invoke(
1183
+ portal_group,
1184
+ ["decompose-chat", "sub_2f6a1c", "--interactive", "--discuss", "--dry-run"],
1185
+ )
1186
+ assert result.exit_code == 0, result.output
1187
+ forbidden_section = result.output.split("FORBIDDEN")[-1]
1188
+ assert "coord portal decision confirm" not in forbidden_section
1189
+ assert "coord approve" in forbidden_section
1190
+ assert "coord merge" in forbidden_section
1191
+ assert "git push" in forbidden_section
1192
+ assert "rm -rf" in forbidden_section
1193
+ # ...but the addendum's own gated carve-out is present elsewhere in the
1194
+ # prompt, spelling out how confirm may be used.
1195
+ assert "#2998" in result.output
1196
+ assert "coord portal note" in result.output
1197
+
1198
+
1199
+ def test_default_worker_command_decomposition_chat_still_forbids_confirm():
1200
+ """Headless-unchanged regression guard: the actual argv the headless
1201
+ dispatch path builds still lists `coord portal decision confirm` under
1202
+ FORBIDDEN COMMANDS, with no operator-instruction carve-out text at all
1203
+ (that text lives only in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM, which the
1204
+ headless path never appends — see
1205
+ test_headless_decomposition_chat_prompt_has_no_attended_posture)."""
1206
+ spec = AssignmentSpec(
1207
+ repo_name="r",
1208
+ repo_path="/tmp/r",
1209
+ issue_number=0,
1210
+ issue_title="decomposition: sub_2f6a1c",
1211
+ briefing="b",
1212
+ type="decomposition-chat",
1213
+ )
1214
+ argv = default_worker_command(spec)
1215
+ idx = argv.index("--system-prompt")
1216
+ system_prompt = argv[idx + 1]
1217
+ forbidden_section = system_prompt.split("FORBIDDEN")[-1]
1218
+ assert "coord portal decision confirm" in forbidden_section
1219
+ assert "#2998" not in system_prompt
1220
+
1221
+
1111
1222
  # ── #2750 (IL-4): `coord portal decompose-chat` CLI — --discuss/--interactive ──
1112
1223
 
1113
1224
 
@@ -46,6 +46,9 @@ from coord.drive_queue import (
46
46
  entry_key,
47
47
  find_cycle,
48
48
  is_empty_branch_death_reason,
49
+ is_merge_gate_block_reason,
50
+ merge_gate_remedy_command,
51
+ merge_plan_inspect_command,
49
52
  parse_after_spec,
50
53
  parse_key,
51
54
  plan_tick,
@@ -5468,3 +5471,82 @@ def test_detect_unreachable_waits_reproduces_the_ms5_incident_shape():
5468
5471
  assert dep.key not in alert.reason
5469
5472
  assert "8 dependent entries" in alert.reason
5470
5473
  assert "self-heal" in alert.reason
5474
+
5475
+
5476
+ # ── #3016: the escalation-time remedy for a merge-gate block must be the ──
5477
+ # gate-specific fix, never the blanket `drive-queue remove && add` requeue —
5478
+ # a requeue discards a completed Work/Test/Review cycle instead of fixing
5479
+ # the one gate actually stuck. `merge_gate_remedy_command` is the mapping;
5480
+ # `is_merge_gate_block_reason` (already exercised elsewhere via #2424) is
5481
+ # what a caller gates on before reaching for it.
5482
+
5483
+
5484
+ def test_merge_gate_remedy_command_is_the_2983_regression_fixture():
5485
+ """The exact claude-coordinator#2983 shape (2026-08-31): a `merge
5486
+ attempted N times without landing` death whose OWN reason already names
5487
+ `coord merge --revalidate` as the fix must map to a scoped revalidate
5488
+ command, never a requeue."""
5489
+ reason = (
5490
+ "drive exited (exit_code=1): merge attempted 3 times without "
5491
+ "landing.\n Last board state: status='PENDING' reason='CI stale: "
5492
+ "checks predate the current base (...); auto-rerun budget exhausted "
5493
+ "(2/2) — re-run CI (`coord merge --revalidate`) before merging'"
5494
+ )
5495
+ assert is_merge_gate_block_reason(reason) is True
5496
+ command = merge_gate_remedy_command(reason, REPO, 2983)
5497
+ assert command == f"coord merge --revalidate --only {REPO}#2983"
5498
+ assert "drive-queue remove" not in command
5499
+ assert "drive-queue add" not in command
5500
+
5501
+
5502
+ def test_merge_gate_remedy_command_handles_a_stale_smoke_verdict():
5503
+ """The #1479 staleness race — `is_stale_smoke_reason` matches even
5504
+ without the `CI stale:` prefix at all — same remedy, same reasoning."""
5505
+ reason = "smoke test verdict is stale: recorded against base abc123, base is now def456"
5506
+ assert is_merge_gate_block_reason(reason) is True
5507
+ command = merge_gate_remedy_command(reason, REPO, 1650)
5508
+ assert command == f"coord merge --revalidate --only {REPO}#1650"
5509
+
5510
+
5511
+ def test_merge_gate_remedy_command_falls_back_to_inspect_for_red_ci():
5512
+ """`checks failed` (red CI) has no safe one-line auto-fix — the correct
5513
+ remedy is "fix the named check", which is not a command this can hand
5514
+ an operator to run blind. Falls back to the read-only inspect command
5515
+ rather than a requeue or a guess."""
5516
+ reason = "checks failed: build (exit 1)"
5517
+ assert is_merge_gate_block_reason(reason) is True
5518
+ command = merge_gate_remedy_command(reason, REPO, 1650)
5519
+ assert command == merge_plan_inspect_command(REPO)
5520
+ assert "revalidate" not in command
5521
+ assert "drive-queue remove" not in command
5522
+
5523
+
5524
+ def test_merge_gate_remedy_command_falls_back_to_inspect_for_review_required():
5525
+ reason = (
5526
+ "review_required — coord merge's own gate reports 'review missing', "
5527
+ "but this driver's OWN view already shows review_verdict='approved'"
5528
+ )
5529
+ assert is_merge_gate_block_reason(reason) is True
5530
+ assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
5531
+
5532
+
5533
+ def test_merge_gate_remedy_command_falls_back_to_inspect_for_smoke_required():
5534
+ reason = "smoke_required — coord merge's own gate reports 'no verdict'"
5535
+ assert is_merge_gate_block_reason(reason) is True
5536
+ assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
5537
+
5538
+
5539
+ def test_merge_gate_remedy_command_falls_back_to_inspect_for_opaque_merge_status():
5540
+ reason = "merge_status=NEEDS_ATTENTION — no number of retries changes this"
5541
+ assert is_merge_gate_block_reason(reason) is True
5542
+ assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
5543
+
5544
+
5545
+ def test_merge_gate_remedy_command_is_the_safe_inspect_fallback_for_none_and_non_block_reasons():
5546
+ """Never raises — called on a reason that isn't a merge-gate block at
5547
+ all (or is missing entirely), it still returns the safe, read-only
5548
+ fallback rather than asserting a precondition on its caller."""
5549
+ assert merge_gate_remedy_command(None, REPO, 1650) == merge_plan_inspect_command(REPO)
5550
+ ordinary = "no candidate machine available for claude-coordinator#1650"
5551
+ assert is_merge_gate_block_reason(ordinary) is False
5552
+ assert merge_gate_remedy_command(ordinary, REPO, 1650) == merge_plan_inspect_command(REPO)