code-coordinator 0.5.264__tar.gz → 0.5.266__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (873) hide show
  1. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/release.py +28 -2
  5. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_release_propagate.py +36 -0
  6. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/approved.rs +444 -16
  7. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/dialogs.rs +233 -0
  8. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/events.rs +12 -2
  9. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/fixtures.rs +2 -0
  10. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/mod.rs +14 -0
  11. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/settings_ui.rs +34 -0
  12. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/sidebar.rs +11 -0
  13. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/workflows/cargo-test.yml +0 -0
  24. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/workflows/release-tui.yml +0 -0
  26. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/.gitignore +0 -0
  28. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/GOAL.md +0 -0
  30. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/LICENSE +0 -0
  31. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/README.md +0 -0
  33. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/SOURCES.txt +0 -0
  34. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/scm_file_list.json +0 -0
  38. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/acceptance_drivers.py +0 -0
  43. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agent.py +0 -0
  44. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/approved_work.py +0 -0
  50. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/board_schema.py +0 -0
  55. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/ci_fix.py +0 -0
  62. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/ci_github.py +0 -0
  63. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/ci_gitlab.py +0 -0
  64. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/client.py +0 -0
  68. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/pr.py +0 -0
  88. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/config.py +0 -0
  100. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/config_reload.py +0 -0
  101. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/confirm_test.py +0 -0
  102. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/conflict_fix.py +0 -0
  103. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dao.py +0 -0
  104. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dashboard/__init__.py +0 -0
  105. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dashboard/fixture.py +0 -0
  106. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dashboard/index.html +0 -0
  107. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dashboard/server.py +0 -0
  108. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dashboard/terminal.py +0 -0
  109. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/db.py +0 -0
  110. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dead_end.py +0 -0
  111. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/decomposition_chat.py +0 -0
  112. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/README.md +0 -0
  113. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-agent.service +0 -0
  114. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-db-backup.service +0 -0
  115. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-db-backup.sh +0 -0
  116. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-db-backup.timer +0 -0
  117. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-drive-queue.service +0 -0
  118. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-drive-queue.timer +0 -0
  119. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-failure-notify.service +0 -0
  120. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-fleet-watchdog.service +0 -0
  121. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  122. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-notify.service +0 -0
  123. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-notify.timer +0 -0
  124. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-release-propagate.service +0 -0
  125. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-release-propagate.timer +0 -0
  126. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-release-window.service +0 -0
  127. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-release-window.timer +0 -0
  128. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-serve.service +0 -0
  129. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-web-dist-build.service +0 -0
  130. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-web-dist-build.timer +0 -0
  131. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy/coord-web.service +0 -0
  132. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy_manifest.py +0 -0
  133. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deploy_units.py +0 -0
  134. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/deps.py +0 -0
  135. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/diagnose.py +0 -0
  136. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dispatch.py +0 -0
  137. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/dist_name.py +0 -0
  138. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/drive.py +0 -0
  139. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/drive_queue.py +0 -0
  140. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/drive_state.py +0 -0
  141. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/events.py +0 -0
  142. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/failure_class.py +0 -0
  143. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/filelock.py +0 -0
  144. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/fleet_config_health.py +0 -0
  145. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/forge_availability.py +0 -0
  146. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/freshness.py +0 -0
  147. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/gate_a.py +0 -0
  148. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/gate_b.py +0 -0
  149. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/gate_snapshot.py +0 -0
  150. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/gates.py +0 -0
  151. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/github_ops.py +0 -0
  152. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/github_throttle.py +0 -0
  153. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/goal.py +0 -0
  154. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/graph_health.py +0 -0
  155. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/__init__.py +0 -0
  156. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/aggregate.py +0 -0
  157. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/__init__.py +0 -0
  158. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/agent_install.py +0 -0
  159. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/cargo_targets.py +0 -0
  160. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/claude_binary.py +0 -0
  161. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/coord_web_ci_pin.py +0 -0
  162. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/deploy_lane_facts.py +0 -0
  163. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/disk.py +0 -0
  164. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/fleet_board.py +0 -0
  165. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  166. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/fleet_phantom.py +0 -0
  167. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/fleet_unit_drift.py +0 -0
  168. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/graph.py +0 -0
  169. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/graphify_cli.py +0 -0
  170. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/index_lock.py +0 -0
  171. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/issues_sync_staleness.py +0 -0
  172. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/plan_usage.py +0 -0
  173. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/release_cordon.py +0 -0
  174. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/stalled_pipeline.py +0 -0
  177. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/timer_active.py +0 -0
  178. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/toolchain.py +0 -0
  179. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/unit_drift.py +0 -0
  180. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/unit_enablement.py +0 -0
  181. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/checks/worktrees.py +0 -0
  182. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/cli.py +0 -0
  183. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/context.py +0 -0
  184. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/fleet_snapshot.py +0 -0
  185. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/models.py +0 -0
  186. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/pypi.py +0 -0
  187. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/registry.py +0 -0
  188. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/render.py +0 -0
  189. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/health/units.py +0 -0
  190. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/hooks.py +0 -0
  191. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/housekeeping.py +0 -0
  192. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/interactive.py +0 -0
  193. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/issue_store.py +0 -0
  194. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/issues_sync_status.py +0 -0
  195. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/liveness_auditor.py +0 -0
  196. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/machine_pause.py +0 -0
  197. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/merge_queue.py +0 -0
  198. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/milestone_chat.py +0 -0
  199. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/milestone_dispatch.py +0 -0
  200. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/milestone_gate.py +0 -0
  201. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/milestone_order.py +0 -0
  202. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/mock_author.py +0 -0
  203. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/models.py +0 -0
  204. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/network.py +0 -0
  205. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/new_issue_chat.py +0 -0
  206. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/__init__.py +0 -0
  207. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/baseline.py +0 -0
  208. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/cli.py +0 -0
  209. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/collect.py +0 -0
  210. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/digest.py +0 -0
  211. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/models.py +0 -0
  212. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/predicate.py +0 -0
  213. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/service.py +0 -0
  214. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/store.py +0 -0
  215. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notifier/transport.py +0 -0
  216. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/notify.py +0 -0
  217. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/openapi.py +0 -0
  218. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/overlap_fence.py +0 -0
  219. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/overlap_predict.py +0 -0
  220. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/parentage.py +0 -0
  221. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/parentage_github.py +0 -0
  222. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/pipeline.py +0 -0
  223. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/plan_parser.py +0 -0
  224. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/plans.py +0 -0
  225. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/platform_paths.py +0 -0
  226. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/portal_bridge.py +0 -0
  227. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/portal_store.py +0 -0
  228. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/portal_sync.py +0 -0
  229. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/pr_body_lint.py +0 -0
  230. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/prereqs.py +0 -0
  231. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/reconcile.py +0 -0
  239. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/reconcile_tick.py +0 -0
  240. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/refine_chat.py +0 -0
  241. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/release_cordon.py +0 -0
  242. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/release_propagate.py +0 -0
  243. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/release_verify.py +0 -0
  244. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/release_window.py +0 -0
  245. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/repo_edit.py +0 -0
  246. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/repo_onboard.py +0 -0
  247. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/reports.py +0 -0
  248. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/revalidate.py +0 -0
  249. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/review.py +0 -0
  250. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/scorecard.py +0 -0
  251. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/self_health.py +0 -0
  252. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/serve_app.py +0 -0
  253. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  254. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  255. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  256. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/portal-followup/SKILL.md +0 -0
  259. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/release-now/SKILL.md +0 -0
  260. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  261. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  262. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/skills/update-issue/SKILL.md +0 -0
  263. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/smoke.py +0 -0
  264. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/spend_ceiling.py +0 -0
  265. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/split_work.py +0 -0
  266. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/sql.py +0 -0
  267. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/stage_projection.py +0 -0
  268. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/state.py +0 -0
  269. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/test_author.py +0 -0
  270. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/test_chat.py +0 -0
  271. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/test_orchestrator.py +0 -0
  272. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/test_report.py +0 -0
  273. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/tui_release.py +0 -0
  274. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/usage.py +0 -0
  275. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/usage_limits.py +0 -0
  276. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/usage_rollup.py +0 -0
  277. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coord/worker_events.py +0 -0
  278. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/coordinator.example.yml +0 -0
  279. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-agent.service +0 -0
  280. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-db-backup.service +0 -0
  281. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-db-backup.sh +0 -0
  282. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-db-backup.timer +0 -0
  283. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-drive-queue.service +0 -0
  284. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-drive-queue.timer +0 -0
  285. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-failure-notify.service +0 -0
  286. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-failure-notify.sh +0 -0
  287. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-fleet-watchdog.service +0 -0
  288. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-fleet-watchdog.timer +0 -0
  289. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-notify.service +0 -0
  290. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-notify.timer +0 -0
  291. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-release-propagate.service +0 -0
  292. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-release-propagate.timer +0 -0
  293. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-release-window.service +0 -0
  294. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-release-window.timer +0 -0
  295. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-serve.service +0 -0
  296. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-web-dist-build.service +0 -0
  297. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-web-dist-build.sh +0 -0
  298. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-web-dist-build.timer +0 -0
  299. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-web-rollback.sh +0 -0
  300. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/coord-web.service +0 -0
  301. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/deploy/node-shim.sh +0 -0
  302. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  303. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ADR_COORD_WEB_CI.md +0 -0
  304. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ADR_COORD_WEB_DIST.md +0 -0
  305. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/AGENT_OPERATIONS.md +0 -0
  306. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ARCHITECTURE.md +0 -0
  307. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ARCH_SECURITY_GATES.md +0 -0
  308. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/COCKPIT.md +0 -0
  309. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/CONTROL_CENTER.md +0 -0
  310. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/COST_DISCIPLINE.md +0 -0
  311. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/CROSS_PLATFORM.md +0 -0
  312. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/CUSTOMER_FACING_APPS.md +0 -0
  313. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/CUSTOMER_PORTAL.md +0 -0
  314. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/DRIVE_QUEUE.md +0 -0
  315. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/EPHEMERAL_WORKERS.md +0 -0
  316. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/FORGE_MIGRATION.md +0 -0
  317. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/GRAPHIFY_SETUP.md +0 -0
  318. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ISSUE_GUIDANCE.md +0 -0
  319. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/MAC_MINI.md +0 -0
  320. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  321. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/NOTIFIER.md +0 -0
  322. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/OPENCODE_VERIFICATION.md +0 -0
  323. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/OPERATING_GOTCHAS.md +0 -0
  324. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/OPERATOR_GUIDES.md +0 -0
  325. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/ORACLE_LOOP.md +0 -0
  326. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/PHONE_WEBAPP.md +0 -0
  327. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/PIPELINE_V2.md +0 -0
  328. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/PLATFORM_EVOLUTION.md +0 -0
  329. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/SECOND_BACKEND.md +0 -0
  330. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/STORE_SERVICE.md +0 -0
  331. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  332. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/WEB_CONTROL_CENTER.md +0 -0
  333. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/WSL_WINDOWS_WORKER.md +0 -0
  334. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/mocks/web/README.md +0 -0
  335. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/mocks/web/_tokens.css +0 -0
  336. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/mocks/web/issue-detail.html +0 -0
  337. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/mocks/web/pipeline-narrow.html +0 -0
  338. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/docs/mocks/web/pipeline-wide.html +0 -0
  339. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/graphify-out/.gitignore +0 -0
  340. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/install-agent.sh +0 -0
  341. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/pyproject.toml +0 -0
  342. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/audit_review_verdict_overrides.py +0 -0
  343. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  344. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/build-worker-image.sh +0 -0
  345. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/coordinator-machine.py +0 -0
  346. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/epic-down.sh +0 -0
  347. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/epic-up.sh +0 -0
  348. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/preflight.sh +0 -0
  349. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/provision-worker.sh +0 -0
  350. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  351. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  352. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/azure-workers/verify-github-token.sh +0 -0
  353. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/check_gh_argv_containment.py +0 -0
  354. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/codegen.py +0 -0
  355. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/coord-test-runner.sh +0 -0
  356. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/coord-venv-rollback.sh +0 -0
  357. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/drive-batch.sh +0 -0
  358. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/fleet_watchdog.py +0 -0
  359. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/gen_board_fixture.py +0 -0
  360. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/gen_mock_index.py +0 -0
  361. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/next_release_tag.py +0 -0
  362. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/run_tests_in_populated_home.sh +0 -0
  363. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/run_tests_without_gh.sh +0 -0
  364. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/smoke_437_interactive.py +0 -0
  365. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/verify_878_review_capture.py +0 -0
  366. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/verify_release_published.py +0 -0
  367. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/scripts/verify_release_wheel.py +0 -0
  368. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/setup.cfg +0 -0
  369. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/SMOKE_SET.md +0 -0
  370. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/__init__.py +0 -0
  371. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  372. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/contract.md +0 -0
  373. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/manifest.yml +0 -0
  374. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  375. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  376. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  377. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  378. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-37/conftest.py +0 -0
  379. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-37/contract.md +0 -0
  380. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-37/manifest.yml +0 -0
  381. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  382. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  383. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/contract.md +0 -0
  384. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/manifest.yml +0 -0
  385. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  386. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  387. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  389. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  390. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  391. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  392. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  393. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  394. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  395. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/contract.md +0 -0
  396. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  397. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  398. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/manifest.yml +0 -0
  399. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  400. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-51/tsconfig.json +0 -0
  401. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  402. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  403. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  404. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/contract.md +0 -0
  405. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  406. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/manifest.yml +0 -0
  407. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  408. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  409. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  410. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  411. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  412. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  413. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  414. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  415. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  416. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  417. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  418. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  419. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/contract.md +0 -0
  420. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  421. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/manifest.yml +0 -0
  422. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  423. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  424. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  425. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  426. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  427. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  428. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/conftest.py +0 -0
  430. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/board-pipeline-basic.json +0 -0
  431. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  432. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  433. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  434. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  435. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/all_pass.json +0 -0
  436. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  437. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/mixed_fail.json +0 -0
  438. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  439. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  440. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/skip.json +0 -0
  441. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/playwright/truncated.json +0 -0
  442. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  443. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  444. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  445. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  446. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  447. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  448. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  449. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  450. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_acceptance.py +0 -0
  451. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_acceptance_drivers.py +0 -0
  452. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent.py +0 -0
  453. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_api_error.py +0 -0
  454. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_app.py +0 -0
  455. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_branch_base.py +0 -0
  456. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_branch_capture.py +0 -0
  457. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_config_free_1712.py +0 -0
  458. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_deploy_units_endpoint.py +0 -0
  459. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_dirty_worktree.py +0 -0
  460. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  461. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_graph_self_heal.py +0 -0
  462. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_health_h3.py +0 -0
  463. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_idle_restart.py +0 -0
  464. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_push_failure.py +0 -0
  465. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_reap.py +0 -0
  466. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_repos_and_pull.py +0 -0
  467. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_restart_services_endpoint.py +0 -0
  468. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_skills_self_heal.py +0 -0
  469. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_startup_diagnostics.py +0 -0
  470. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_update.py +0 -0
  471. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_update_bluegreen.py +0 -0
  472. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_usage_limit.py +0 -0
  473. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_agent_zero_commit.py +0 -0
  474. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ambient_home_isolation.py +0 -0
  475. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_approve_dependency_busy_2804.py +0 -0
  476. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_approve_reject_plan.py +0 -0
  477. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_approve_usage_gate.py +0 -0
  478. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_approved_work_2532.py +0 -0
  479. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_assignment_already_recorded_daemon.py +0 -0
  480. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_audit_log.py +0 -0
  481. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_audit_outcome.py +0 -0
  482. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_audit_query.py +0 -0
  483. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_auto_loop.py +0 -0
  484. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_auto_release_publish_2035.py +0 -0
  485. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_base_checkout_restore.py +0 -0
  486. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_block_log.py +0 -0
  487. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_cap_762.py +0 -0
  488. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_fixture.py +0 -0
  489. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_read_path.py +0 -0
  490. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_schema.py +0 -0
  491. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_service.py +0 -0
  492. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_state.py +0 -0
  493. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_board_wire.py +0 -0
  494. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_brain.py +0 -0
  495. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_branch_model.py +0 -0
  496. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_bug_intake.py +0 -0
  497. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_build_worker_image_env_update.py +0 -0
  498. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cargo_cache.py +0 -0
  499. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_check_gh_argv_containment.py +0 -0
  500. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ci_acceptance_gate_1950.py +0 -0
  501. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ci_fix.py +0 -0
  502. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ci_gitlab.py +0 -0
  503. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ci_parity_2091.py +0 -0
  504. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_ci_store.py +0 -0
  505. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_claim.py +0 -0
  506. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_claude_md_budget.py +0 -0
  507. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_acceptance.py +0 -0
  508. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_assign.py +0 -0
  509. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  510. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_assign_interactive_remote.py +0 -0
  511. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_assign_provider.py +0 -0
  512. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  513. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_audit.py +0 -0
  514. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_chat_continue.py +0 -0
  515. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_decide.py +0 -0
  516. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_diagnose_config_provenance.py +0 -0
  517. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_diagnose_forge_availability.py +0 -0
  518. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_diagnose_graph.py +0 -0
  519. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_diagnose_self.py +0 -0
  520. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_doctor.py +0 -0
  521. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_doctor_config_free_1801.py +0 -0
  522. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  523. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_drive.py +0 -0
  524. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_drive_queue.py +0 -0
  525. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_escalate.py +0 -0
  526. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_fix_headless_review.py +0 -0
  527. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_gate_a.py +0 -0
  528. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_install_drift.py +0 -0
  529. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_install_skills.py +0 -0
  530. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_issue_comment.py +0 -0
  531. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_issue_create_label.py +0 -0
  532. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_issue_reopen.py +0 -0
  533. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_issue_view_list.py +0 -0
  534. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_merge.py +0 -0
  535. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_assign.py +0 -0
  536. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_capture.py +0 -0
  537. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_chat_add_child.py +0 -0
  538. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_dispatch.py +0 -0
  539. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_gate_b.py +0 -0
  540. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_gate_c.py +0 -0
  541. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_order.py +0 -0
  542. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  543. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_milestone_ship.py +0 -0
  544. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_network.py +0 -0
  545. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_new_issue_chat.py +0 -0
  546. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_plans.py +0 -0
  547. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_portal.py +0 -0
  548. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_pr.py +0 -0
  549. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_pull_artifact.py +0 -0
  550. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_queue.py +0 -0
  551. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_reattach_sessions.py +0 -0
  552. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_refine_board.py +0 -0
  553. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_release_preflight.py +0 -0
  554. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_release_window.py +0 -0
  555. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_repo_2220.py +0 -0
  556. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  557. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_scorecard.py +0 -0
  558. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_set_review_findings.py +0 -0
  559. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_advisory_terminal.py +0 -0
  560. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_contested_tag.py +0 -0
  561. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_merge_queue.py +0 -0
  562. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_provider.py +0 -0
  563. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_review_finalizing.py +0 -0
  564. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_test_failed_tag.py +0 -0
  565. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_status_usage_limit.py +0 -0
  566. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_sync_comments_873.py +0 -0
  567. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_test_plan.py +0 -0
  568. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_track.py +0 -0
  569. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_tui_update.py +0 -0
  570. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cli_wait.py +0 -0
  571. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_client_base_install.py +0 -0
  572. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_commands_common.py +0 -0
  573. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_comments.py +0 -0
  574. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_completion_summary.py +0 -0
  575. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config.py +0 -0
  576. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config_acceptance.py +0 -0
  577. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config_audit.py +0 -0
  578. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config_pricing.py +0 -0
  579. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  580. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_config_usage_gate.py +0 -0
  581. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_confirm_test.py +0 -0
  582. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_conflict_fix.py +0 -0
  583. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_conflict_fix_semantic.py +0 -0
  584. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  585. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_test.py +0 -0
  586. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_test_runner_baseline.py +0 -0
  587. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_test_runner_populated_home.py +0 -0
  588. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_test_runner_routing.py +0 -0
  589. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_test_runner_toolchain.py +0 -0
  590. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_uat.py +0 -0
  591. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coord_web_sse_restart_live.py +0 -0
  592. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_coordinator_machine.py +0 -0
  593. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_cross_platform_imports.py +0 -0
  594. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dao.py +0 -0
  595. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dashboard.py +0 -0
  596. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dashboard_fixture.py +0 -0
  597. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dashboard_terminal.py +0 -0
  598. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dashboard_terminal_live.py +0 -0
  599. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_db.py +0 -0
  600. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dead_end.py +0 -0
  601. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_decomposition_chat.py +0 -0
  602. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_coord_db_backup.py +0 -0
  603. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_coord_web_dist.py +0 -0
  604. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_coord_web_rollback.py +0 -0
  605. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_drive_queue_unit.py +0 -0
  606. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_failure_notify_unit.py +0 -0
  607. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_manifest.py +0 -0
  608. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_notify_unit.py +0 -0
  609. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_units_lane.py +0 -0
  610. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deploy_web_unit.py +0 -0
  611. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_deps.py +0 -0
  612. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_diagnose.py +0 -0
  613. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dispatch.py +0 -0
  614. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dispatch_target_validation.py +0 -0
  615. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_dist_name.py +0 -0
  616. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_done_housekeeping.py +0 -0
  617. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive.py +0 -0
  618. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue.py +0 -0
  619. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue_blocked_rendering.py +0 -0
  620. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue_launch_argv.py +0 -0
  621. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  622. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue_roll_pending.py +0 -0
  623. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  624. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_state.py +0 -0
  625. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_drive_tmux.py +0 -0
  626. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_epic_up_capability_detection.py +0 -0
  627. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  628. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_epic_up_image_provenance.py +0 -0
  629. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_errors.py +0 -0
  630. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_events.py +0 -0
  631. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_failure_class.py +0 -0
  632. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_filelock.py +0 -0
  633. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  634. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_fix_of_force_override.py +0 -0
  635. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_fleet_config_health.py +0 -0
  636. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_fleet_health_probes.py +0 -0
  637. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_fleet_health_snapshot.py +0 -0
  638. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_fleet_watchdog.py +0 -0
  639. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_forge_availability.py +0 -0
  640. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_freshness.py +0 -0
  641. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gate_a.py +0 -0
  642. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gate_b.py +0 -0
  643. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gate_snapshot_staleness.py +0 -0
  644. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gates.py +0 -0
  645. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  646. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_gen_mock_index.py +0 -0
  647. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_generated_rust_fixture.py +0 -0
  648. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_generated_types_fixture.py +0 -0
  649. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_github_ops.py +0 -0
  650. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_github_throttle.py +0 -0
  651. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_goal.py +0 -0
  652. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_graph_health.py +0 -0
  653. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_graph_selfheal_absent_2237.py +0 -0
  654. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_handoff.py +0 -0
  655. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_checks.py +0 -0
  656. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_cli.py +0 -0
  657. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_cli_graph.py +0 -0
  658. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_config.py +0 -0
  659. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_context.py +0 -0
  660. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_coord_web_ci_pin.py +0 -0
  661. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_deploy_lane_facts.py +0 -0
  662. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_fix.py +0 -0
  663. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_incident_regression.py +0 -0
  664. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_issues_sync_staleness.py +0 -0
  665. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_pypi.py +0 -0
  666. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_registry.py +0 -0
  667. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_release_cordon_probe.py +0 -0
  668. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_timer_active.py +0 -0
  669. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_toolchain.py +0 -0
  670. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_unit_drift.py +0 -0
  671. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_health_unit_enablement.py +0 -0
  672. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_hooks.py +0 -0
  673. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_human_attended_437.py +0 -0
  674. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_init.py +0 -0
  675. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_integration.py +0 -0
  676. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_briefing_echo.py +0 -0
  677. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_pane_log_2541.py +0 -0
  678. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_prefill_state.py +0 -0
  679. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_session_relaunch.py +0 -0
  680. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_test_verdict_backstop.py +0 -0
  681. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_token_attribution.py +0 -0
  682. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_interactive_worktree.py +0 -0
  683. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_issue_store_seam.py +0 -0
  684. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_issues_sync_status.py +0 -0
  685. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_liveness_auditor.py +0 -0
  686. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_liveness_notify.py +0 -0
  687. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_lock_contention_ratchet.py +0 -0
  688. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_machine_pause.py +0 -0
  689. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_merge_queue.py +0 -0
  690. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_merge_verify.py +0 -0
  691. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_milestone_chat.py +0 -0
  692. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_milestone_dispatch.py +0 -0
  693. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_milestone_gate.py +0 -0
  694. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_milestone_order.py +0 -0
  695. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_milestone_seam.py +0 -0
  696. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_mock_author.py +0 -0
  697. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_model_tiering.py +0 -0
  698. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_models.py +0 -0
  699. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_models_config_labels.py +0 -0
  700. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_needs_attention.py +0 -0
  701. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_network.py +0 -0
  702. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_new_issue_chat.py +0 -0
  703. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_next_release_tag.py +0 -0
  704. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_node_shim.py +0 -0
  705. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_baseline.py +0 -0
  706. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_cli.py +0 -0
  707. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_collect.py +0 -0
  708. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_config.py +0 -0
  709. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_drive_seam.py +0 -0
  710. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_isolation.py +0 -0
  711. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_predicate.py +0 -0
  712. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_quiet_hours.py +0 -0
  713. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notifier_service.py +0 -0
  714. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notify.py +0 -0
  715. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_notify_drain.py +0 -0
  716. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_openapi.py +0 -0
  717. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_operational_defaults.py +0 -0
  718. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_overlap_fence.py +0 -0
  719. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_overlap_predict.py +0 -0
  720. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_packaged_deploy_units.py +0 -0
  721. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_parentage.py +0 -0
  722. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_paste_landed.py +0 -0
  723. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  724. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_pipeline.py +0 -0
  725. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_plan_followup_approve_plan_command.py +0 -0
  726. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_plan_followup_pr_command.py +0 -0
  727. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_plan_followup_review_command.py +0 -0
  728. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_plan_only.py +0 -0
  729. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_plan_parser.py +0 -0
  730. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_platform_paths.py +0 -0
  731. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_portal_bridge.py +0 -0
  732. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_portal_config.py +0 -0
  733. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_portal_store.py +0 -0
  734. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_portal_sync.py +0 -0
  735. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_pr_body_lint.py +0 -0
  736. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_prereqs.py +0 -0
  737. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_production_db_guard.py +0 -0
  738. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_progress.py +0 -0
  739. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_provider_seam.py +0 -0
  740. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_providers.py +0 -0
  741. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_providers_config_labels.py +0 -0
  742. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_providers_pty.py +0 -0
  743. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_quiet_hours.py +0 -0
  744. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_quiet_hours_store_2146.py +0 -0
  745. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reap_merged_sessions.py +0 -0
  746. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reap_stale_interactive_tick.py +0 -0
  747. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile.py +0 -0
  748. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_branch.py +0 -0
  749. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_completions.py +0 -0
  750. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  751. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_merges.py +0 -0
  752. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_no_agent_record.py +0 -0
  753. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_tick.py +0 -0
  754. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reconcile_usage_limit_done.py +0 -0
  755. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_refine_chat.py +0 -0
  756. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_cordon_2101.py +0 -0
  757. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  758. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_cordon_deadlock_2240.py +0 -0
  759. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_cordon_stuck_2490.py +0 -0
  760. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_propagate.py +0 -0
  761. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_propagate_threshold.py +0 -0
  762. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_roll_between_legs_2854.py +0 -0
  763. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_roll_window_handoff.py +0 -0
  764. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_unified_1242.py +0 -0
  765. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_verify.py +0 -0
  766. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_release_window.py +0 -0
  767. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_remote_auto_prune.py +0 -0
  768. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_remote_interactive_reaper.py +0 -0
  769. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_repo_add.py +0 -0
  770. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_repo_edit_2220.py +0 -0
  771. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_repo_graph_fleet_2237.py +0 -0
  772. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_repo_onboard_2220.py +0 -0
  773. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_report_result_push.py +0 -0
  774. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_reports.py +0 -0
  775. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_retry.py +0 -0
  776. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_retry_advisory_1606.py +0 -0
  777. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_retry_type_1636.py +0 -0
  778. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_revalidate.py +0 -0
  779. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review.py +0 -0
  780. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_end_review_without_verdict.py +0 -0
  781. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_parse_failure_diagnostic.py +0 -0
  782. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_reaffirm.py +0 -0
  783. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_state.py +0 -0
  784. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_verdict_backstop.py +0 -0
  785. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_verdict_override_audit.py +0 -0
  786. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_verdict_relay.py +0 -0
  787. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_review_zero_commits.py +0 -0
  788. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_scoped_review_wiring.py +0 -0
  789. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_scorecard.py +0 -0
  790. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_self_health.py +0 -0
  791. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_serve.py +0 -0
  792. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_serve_app_board_trim.py +0 -0
  793. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_session.py +0 -0
  794. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_slice_issue_attribution.py +0 -0
  795. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_smoke.py +0 -0
  796. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_smoke_live_checkout_restore.py +0 -0
  797. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_smoke_workflow.py +0 -0
  798. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_spend_ceiling.py +0 -0
  799. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_spend_ceiling_coordinator.py +0 -0
  800. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_split.py +0 -0
  801. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_split_work.py +0 -0
  802. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_sql_dialect.py +0 -0
  803. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_stage_projection.py +0 -0
  804. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_stalled_pipeline.py +0 -0
  805. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_state.py +0 -0
  806. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_state_review_findings_daemon.py +0 -0
  807. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_status_fleet_footer.py +0 -0
  808. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_stop_1567.py +0 -0
  809. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_store_contract.py +0 -0
  810. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_stuck.py +0 -0
  811. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  812. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_terminal_command.py +0 -0
  813. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_author.py +0 -0
  814. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_chat.py +0 -0
  815. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_orchestrator.py +0 -0
  816. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_report.py +0 -0
  817. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_verdict_parsing.py +0 -0
  818. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_test_verdict_transcript_floor.py +0 -0
  819. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_text_io_encoding_audit.py +0 -0
  820. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_thin_client_board_audit.py +0 -0
  821. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_thin_client_config_load_1080.py +0 -0
  822. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_thin_client_daemon_routing_906.py +0 -0
  823. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_tmux_host.py +0 -0
  824. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_tmux_session.py +0 -0
  825. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_transcript_floor.py +0 -0
  826. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_usage.py +0 -0
  827. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_usage_limits.py +0 -0
  828. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_usage_rollup.py +0 -0
  829. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_venv_live_install_2121.py +0 -0
  830. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_version_single_source.py +0 -0
  831. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_watch.py +0 -0
  832. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  833. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worker_env_venv_isolation.py +0 -0
  834. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worker_events.py +0 -0
  835. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worker_image_pin_sync.py +0 -0
  836. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worker_safety.py +0 -0
  837. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worker_test_scoping.py +0 -0
  838. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worktree.py +0 -0
  839. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  840. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/Cargo.lock +0 -0
  841. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/Cargo.toml +0 -0
  842. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/cargo-config-local-quadraui.toml.example +0 -0
  843. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/audit.rs +0 -0
  844. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/chat.rs +0 -0
  845. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/data.rs +0 -0
  846. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/doc_tabs.rs +0 -0
  847. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/drive.rs +0 -0
  848. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/drive_queue.rs +0 -0
  849. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/escalation.rs +0 -0
  850. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/fleet_health.rs +0 -0
  851. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/fleet_sessions.rs +0 -0
  852. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/fleet_terminals.rs +0 -0
  853. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/format.rs +0 -0
  854. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/milestone_dag.rs +0 -0
  855. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/msv.rs +0 -0
  856. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/pipeline.rs +0 -0
  857. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/plans.rs +0 -0
  858. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/render.rs +0 -0
  859. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/reports.rs +0 -0
  860. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/sessions.rs +0 -0
  861. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/terminal.rs +0 -0
  862. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/tests.rs +0 -0
  863. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/types/generated.rs +0 -0
  864. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/types.rs +0 -0
  865. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/app/workspace.rs +0 -0
  866. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/bin/gtk.rs +0 -0
  867. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/commands.rs +0 -0
  868. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/lib.rs +0 -0
  869. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/main.rs +0 -0
  870. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/src/settings.rs +0 -0
  871. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/tests/acceptance.rs +0 -0
  872. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/tests/cli.rs +0 -0
  873. {code_coordinator-0.5.264 → code_coordinator-0.5.266}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.264
3
+ Version: 0.5.266
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.264
3
+ Version: 0.5.266
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.264",
2
+ "tag": "0.5.266",
3
3
  "distance": 0,
4
- "node": "g037604ea4782108f989df77750337682d26f2a36",
4
+ "node": "g23c969e54007ec14987e0a9980c5163bfa5f4e75",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -653,10 +653,22 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
653
653
  return out
654
654
 
655
655
 
656
- def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
656
+ def _ensure_roll_pending_marker(
657
+ target_version: str, *, reason: str, dry_run: bool = False
658
+ ) -> None:
657
659
  """#2587: make sure a roll-pending marker exists for *target_version*,
658
660
  without resetting an already-live one's clock.
659
661
 
662
+ #2869: ``dry_run=True`` is the ONE seam every call site must go through —
663
+ it never touches disk, only echoing what it *would* have written, in the
664
+ same "would ..." register as ``_fire_pending_roll``'s and
665
+ ``_apply_cordons``'s own dry-run wording. A caller-side ``if dry_run:``
666
+ guard around the call site was tried first and is exactly what let this
667
+ bug happen: the marker write is the one state mutation on the #2587
668
+ defer branch that never got that guard. Folding the check in here means
669
+ a future second call site inherits the guard for free instead of having
670
+ to remember to add its own.
671
+
660
672
  Called from the one place `coord release propagate` itself hits the
661
673
  #2112 daemon-busy deadlock it cannot roll through on its own (the
662
674
  daemon-first ``busy_hosts`` check in :func:`release_propagate`) — so a
@@ -692,10 +704,24 @@ def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
692
704
  if existing is not None and existing.target_version == target_version:
693
705
  return
694
706
  if existing is not None:
707
+ if dry_run:
708
+ click.echo(
709
+ f"--dry-run: would replace the pending roll-pending marker "
710
+ f"({existing.describe()}) with v{target_version} (reason="
711
+ f"{reason!r}), preserving its original set_at/deferrals (#2607)"
712
+ )
713
+ return
695
714
  write_roll_pending(
696
715
  _dataclasses.replace(existing, target_version=target_version, reason=reason)
697
716
  )
698
717
  return
718
+ if dry_run:
719
+ click.echo(
720
+ f"--dry-run: would set a roll-pending marker for v{target_version} "
721
+ f"(reason={reason!r}) — the drive-queue tick would then hold "
722
+ "capacity at 0 until the queue drains"
723
+ )
724
+ return
699
725
  write_roll_pending(
700
726
  RollPending(target_version=target_version, set_at=_time.time(), reason=reason)
701
727
  )
@@ -1097,7 +1123,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1097
1123
  # too, so a plain periodic `coord-release-propagate.timer` run also
1098
1124
  # arms the drive-queue tick's own inter-drive-gap trigger instead of
1099
1125
  # requiring an operator to separately reach for `nightly-window`.
1100
- _ensure_roll_pending_marker(record.target_version, reason="propagate")
1126
+ _ensure_roll_pending_marker(record.target_version, reason="propagate", dry_run=dry_run)
1101
1127
  _finish(rp.STATUS_DEFERRED, 0)
1102
1128
 
1103
1129
  still_busy = busy_hosts - set(current)
@@ -459,6 +459,42 @@ def test_a_busy_daemon_host_defers_the_whole_run(
459
459
  assert pending.reason == "propagate"
460
460
 
461
461
 
462
+ def test_a_busy_daemon_dry_run_defers_without_writing_the_marker(
463
+ valid_config_path, state_dir, no_network, monkeypatch
464
+ ):
465
+ """#2869: `--dry-run` promises to "print the window verdict and the roll
466
+ plan; change nothing" — but the daemon-busy defer branch above called
467
+ `_ensure_roll_pending_marker` unconditionally, so a purely read-only
468
+ `coord release propagate --dry-run` against a busy daemon armed the
469
+ REAL #2587 roll-pending marker, freezing the whole drive queue (capacity
470
+ forced to 0) even though nothing was supposed to change. This asserts
471
+ the marker file stays absent and the output names what would have been
472
+ set instead, matching `_fire_pending_roll`'s and `_apply_cordons`'s
473
+ existing dry-run wording conventions."""
474
+ monkeypatch.setattr(
475
+ release_cmd, "_fetch_board",
476
+ lambda: ({"assignments": [{"machine_name": "server", "issue_number": 9,
477
+ "status": "RUNNING"}]}, None),
478
+ )
479
+ monkeypatch.setattr(
480
+ release_cmd, "_roll_python",
481
+ lambda *a, **k: pytest.fail("a busy daemon must roll nothing, anywhere"),
482
+ )
483
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
484
+ daemon="server")
485
+ result = CliRunner().invoke(
486
+ main,
487
+ ["release", "propagate", "--config", str(valid_config_path),
488
+ "--target", "0.4.111", "--dry-run"],
489
+ )
490
+ assert result.exit_code == 0, result.output
491
+ assert dq_cmd.read_roll_pending() is None, (
492
+ "--dry-run must never write the real #2587 roll-pending marker"
493
+ )
494
+ assert "would set a roll-pending marker" in result.output
495
+ assert "0.4.111" in result.output
496
+
497
+
462
498
  def test_a_second_busy_daemon_deferral_does_not_re_arm_the_marker(
463
499
  valid_config_path, state_dir, no_network, monkeypatch
464
500
  ):
@@ -41,6 +41,13 @@ const APPROVED_COL_CLIENT: usize = 22;
41
41
  const APPROVED_COL_REPOS: usize = 16;
42
42
  const APPROVED_COL_OUTCOME: usize = 32;
43
43
 
44
+ /// #2863: label of the attended (`--interactive`, #2750) intake-session
45
+ /// context-menu item. Deliberately shares no substring with the sealed
46
+ /// ms-67 slice's `PULL_ITEM` needle ("Pull into decomposition session") so
47
+ /// that slice's `find`/`screen_contains` can never match this row by
48
+ /// accident.
49
+ pub(crate) const APPROVED_ATTENDED_INTAKE_ITEM: &str = "Open attended intake session…";
50
+
44
51
  /// Contract §3c: the literal placeholder for a row whose `repos_for_project`
45
52
  /// resolved empty — never a blank cell, so "no mapping" and "not yet
46
53
  /// loaded" are never visually indistinguishable.
@@ -168,32 +175,102 @@ impl CoordApp {
168
175
  })
169
176
  }
170
177
 
171
- /// Contract §4a: the one-item context menu for an approved-work-items
172
- /// row — "Pull into decomposition session", disabled (present, greyed,
173
- /// inert) when the row's `repos` resolved empty (the same "— no mapping
174
- /// —" condition §3c renders). Re-resolves `submission_id` against the
175
- /// current `approved_submissions()` rather than trusting a cached flag
176
- /// on the target, so a `/board` poll that changes the mapping between
178
+ /// Contract §4a: the context menu for an approved-work-items row.
179
+ ///
180
+ /// Item 1 — "Pull into decomposition session" (the HEADLESS dispatch),
181
+ /// disabled (present, greyed, inert) when the row's `repos` resolved
182
+ /// empty (the same "— no mapping —" condition §3c renders). It is
183
+ /// pinned by the sealed ms-67 slice as the **top** item with that exact
184
+ /// label and action id: never reorder, relabel, or re-flag it.
185
+ ///
186
+ /// Item 2 (#2863) — "Open attended intake session…", the `--interactive`
187
+ /// counterpart #2750 added to the very same CLI verb. It is a SECOND
188
+ /// item rather than a flag on the first precisely because §4c pins the
189
+ /// first one's argv verbatim; both stay, and #2750 wants them
190
+ /// interchangeable per iteration (the ledger, #2749, is the memory — not
191
+ /// the session). Greyed with a reason when this machine can't host it —
192
+ /// see [`Self::attended_intake_blocked_reason`].
193
+ ///
194
+ /// Re-resolves `submission_id` against the current
195
+ /// `approved_submissions()` rather than trusting a cached flag on the
196
+ /// target, so a `/board` poll that changes the mapping between
177
197
  /// right-click and click can't leave a stale decision baked in.
178
198
  pub(crate) fn context_menu_items_for_approved_row(
179
199
  &self,
180
200
  submission_id: &str,
181
201
  ) -> Vec<ContextMenuItem> {
182
- let mapped = self
202
+ let repos: Vec<String> = self
183
203
  .approved_submissions()
184
204
  .iter()
185
205
  .find(|e| e.submission_id == submission_id)
186
- .map(|e| !e.repos.is_empty())
187
- .unwrap_or(false);
188
- let item = ContextMenuItem::action(
206
+ .map(|e| e.repos.clone())
207
+ .unwrap_or_default();
208
+
209
+ let pull = ContextMenuItem::action(
189
210
  "pull-into-decomposition-session",
190
211
  "Pull into decomposition session",
191
212
  );
192
- vec![if mapped {
193
- item
213
+ let pull = if repos.is_empty() {
214
+ pull.disabled_because("no repo mapping")
215
+ } else {
216
+ pull
217
+ };
218
+
219
+ let attended = ContextMenuItem::action(
220
+ "open-attended-intake-session",
221
+ APPROVED_ATTENDED_INTAKE_ITEM,
222
+ );
223
+ let attended = match self.attended_intake_blocked_reason(&repos) {
224
+ Some(reason) => attended.disabled_because(&reason),
225
+ None => attended,
226
+ };
227
+
228
+ vec![pull, attended]
229
+ }
230
+
231
+ /// #2863: `Some(reason)` when "Open attended intake session…" must be
232
+ /// greyed for a row whose mapped repos are `repos`, `None` when it can
233
+ /// run here.
234
+ ///
235
+ /// Mirrors `_run_decompose_chat_interactive`'s own refusals
236
+ /// (`coord/commands/portal.py`) exactly, so the menu never offers a verb
237
+ /// the CLI is going to reject: no mapping at all, this host not being a
238
+ /// configured machine, or the local machine not claiming **every** repo
239
+ /// the submission maps to. `--interactive` is local-only for now (Track
240
+ /// B / #486 is remote), which is why there is no machine picker here.
241
+ ///
242
+ /// Note this reads `BoardData::local_machine`, resolved in
243
+ /// `data.rs` by a **case-insensitive** hostname compare — so it is not
244
+ /// affected by #2860 (the Python-side `local_machine()`'s
245
+ /// case-sensitive match). The CLI it launches still is; #2860 remains
246
+ /// the prerequisite for the launch itself succeeding, not for this
247
+ /// greying decision being right.
248
+ pub(crate) fn attended_intake_blocked_reason(&self, repos: &[String]) -> Option<String> {
249
+ if repos.is_empty() {
250
+ return Some("no repo mapping".to_string());
251
+ }
252
+ let local = self.data.local_machine.clone();
253
+ if local.is_empty() {
254
+ return Some("this machine is not in coordinator.yml".to_string());
255
+ }
256
+ const NO_REPOS: &[String] = &[];
257
+ let claimed = self
258
+ .data
259
+ .machines
260
+ .iter()
261
+ .find(|m| m.name == local)
262
+ .map(|m| m.repos.as_slice())
263
+ .unwrap_or(NO_REPOS);
264
+ let missing: Vec<&str> = repos
265
+ .iter()
266
+ .filter(|r| !claimed.iter().any(|c| c == *r))
267
+ .map(String::as_str)
268
+ .collect();
269
+ if missing.is_empty() {
270
+ None
194
271
  } else {
195
- item.disabled_because("no repo mapping")
196
- }]
272
+ Some(format!("{local} does not claim {}", missing.join(", ")))
273
+ }
197
274
  }
198
275
 
199
276
  /// Row index (into `approved_submissions()`) under `pos`, or `None` when
@@ -734,6 +811,10 @@ mod tests {
734
811
  /// `disabled_because` on an unmapped one. Unit-level, no driver/render
735
812
  /// needed; the sealed slice only ever observes the *consequence*
736
813
  /// (clicking is a no-op), never this struct-level fact directly.
814
+ ///
815
+ /// #2863 widened the menu to two items; the sealed slice pins the
816
+ /// headless one as the TOP item with an exact label and action id, so
817
+ /// this asserts index 0 specifically, not "the only item".
737
818
  #[test]
738
819
  fn context_menu_items_for_approved_row_gates_on_mapping() {
739
820
  let app = make_test_app(BoardData {
@@ -745,7 +826,6 @@ mod tests {
745
826
  });
746
827
 
747
828
  let mapped_items = app.context_menu_items_for_approved_row("sub_mapped");
748
- assert_eq!(mapped_items.len(), 1);
749
829
  assert!(!mapped_items[0].disabled, "mapped row's item must be enabled");
750
830
  assert_eq!(
751
831
  mapped_items[0].action_id.as_deref(),
@@ -753,13 +833,222 @@ mod tests {
753
833
  );
754
834
 
755
835
  let unmapped_items = app.context_menu_items_for_approved_row("sub_unmapped");
756
- assert_eq!(unmapped_items.len(), 1);
757
836
  assert!(
758
837
  unmapped_items[0].disabled,
759
838
  "unmapped row's item must be disabled, not omitted"
760
839
  );
761
840
  }
762
841
 
842
+ // ── #2863: the attended (`--interactive`, #2750) sibling item ──────────
843
+
844
+ /// Board data for the #2863 greying tests: one approved row mapped to
845
+ /// `repos`, plus a local machine named `"local"` that claims
846
+ /// `local_claims`.
847
+ fn attended_board(repos: Vec<String>, local_claims: Vec<String>) -> BoardData {
848
+ BoardData {
849
+ approved_submissions: vec![one_approved_row("sub_0000", repos)],
850
+ local_machine: "local".to_string(),
851
+ machines: vec![Machine {
852
+ name: "local".to_string(),
853
+ host: "local.example.ts.net".to_string(),
854
+ reachable: true,
855
+ active_count: 0,
856
+ repos: local_claims,
857
+ version: None,
858
+ worktree_bytes: 0,
859
+ }],
860
+ ..BoardData::default()
861
+ }
862
+ }
863
+
864
+ /// #2863: the new item is a SECOND entry, below the sealed slice's
865
+ /// pinned top item — never a change to it. The headless item's label,
866
+ /// position and action id are exactly what `tests/acceptance/ms-67`
867
+ /// asserts; regressing any of them breaks a sealed suite that only
868
+ /// `coord acceptance mock --amend` may move.
869
+ #[test]
870
+ fn attended_intake_item_is_added_below_the_pinned_headless_item() {
871
+ let app = make_test_app(attended_board(
872
+ vec!["claude-coordinator".to_string()],
873
+ vec!["claude-coordinator".to_string()],
874
+ ));
875
+ let items = app.context_menu_items_for_approved_row("sub_0000");
876
+
877
+ assert_eq!(items.len(), 2, "exactly two items: headless, then attended");
878
+ assert_eq!(
879
+ items[0].action_id.as_deref(),
880
+ Some("pull-into-decomposition-session"),
881
+ "ms-67 §4a pins the HEADLESS item as the top menu item",
882
+ );
883
+ assert_eq!(
884
+ items[0].label, "Pull into decomposition session",
885
+ "ms-67 §4a pins this label verbatim — do not touch it",
886
+ );
887
+ assert_eq!(
888
+ items[1].action_id.as_deref(),
889
+ Some("open-attended-intake-session"),
890
+ );
891
+ assert_eq!(items[1].label, APPROVED_ATTENDED_INTAKE_ITEM);
892
+ assert!(
893
+ !items[1].label.contains("Pull into decomposition session"),
894
+ "the attended label must not contain the sealed slice's PULL_ITEM \
895
+ needle, or its `find`/`click` helpers could target the wrong row",
896
+ );
897
+ }
898
+
899
+ /// #2863: `--interactive` is local-only (Track B / #486), and
900
+ /// `_run_decompose_chat_interactive` refuses when this machine doesn't
901
+ /// claim EVERY mapped repo. The menu greys the item with that reason
902
+ /// rather than offering a verb the CLI will reject.
903
+ #[test]
904
+ fn attended_intake_item_is_enabled_only_when_local_machine_claims_every_repo() {
905
+ // Claims all of them → enabled.
906
+ let app = make_test_app(attended_board(
907
+ vec!["grocery-list".to_string()],
908
+ vec!["grocery-list".to_string(), "claude-coordinator".to_string()],
909
+ ));
910
+ let items = app.context_menu_items_for_approved_row("sub_0000");
911
+ assert!(
912
+ !items[1].disabled,
913
+ "a machine claiming the mapped repo must be offered the attended \
914
+ session, reason: {:?}",
915
+ items[1].disabled_reason,
916
+ );
917
+
918
+ // Claims only SOME of them → greyed, and the reason names the gap.
919
+ let app = make_test_app(attended_board(
920
+ vec!["grocery-list".to_string(), "coord-portal".to_string()],
921
+ vec!["grocery-list".to_string()],
922
+ ));
923
+ let items = app.context_menu_items_for_approved_row("sub_0000");
924
+ assert!(items[1].disabled, "a partial claim must not be offered");
925
+ let reason = items[1].disabled_reason.clone().unwrap_or_default();
926
+ assert!(
927
+ reason.contains("coord-portal"),
928
+ "the greyed reason must name the repo this machine lacks, got: \
929
+ {reason:?}",
930
+ );
931
+ assert!(
932
+ !items[0].disabled,
933
+ "the HEADLESS item stays enabled — it dispatches to whichever \
934
+ machine claims the repo, so the local claim is irrelevant to it",
935
+ );
936
+ }
937
+
938
+ /// #2863: with no resolvable local machine (this host isn't in
939
+ /// `coordinator.yml` at all) the attended item is greyed with a reason
940
+ /// saying so — never silently enabled into a launch that must fail.
941
+ #[test]
942
+ fn attended_intake_item_is_greyed_when_this_host_is_not_a_configured_machine() {
943
+ let app = make_test_app(BoardData {
944
+ approved_submissions: vec![one_approved_row(
945
+ "sub_0000",
946
+ vec!["grocery-list".to_string()],
947
+ )],
948
+ ..BoardData::default()
949
+ });
950
+ let items = app.context_menu_items_for_approved_row("sub_0000");
951
+ assert!(items[1].disabled);
952
+ assert!(
953
+ items[1]
954
+ .disabled_reason
955
+ .as_deref()
956
+ .unwrap_or_default()
957
+ .contains("coordinator.yml"),
958
+ "reason should point at the config gap, got: {:?}",
959
+ items[1].disabled_reason,
960
+ );
961
+ }
962
+
963
+ /// #2863: an unmapped row greys BOTH items — the attended one for the
964
+ /// same "no repo mapping" reason §4a already gives the headless one.
965
+ #[test]
966
+ fn attended_intake_item_is_greyed_on_an_unmapped_row() {
967
+ let app = make_test_app(attended_board(vec![], vec!["grocery-list".to_string()]));
968
+ let items = app.context_menu_items_for_approved_row("sub_0000");
969
+ assert!(items[0].disabled && items[1].disabled);
970
+ assert_eq!(items[1].disabled_reason.as_deref(), Some("no repo mapping"));
971
+ }
972
+
973
+ /// #2863 acceptance: selecting the new item shells exactly
974
+ /// `coord portal decompose-chat <id> --interactive` — the same fact
975
+ /// `pull_action_spawns_the_decompose_chat_command` above asserts for the
976
+ /// headless argv, checked here on the launch LINE because the attended
977
+ /// path deliberately does not go through `command_runner` (it needs a
978
+ /// TTY; see `launch_attended_intake_session`).
979
+ #[test]
980
+ fn attended_intake_launch_cmd_is_the_sealed_argv_plus_interactive() {
981
+ let cmd = crate::app::dialogs::build_attended_intake_launch_cmd(None, "sub_0000");
982
+ assert_eq!(
983
+ cmd, "coord portal decompose-chat sub_0000 --interactive\r",
984
+ "must be §4c's verbatim verb plus the one #2750 flag",
985
+ );
986
+ assert!(cmd.ends_with('\r'), "launcher must auto-run");
987
+
988
+ let cmd = crate::app::dialogs::build_attended_intake_launch_cmd(
989
+ Some("/home/john/.coord/coordinator.yml"),
990
+ "sub_0000",
991
+ );
992
+ assert!(
993
+ cmd.contains("--config /home/john/.coord/coordinator.yml"),
994
+ "must inject --config like every other interactive launcher: {cmd}",
995
+ );
996
+ assert!(cmd.contains("--interactive"), "got: {cmd}");
997
+ }
998
+
999
+ /// #2863 acceptance (black-box, through the real
1000
+ /// `event → handle → open_context_menu → render` chain): right-clicking
1001
+ /// an approved row shows BOTH items.
1002
+ #[test]
1003
+ fn right_click_shows_both_the_headless_and_attended_items() {
1004
+ let mut app = make_test_app(attended_board(
1005
+ vec!["claude-coordinator".to_string()],
1006
+ vec!["claude-coordinator".to_string()],
1007
+ ));
1008
+ app.active_view = SidebarView::Approved;
1009
+ let mut driver = driver_with_shell(app, CoordApp::shell_config(), 120, 40);
1010
+ driver.render();
1011
+ driver.type_char('.');
1012
+ driver.render();
1013
+ let screen = driver.screen();
1014
+ assert!(
1015
+ screen.contains("Pull into decomposition session"),
1016
+ "the sealed slice's item must survive #2863 unchanged:\n{screen}",
1017
+ );
1018
+ assert!(
1019
+ screen.contains("Open attended intake session"),
1020
+ "#2863: the attended item must be offered on the same menu:\n\
1021
+ {screen}",
1022
+ );
1023
+ }
1024
+
1025
+ /// #2863 (companion to the above): on a machine that can't host it, the
1026
+ /// attended item is still RENDERED — greyed with its reason beside it,
1027
+ /// the same "present, greyed, inert" convention §4a pins for the
1028
+ /// headless item on an unmapped row. A hidden item leaves the operator
1029
+ /// with no clue why the board won't start the conversation.
1030
+ #[test]
1031
+ fn attended_item_renders_with_its_reason_when_this_machine_cannot_host_it() {
1032
+ let mut app = make_test_app(attended_board(
1033
+ vec!["grocery-list".to_string()],
1034
+ vec!["claude-coordinator".to_string()],
1035
+ ));
1036
+ app.active_view = SidebarView::Approved;
1037
+ let mut driver = driver_with_shell(app, CoordApp::shell_config(), 120, 40);
1038
+ driver.render();
1039
+ driver.type_char('.');
1040
+ driver.render();
1041
+ let screen = driver.screen();
1042
+ assert!(
1043
+ screen.contains("Open attended intake"),
1044
+ "the greyed item must still be painted:\n{screen}",
1045
+ );
1046
+ assert!(
1047
+ screen.contains("does not claim grocery-list"),
1048
+ "the reason must be visible so the operator knows WHY:\n{screen}",
1049
+ );
1050
+ }
1051
+
763
1052
  /// Contract §4a via the KEYBOARD path (`.` / Menu / Shift+F10) rather
764
1053
  /// than mouse right-click — `context_menu_target_for_selection`'s
765
1054
  /// `SidebarView::Approved` arm, unreached by the sealed slice.
@@ -812,4 +1101,143 @@ mod tests {
812
1101
  <submission_id>` (contract §4c)",
813
1102
  );
814
1103
  }
1104
+
1105
+ // ── #2863: one coherent error surface on a failed headless dispatch ────
1106
+
1107
+ /// #2863 acceptance: "A non-zero exit from either action leaves the
1108
+ /// operator with **one** coherent error surface — not a success toast
1109
+ /// followed by a failure toast followed by a timeout toast."
1110
+ ///
1111
+ /// Drives the REAL spawn → poll → result pipeline (`new_for_test`'s
1112
+ /// `no_spawn` branch resolves the canned result synchronously at spawn
1113
+ /// time), the same seam `gate_a_dispatch_failure_opens_full_text_error_
1114
+ /// dialog` uses.
1115
+ #[test]
1116
+ fn failed_decompose_chat_dispatch_leaves_exactly_one_error_surface() {
1117
+ let mut app = make_test_app(BoardData {
1118
+ approved_submissions: vec![one_approved_row(
1119
+ "sub_0000",
1120
+ vec!["claude-coordinator".to_string()],
1121
+ )],
1122
+ ..BoardData::default()
1123
+ });
1124
+ app.command_runner = crate::commands::CommandRunner::new_for_test();
1125
+ // The live 2026-08-27/28 failure, verbatim in shape: the thin-client
1126
+ // refusal, multi-sentence, with the actionable half at the END.
1127
+ let refusal = "Error: coord portal decompose-chat must run on the \
1128
+ daemon host. This machine is a thin client (board_service is set \
1129
+ in ~/.coord/client.toml). ssh to the daemon host and run it \
1130
+ there, or use the attended --interactive session locally.";
1131
+ app.command_runner.push_canned_result(1, refusal);
1132
+
1133
+ app.dispatch_approved_pull_into_decomposition("sub_0000");
1134
+ // Precondition: the optimistic §4d toast really did fire first —
1135
+ // otherwise "retracted" would pass vacuously.
1136
+ assert!(
1137
+ app.toasts
1138
+ .iter()
1139
+ .any(|(t, _, _)| t.title == "Decomposition chat"),
1140
+ "contract §4d's optimistic toast must fire at dispatch time",
1141
+ );
1142
+ assert!(app.pending_decomposition_chat.is_some());
1143
+
1144
+ app.run_periodic_work();
1145
+
1146
+ // 1. The optimistic "chat ready" toast is retracted — it is now
1147
+ // known to be false and must not sit beside the error.
1148
+ assert!(
1149
+ !app.toasts
1150
+ .iter()
1151
+ .any(|(t, _, _)| t.title == "Decomposition chat"),
1152
+ "the optimistic \"chat ready\" toast must be retracted once the \
1153
+ dispatch is known to have failed",
1154
+ );
1155
+ // 2. The generic 40-col "Command failed" toast is suppressed — the
1156
+ // modal is the single notification.
1157
+ assert!(
1158
+ !app.toasts.iter().any(|(t, _, _)| t.title == "Command failed"),
1159
+ "the truncating command-failed toast must be suppressed when the \
1160
+ full-text modal is shown",
1161
+ );
1162
+ // 3. The 30 s bind-timeout toast can never fire: nothing is pending.
1163
+ assert!(
1164
+ app.pending_decomposition_chat.is_none(),
1165
+ "a failed dispatch must disarm the bind timeout — no assignment \
1166
+ is ever going to appear, so its \"timed out\" toast would only \
1167
+ restate the same failure as a second, different problem",
1168
+ );
1169
+ // 4. The FULL refusal is readable, not a ~40-col truncation.
1170
+ let body = app
1171
+ .decompose_chat_error_dialog
1172
+ .as_ref()
1173
+ .expect("a failed decomposition dispatch must raise the modal");
1174
+ assert!(
1175
+ body.contains("thin client") && body.contains("--interactive"),
1176
+ "the modal must carry the COMPLETE reason including its trailing \
1177
+ actionable sentence, got: {body}",
1178
+ );
1179
+ assert!(
1180
+ body.contains("sub_0000"),
1181
+ "the modal must name the submission that failed, got: {body}",
1182
+ );
1183
+ }
1184
+
1185
+ /// #2863: the failure modal actually paints through the real
1186
+ /// ShellAdapter → render path, word-wrapped, and Esc dismisses it.
1187
+ #[test]
1188
+ fn decompose_chat_error_dialog_renders_full_reason_and_dismisses() {
1189
+ let mut app = make_test_app(BoardData::default());
1190
+ app.decompose_chat_error_dialog = Some(
1191
+ "Error: coord portal decompose-chat must run on the daemon host. \
1192
+ ssh to the daemon host and run it there."
1193
+ .to_string(),
1194
+ );
1195
+ let mut driver = driver_with_shell(app, CoordApp::shell_config(), 120, 40);
1196
+ driver.render();
1197
+ assert!(
1198
+ driver.screen_contains("Decomposition session dispatch failed"),
1199
+ "modal title must render on screen:\n{}",
1200
+ driver.screen(),
1201
+ );
1202
+ assert!(
1203
+ driver.screen_contains("ssh to the daemon host"),
1204
+ "the tail of the refusal — the actionable half a 40-col toast \
1205
+ eats — must be readable on screen:\n{}",
1206
+ driver.screen(),
1207
+ );
1208
+
1209
+ driver.press_named(quadraui::NamedKey::Escape);
1210
+ driver.render();
1211
+ assert!(
1212
+ !driver.screen_contains("Decomposition session dispatch failed"),
1213
+ "Esc must dismiss the modal:\n{}",
1214
+ driver.screen(),
1215
+ );
1216
+ }
1217
+
1218
+ /// #2863: the label matcher fires on the headless dispatch this issue
1219
+ /// fixes and on nothing else — a sibling `portal` verb keeps the normal
1220
+ /// command-failed toast.
1221
+ #[test]
1222
+ fn is_decompose_chat_dispatch_label_matches_only_that_dispatch() {
1223
+ use crate::app::dialogs::{
1224
+ decompose_chat_label_submission_id, is_decompose_chat_dispatch_label,
1225
+ };
1226
+ assert!(is_decompose_chat_dispatch_label(
1227
+ "coord portal decompose-chat SUB-1EA1D3"
1228
+ ));
1229
+ assert!(!is_decompose_chat_dispatch_label("coord portal ledger SUB-1EA1D3"));
1230
+ assert!(!is_decompose_chat_dispatch_label("coord portal link SUB-1EA1D3 42"));
1231
+ assert!(!is_decompose_chat_dispatch_label("coord milestone dispatch api 42"));
1232
+
1233
+ assert_eq!(
1234
+ decompose_chat_label_submission_id("coord portal decompose-chat SUB-1EA1D3"),
1235
+ Some("SUB-1EA1D3".to_string()),
1236
+ );
1237
+ assert_eq!(
1238
+ decompose_chat_label_submission_id("coord portal decompose-chat"),
1239
+ None,
1240
+ "a malformed label must not panic",
1241
+ );
1242
+ }
815
1243
  }