code-coordinator 0.5.197__tar.gz → 0.5.200__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 (791) hide show
  1. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/pipeline.py +62 -7
  5. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_pipeline.py +96 -0
  6. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/data.rs +49 -0
  7. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/dialogs.rs +54 -6
  8. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/doc_tabs.rs +6 -0
  9. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/drive.rs +2 -0
  10. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/drive_queue.rs +2 -0
  11. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/escalation.rs +2 -0
  12. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/fixtures.rs +4 -0
  13. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/milestone_dag.rs +40 -3
  14. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/mod.rs +19 -0
  15. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/pipeline.rs +55 -0
  16. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/render.rs +28 -2
  17. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/reports.rs +4 -0
  18. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/settings_ui.rs +38 -0
  19. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/tests.rs +975 -3
  20. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/types.rs +22 -0
  21. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/workspace.rs +2 -0
  22. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/workflows/cargo-test.yml +0 -0
  33. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/workflows/publish.yml +0 -0
  34. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/workflows/release-tui.yml +0 -0
  35. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.github/workflows/test.yml +0 -0
  36. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/.gitignore +0 -0
  37. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/CLAUDE.md +0 -0
  38. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/GOAL.md +0 -0
  39. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/LICENSE +0 -0
  40. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/MANIFEST.in +0 -0
  41. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/README.md +0 -0
  42. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/SOURCES.txt +0 -0
  43. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/dependency_links.txt +0 -0
  44. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/entry_points.txt +0 -0
  45. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/requires.txt +0 -0
  46. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/scm_file_list.json +0 -0
  47. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/code_coordinator.egg-info/top_level.txt +0 -0
  48. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/__init__.py +0 -0
  49. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/_board_mapping.py +0 -0
  50. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/acceptance.py +0 -0
  51. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/acceptance_drivers.py +0 -0
  52. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agent.py +0 -0
  53. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agent_app.py +0 -0
  54. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agent_update.py +0 -0
  55. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agents/opencode/.gitignore +0 -0
  56. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agents/opencode/agents/work.md +0 -0
  57. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/agents/opencode/routing.jsonc +0 -0
  58. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/audit.py +0 -0
  59. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/auto_loop.py +0 -0
  60. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/block_log.py +0 -0
  61. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/board_bool_guard.py +0 -0
  62. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/board_service.py +0 -0
  63. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/board_wire.py +0 -0
  64. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/brain.py +0 -0
  65. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/branch_model.py +0 -0
  66. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/bug_intake.py +0 -0
  67. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/cargo_cache.py +0 -0
  68. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/ci_store.py +0 -0
  70. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/claim.py +0 -0
  71. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/cli.py +0 -0
  72. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/client.py +0 -0
  73. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/__init__.py +0 -0
  74. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/_common.py +0 -0
  75. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/acceptance.py +0 -0
  76. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/agent_ops.py +0 -0
  77. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/audit.py +0 -0
  78. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/chat.py +0 -0
  79. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/dispatch.py +0 -0
  80. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/dispatch_workers.py +0 -0
  81. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/drive.py +0 -0
  82. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/drive_queue.py +0 -0
  83. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/gate_a.py +0 -0
  84. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/gates.py +0 -0
  85. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/issues.py +0 -0
  86. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/lifecycle.py +0 -0
  87. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/terminal.py +0 -0
  101. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/test_gate.py +0 -0
  102. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/commands/tui.py +0 -0
  103. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/comments.py +0 -0
  104. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/config.py +0 -0
  105. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/db.py +0 -0
  115. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-db-backup.service +0 -0
  119. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-db-backup.sh +0 -0
  120. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-db-backup.timer +0 -0
  121. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-drive-queue.service +0 -0
  122. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-drive-queue.timer +0 -0
  123. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-notify.service +0 -0
  124. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-notify.timer +0 -0
  125. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-release-propagate.service +0 -0
  126. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-release-propagate.timer +0 -0
  127. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-release-window.service +0 -0
  128. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-release-window.timer +0 -0
  129. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-serve.service +0 -0
  130. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-web-dist-build.service +0 -0
  131. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-web-dist-build.timer +0 -0
  132. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy/coord-web.service +0 -0
  133. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy_manifest.py +0 -0
  134. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deploy_units.py +0 -0
  135. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/deps.py +0 -0
  136. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/diagnose.py +0 -0
  137. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dispatch.py +0 -0
  138. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/dist_name.py +0 -0
  139. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/drive.py +0 -0
  140. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/drive_queue.py +0 -0
  141. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/drive_state.py +0 -0
  142. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/events.py +0 -0
  143. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/failure_class.py +0 -0
  144. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/filelock.py +0 -0
  145. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/fleet_config_health.py +0 -0
  146. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/forge_availability.py +0 -0
  147. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/freshness.py +0 -0
  148. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/gate_a.py +0 -0
  149. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/gate_b.py +0 -0
  150. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/gate_snapshot.py +0 -0
  151. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/gates.py +0 -0
  152. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/github_ops.py +0 -0
  153. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/goal.py +0 -0
  154. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/graph_health.py +0 -0
  155. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/__init__.py +0 -0
  156. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/aggregate.py +0 -0
  157. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/__init__.py +0 -0
  158. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/agent_install.py +0 -0
  159. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/cargo_targets.py +0 -0
  160. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/claude_binary.py +0 -0
  161. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/coord_web_ci_pin.py +0 -0
  162. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/deploy_lane_facts.py +0 -0
  163. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/disk.py +0 -0
  164. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/fleet_board.py +0 -0
  165. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  166. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/fleet_phantom.py +0 -0
  167. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/fleet_unit_drift.py +0 -0
  168. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/graph.py +0 -0
  169. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/graphify_cli.py +0 -0
  170. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/index_lock.py +0 -0
  171. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/plan_usage.py +0 -0
  172. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/repo_state.py +0 -0
  173. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/spawned_coord.py +0 -0
  174. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/checks/worktrees.py +0 -0
  179. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/cli.py +0 -0
  180. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/context.py +0 -0
  181. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/fleet_snapshot.py +0 -0
  182. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/models.py +0 -0
  183. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/pypi.py +0 -0
  184. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/registry.py +0 -0
  185. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/render.py +0 -0
  186. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/health/units.py +0 -0
  187. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/hooks.py +0 -0
  188. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/housekeeping.py +0 -0
  189. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/interactive.py +0 -0
  190. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/issue_store.py +0 -0
  191. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/liveness_auditor.py +0 -0
  192. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/machine_pause.py +0 -0
  193. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/merge_queue.py +0 -0
  194. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/milestone_chat.py +0 -0
  195. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/milestone_dispatch.py +0 -0
  196. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/milestone_gate.py +0 -0
  197. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/milestone_order.py +0 -0
  198. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/mock_author.py +0 -0
  199. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/models.py +0 -0
  200. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/network.py +0 -0
  201. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/new_issue_chat.py +0 -0
  202. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/__init__.py +0 -0
  203. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/baseline.py +0 -0
  204. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/cli.py +0 -0
  205. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/collect.py +0 -0
  206. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/digest.py +0 -0
  207. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/models.py +0 -0
  208. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/predicate.py +0 -0
  209. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/service.py +0 -0
  210. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/store.py +0 -0
  211. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notifier/transport.py +0 -0
  212. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/notify.py +0 -0
  213. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/openapi.py +0 -0
  214. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/overlap_fence.py +0 -0
  215. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/overlap_predict.py +0 -0
  216. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/parentage.py +0 -0
  217. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/parentage_github.py +0 -0
  218. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/plan_parser.py +0 -0
  219. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/plans.py +0 -0
  220. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/platform_paths.py +0 -0
  221. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/portal_bridge.py +0 -0
  222. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/portal_store.py +0 -0
  223. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/portal_sync.py +0 -0
  224. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/pr_body_lint.py +0 -0
  225. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/prereqs.py +0 -0
  226. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/progress.py +0 -0
  227. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/providers/__init__.py +0 -0
  228. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/providers/base.py +0 -0
  229. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/providers/claude.py +0 -0
  230. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/providers/claude_pty.py +0 -0
  231. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/providers/opencode.py +0 -0
  232. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/queue_diagnose.py +0 -0
  233. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/reconcile.py +0 -0
  234. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/reconcile_tick.py +0 -0
  235. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/refine_chat.py +0 -0
  236. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/release_cordon.py +0 -0
  237. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/release_propagate.py +0 -0
  238. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/release_verify.py +0 -0
  239. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/release_window.py +0 -0
  240. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/repo_edit.py +0 -0
  241. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/repo_onboard.py +0 -0
  242. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/reports.py +0 -0
  243. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/revalidate.py +0 -0
  244. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/review.py +0 -0
  245. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/scorecard.py +0 -0
  246. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/self_health.py +0 -0
  247. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/serve_app.py +0 -0
  248. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  249. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  250. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  251. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  252. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/portal-followup/SKILL.md +0 -0
  254. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  255. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  256. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/skills/update-issue/SKILL.md +0 -0
  257. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/smoke.py +0 -0
  258. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/spend_ceiling.py +0 -0
  259. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/split_work.py +0 -0
  260. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/stage_projection.py +0 -0
  261. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/state.py +0 -0
  262. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/test_author.py +0 -0
  263. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/test_chat.py +0 -0
  264. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/test_orchestrator.py +0 -0
  265. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/test_report.py +0 -0
  266. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/tui_release.py +0 -0
  267. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/usage.py +0 -0
  268. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/usage_limits.py +0 -0
  269. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/usage_rollup.py +0 -0
  270. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coord/worker_events.py +0 -0
  271. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/coordinator.example.yml +0 -0
  272. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-agent.service +0 -0
  273. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-db-backup.service +0 -0
  274. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-db-backup.sh +0 -0
  275. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-db-backup.timer +0 -0
  276. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-drive-queue.service +0 -0
  277. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-drive-queue.timer +0 -0
  278. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-notify.service +0 -0
  279. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-notify.timer +0 -0
  280. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-release-propagate.service +0 -0
  281. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-release-propagate.timer +0 -0
  282. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-release-window.service +0 -0
  283. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-release-window.timer +0 -0
  284. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-serve.service +0 -0
  285. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-web-dist-build.service +0 -0
  286. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-web-dist-build.sh +0 -0
  287. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-web-dist-build.timer +0 -0
  288. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-web-rollback.sh +0 -0
  289. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/coord-web.service +0 -0
  290. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/deploy/node-shim.sh +0 -0
  291. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  292. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ADR_COORD_WEB_CI.md +0 -0
  293. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ADR_COORD_WEB_DIST.md +0 -0
  294. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/AGENT_OPERATIONS.md +0 -0
  295. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ARCHITECTURE.md +0 -0
  296. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ARCH_SECURITY_GATES.md +0 -0
  297. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/COCKPIT.md +0 -0
  298. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/CONTROL_CENTER.md +0 -0
  299. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/COST_DISCIPLINE.md +0 -0
  300. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/CROSS_PLATFORM.md +0 -0
  301. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/CUSTOMER_PORTAL.md +0 -0
  302. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/DRIVE_QUEUE.md +0 -0
  303. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/EPHEMERAL_WORKERS.md +0 -0
  304. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/FORGE_MIGRATION.md +0 -0
  305. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/GRAPHIFY_SETUP.md +0 -0
  306. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ISSUE_GUIDANCE.md +0 -0
  307. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/MAC_MINI.md +0 -0
  308. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  309. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/NOTIFIER.md +0 -0
  310. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/OPENCODE_VERIFICATION.md +0 -0
  311. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/OPERATING_GOTCHAS.md +0 -0
  312. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/ORACLE_LOOP.md +0 -0
  313. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/PHONE_WEBAPP.md +0 -0
  314. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/PIPELINE_V2.md +0 -0
  315. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/PLATFORM_EVOLUTION.md +0 -0
  316. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/SECOND_BACKEND.md +0 -0
  317. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/STORE_SERVICE.md +0 -0
  318. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  319. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/WEB_CONTROL_CENTER.md +0 -0
  320. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/WSL_WINDOWS_WORKER.md +0 -0
  321. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/mocks/web/README.md +0 -0
  322. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/mocks/web/_tokens.css +0 -0
  323. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/mocks/web/issue-detail.html +0 -0
  324. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/mocks/web/pipeline-narrow.html +0 -0
  325. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/docs/mocks/web/pipeline-wide.html +0 -0
  326. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/graphify-out/.gitignore +0 -0
  327. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/install-agent.sh +0 -0
  328. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/pyproject.toml +0 -0
  329. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/audit_review_verdict_overrides.py +0 -0
  330. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  331. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/build-worker-image.sh +0 -0
  332. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/coordinator-machine.py +0 -0
  333. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/epic-down.sh +0 -0
  334. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/epic-up.sh +0 -0
  335. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/preflight.sh +0 -0
  336. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/provision-worker.sh +0 -0
  337. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  338. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  339. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/azure-workers/verify-github-token.sh +0 -0
  340. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/check_gh_argv_containment.py +0 -0
  341. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/codegen.py +0 -0
  342. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/coord-test-runner.sh +0 -0
  343. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/drive-batch.sh +0 -0
  344. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/gen_board_fixture.py +0 -0
  345. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/next_release_tag.py +0 -0
  346. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/run_tests_in_populated_home.sh +0 -0
  347. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/run_tests_without_gh.sh +0 -0
  348. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/smoke_437_interactive.py +0 -0
  349. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/verify_878_review_capture.py +0 -0
  350. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/verify_release_published.py +0 -0
  351. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/scripts/verify_release_wheel.py +0 -0
  352. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/setup.cfg +0 -0
  353. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/SMOKE_SET.md +0 -0
  354. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/__init__.py +0 -0
  355. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  356. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/contract.md +0 -0
  357. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/manifest.yml +0 -0
  358. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  359. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  360. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  361. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  362. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-37/conftest.py +0 -0
  363. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-37/contract.md +0 -0
  364. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-37/manifest.yml +0 -0
  365. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  366. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  367. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/contract.md +0 -0
  368. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/manifest.yml +0 -0
  369. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  370. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  371. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  372. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  373. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  374. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  375. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  376. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  377. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  378. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  379. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/contract.md +0 -0
  380. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  381. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  382. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/manifest.yml +0 -0
  383. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-51/tsconfig.json +0 -0
  385. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  386. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  387. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  388. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/contract.md +0 -0
  389. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  390. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/manifest.yml +0 -0
  391. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  392. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  393. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  394. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  395. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  396. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  397. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  398. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  399. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  400. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  401. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  402. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  403. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/conftest.py +0 -0
  404. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/board-pipeline-basic.json +0 -0
  405. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  406. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  407. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  408. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  409. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/all_pass.json +0 -0
  410. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  411. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/mixed_fail.json +0 -0
  412. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  413. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  414. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/skip.json +0 -0
  415. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/playwright/truncated.json +0 -0
  416. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  417. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  418. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  419. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  420. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  421. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  422. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  423. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  424. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_acceptance.py +0 -0
  425. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_acceptance_drivers.py +0 -0
  426. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent.py +0 -0
  427. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_api_error.py +0 -0
  428. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_app.py +0 -0
  429. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_branch_base.py +0 -0
  430. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_branch_capture.py +0 -0
  431. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_config_free_1712.py +0 -0
  432. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_deploy_units_endpoint.py +0 -0
  433. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_dirty_worktree.py +0 -0
  434. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  435. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_graph_self_heal.py +0 -0
  436. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_health_h3.py +0 -0
  437. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_idle_restart.py +0 -0
  438. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_push_failure.py +0 -0
  439. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_reap.py +0 -0
  440. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_repos_and_pull.py +0 -0
  441. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_restart_services_endpoint.py +0 -0
  442. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_skills_self_heal.py +0 -0
  443. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_startup_diagnostics.py +0 -0
  444. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_update.py +0 -0
  445. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_update_bluegreen.py +0 -0
  446. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_usage_limit.py +0 -0
  447. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_agent_zero_commit.py +0 -0
  448. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_ambient_home_isolation.py +0 -0
  449. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_approve_reject_plan.py +0 -0
  450. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_approve_usage_gate.py +0 -0
  451. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_assignment_already_recorded_daemon.py +0 -0
  452. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_audit_log.py +0 -0
  453. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_audit_outcome.py +0 -0
  454. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_audit_query.py +0 -0
  455. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_auto_loop.py +0 -0
  456. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_auto_release_publish_2035.py +0 -0
  457. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_base_checkout_restore.py +0 -0
  458. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_block_log.py +0 -0
  459. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_cap_762.py +0 -0
  460. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_fixture.py +0 -0
  461. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_read_path.py +0 -0
  462. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_service.py +0 -0
  463. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_state.py +0 -0
  464. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_board_wire.py +0 -0
  465. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_brain.py +0 -0
  466. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_branch_model.py +0 -0
  467. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_bug_intake.py +0 -0
  468. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_build_worker_image_env_update.py +0 -0
  469. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cargo_cache.py +0 -0
  470. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_check_gh_argv_containment.py +0 -0
  471. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_ci_acceptance_gate_1950.py +0 -0
  472. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_ci_parity_2091.py +0 -0
  473. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_ci_store.py +0 -0
  474. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_claim.py +0 -0
  475. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_acceptance.py +0 -0
  476. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_assign.py +0 -0
  477. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  478. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_assign_interactive_remote.py +0 -0
  479. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_assign_provider.py +0 -0
  480. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  481. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_audit.py +0 -0
  482. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_chat_continue.py +0 -0
  483. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_decide.py +0 -0
  484. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_diagnose_config_provenance.py +0 -0
  485. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_diagnose_forge_availability.py +0 -0
  486. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_diagnose_graph.py +0 -0
  487. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_diagnose_self.py +0 -0
  488. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_doctor.py +0 -0
  489. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_doctor_config_free_1801.py +0 -0
  490. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  491. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_drive.py +0 -0
  492. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_drive_queue.py +0 -0
  493. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_issue_create_label.py +0 -0
  499. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_issue_reopen.py +0 -0
  500. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_pull_artifact.py +0 -0
  515. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_queue.py +0 -0
  516. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_reattach_sessions.py +0 -0
  517. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_refine_board.py +0 -0
  518. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_release_preflight.py +0 -0
  519. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_release_propagate.py +0 -0
  520. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_release_window.py +0 -0
  521. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_repo_2220.py +0 -0
  522. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_merge_queue.py +0 -0
  526. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_provider.py +0 -0
  527. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_review_finalizing.py +0 -0
  528. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_test_failed_tag.py +0 -0
  529. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_status_usage_limit.py +0 -0
  530. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_sync_comments_873.py +0 -0
  531. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_test_plan.py +0 -0
  532. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_track.py +0 -0
  533. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_tui_update.py +0 -0
  534. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cli_wait.py +0 -0
  535. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_client_base_install.py +0 -0
  536. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_comments.py +0 -0
  537. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_completion_summary.py +0 -0
  538. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config.py +0 -0
  539. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config_acceptance.py +0 -0
  540. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config_audit.py +0 -0
  541. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config_pricing.py +0 -0
  542. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  543. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_config_usage_gate.py +0 -0
  544. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_confirm_test.py +0 -0
  545. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_conflict_fix.py +0 -0
  546. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_conflict_fix_semantic.py +0 -0
  547. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_test.py +0 -0
  548. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_test_runner_baseline.py +0 -0
  549. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_test_runner_populated_home.py +0 -0
  550. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_test_runner_routing.py +0 -0
  551. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_test_runner_toolchain.py +0 -0
  552. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dashboard.py +0 -0
  556. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dashboard_fixture.py +0 -0
  557. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dashboard_terminal.py +0 -0
  558. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dashboard_terminal_live.py +0 -0
  559. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_db.py +0 -0
  560. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dead_end.py +0 -0
  561. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_coord_db_backup.py +0 -0
  562. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_coord_web_dist.py +0 -0
  563. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_coord_web_rollback.py +0 -0
  564. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_drive_queue_unit.py +0 -0
  565. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_manifest.py +0 -0
  566. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_units_lane.py +0 -0
  567. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deploy_web_unit.py +0 -0
  568. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_deps.py +0 -0
  569. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_diagnose.py +0 -0
  570. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dispatch.py +0 -0
  571. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dispatch_target_validation.py +0 -0
  572. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_dist_name.py +0 -0
  573. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_drive.py +0 -0
  575. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_drive_queue.py +0 -0
  576. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_drive_state.py +0 -0
  577. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_drive_tmux.py +0 -0
  578. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_epic_up_capability_detection.py +0 -0
  579. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  580. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_epic_up_image_provenance.py +0 -0
  581. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_errors.py +0 -0
  582. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_events.py +0 -0
  583. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_failure_class.py +0 -0
  584. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_filelock.py +0 -0
  585. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  586. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_fix_of_force_override.py +0 -0
  587. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_fleet_config_health.py +0 -0
  588. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_fleet_health_probes.py +0 -0
  589. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_fleet_health_snapshot.py +0 -0
  590. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_forge_availability.py +0 -0
  591. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_freshness.py +0 -0
  592. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_gate_a.py +0 -0
  593. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_gate_b.py +0 -0
  594. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_gate_snapshot_staleness.py +0 -0
  595. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_gates.py +0 -0
  596. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  597. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_generated_types_fixture.py +0 -0
  598. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_github_ops.py +0 -0
  599. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_goal.py +0 -0
  600. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_graph_health.py +0 -0
  601. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_graph_selfheal_absent_2237.py +0 -0
  602. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_handoff.py +0 -0
  603. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_checks.py +0 -0
  604. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_cli.py +0 -0
  605. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_cli_graph.py +0 -0
  606. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_config.py +0 -0
  607. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_context.py +0 -0
  608. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_coord_web_ci_pin.py +0 -0
  609. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_deploy_lane_facts.py +0 -0
  610. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_incident_regression.py +0 -0
  611. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_pypi.py +0 -0
  612. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_registry.py +0 -0
  613. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_timer_active.py +0 -0
  614. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_toolchain.py +0 -0
  615. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_unit_drift.py +0 -0
  616. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_health_unit_enablement.py +0 -0
  617. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_hooks.py +0 -0
  618. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_human_attended_437.py +0 -0
  619. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_init.py +0 -0
  620. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_integration.py +0 -0
  621. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_briefing_echo.py +0 -0
  622. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_prefill_state.py +0 -0
  623. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_session_relaunch.py +0 -0
  624. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_test_verdict_backstop.py +0 -0
  625. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_token_attribution.py +0 -0
  626. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_interactive_worktree.py +0 -0
  627. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_issue_store_seam.py +0 -0
  628. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_liveness_auditor.py +0 -0
  629. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_liveness_notify.py +0 -0
  630. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_machine_pause.py +0 -0
  631. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_merge_queue.py +0 -0
  632. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_merge_verify.py +0 -0
  633. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_milestone_chat.py +0 -0
  634. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_milestone_dispatch.py +0 -0
  635. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_milestone_gate.py +0 -0
  636. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_milestone_order.py +0 -0
  637. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_milestone_seam.py +0 -0
  638. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_mock_author.py +0 -0
  639. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_model_tiering.py +0 -0
  640. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_models.py +0 -0
  641. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_models_config_labels.py +0 -0
  642. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_needs_attention.py +0 -0
  643. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_network.py +0 -0
  644. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_new_issue_chat.py +0 -0
  645. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_next_release_tag.py +0 -0
  646. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_node_shim.py +0 -0
  647. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_baseline.py +0 -0
  648. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_cli.py +0 -0
  649. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_collect.py +0 -0
  650. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_config.py +0 -0
  651. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_drive_seam.py +0 -0
  652. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_isolation.py +0 -0
  653. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_predicate.py +0 -0
  654. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_quiet_hours.py +0 -0
  655. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notifier_service.py +0 -0
  656. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notify.py +0 -0
  657. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_notify_drain.py +0 -0
  658. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_openapi.py +0 -0
  659. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_operational_defaults.py +0 -0
  660. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_overlap_fence.py +0 -0
  661. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_overlap_predict.py +0 -0
  662. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_packaged_deploy_units.py +0 -0
  663. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_parentage.py +0 -0
  664. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_paste_landed.py +0 -0
  665. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_plan_followup_approve_plan_command.py +0 -0
  666. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_plan_followup_pr_command.py +0 -0
  667. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_plan_followup_review_command.py +0 -0
  668. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_plan_only.py +0 -0
  669. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_plan_parser.py +0 -0
  670. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_platform_paths.py +0 -0
  671. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_portal_bridge.py +0 -0
  672. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_portal_config.py +0 -0
  673. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_portal_sync.py +0 -0
  674. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_pr_body_lint.py +0 -0
  675. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_prereqs.py +0 -0
  676. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_production_db_guard.py +0 -0
  677. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_progress.py +0 -0
  678. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_provider_seam.py +0 -0
  679. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_providers.py +0 -0
  680. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_providers_config_labels.py +0 -0
  681. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_providers_pty.py +0 -0
  682. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_quiet_hours.py +0 -0
  683. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_quiet_hours_store_2146.py +0 -0
  684. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reap_merged_sessions.py +0 -0
  685. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reap_stale_interactive_tick.py +0 -0
  686. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile.py +0 -0
  687. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_branch.py +0 -0
  688. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_completions.py +0 -0
  689. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_merges.py +0 -0
  690. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_no_agent_record.py +0 -0
  691. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_tick.py +0 -0
  692. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reconcile_usage_limit_done.py +0 -0
  693. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_refine_chat.py +0 -0
  694. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_cordon_2101.py +0 -0
  695. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  696. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_cordon_deadlock_2240.py +0 -0
  697. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_cordon_stuck_2490.py +0 -0
  698. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_propagate.py +0 -0
  699. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_unified_1242.py +0 -0
  700. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_verify.py +0 -0
  701. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_release_window.py +0 -0
  702. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_remote_auto_prune.py +0 -0
  703. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_remote_interactive_reaper.py +0 -0
  704. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_repo_edit_2220.py +0 -0
  705. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_repo_graph_fleet_2237.py +0 -0
  706. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_repo_onboard_2220.py +0 -0
  707. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_report_result_push.py +0 -0
  708. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_reports.py +0 -0
  709. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_retry.py +0 -0
  710. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_retry_advisory_1606.py +0 -0
  711. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_retry_type_1636.py +0 -0
  712. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_revalidate.py +0 -0
  713. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review.py +0 -0
  714. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_end_review_without_verdict.py +0 -0
  715. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_parse_failure_diagnostic.py +0 -0
  716. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_reaffirm.py +0 -0
  717. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_state.py +0 -0
  718. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_verdict_override_audit.py +0 -0
  720. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_verdict_relay.py +0 -0
  721. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_review_zero_commits.py +0 -0
  722. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_scoped_review_wiring.py +0 -0
  723. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_scorecard.py +0 -0
  724. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_self_health.py +0 -0
  725. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_serve.py +0 -0
  726. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_serve_app_board_trim.py +0 -0
  727. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_session.py +0 -0
  728. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_slice_issue_attribution.py +0 -0
  729. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_smoke.py +0 -0
  730. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_smoke_live_checkout_restore.py +0 -0
  731. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_smoke_workflow.py +0 -0
  732. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_spend_ceiling.py +0 -0
  733. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_spend_ceiling_coordinator.py +0 -0
  734. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_split.py +0 -0
  735. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_split_work.py +0 -0
  736. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_stage_projection.py +0 -0
  737. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_stalled_pipeline.py +0 -0
  738. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_state.py +0 -0
  739. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_state_review_findings_daemon.py +0 -0
  740. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_status_fleet_footer.py +0 -0
  741. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_stop_1567.py +0 -0
  742. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_stuck.py +0 -0
  743. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_terminal_command.py +0 -0
  744. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_author.py +0 -0
  745. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_chat.py +0 -0
  746. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_orchestrator.py +0 -0
  747. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_report.py +0 -0
  748. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_verdict_parsing.py +0 -0
  749. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_test_verdict_transcript_floor.py +0 -0
  750. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_thin_client_board_audit.py +0 -0
  751. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_thin_client_config_load_1080.py +0 -0
  752. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_thin_client_daemon_routing_906.py +0 -0
  753. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_tmux_host.py +0 -0
  754. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_tmux_session.py +0 -0
  755. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_transcript_floor.py +0 -0
  756. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_usage.py +0 -0
  757. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_usage_limits.py +0 -0
  758. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_usage_rollup.py +0 -0
  759. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_venv_live_install_2121.py +0 -0
  760. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_version_single_source.py +0 -0
  761. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_watch.py +0 -0
  762. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  763. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worker_events.py +0 -0
  764. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worker_image_pin_sync.py +0 -0
  765. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worker_safety.py +0 -0
  766. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worker_test_scoping.py +0 -0
  767. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worktree.py +0 -0
  768. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  769. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/Cargo.lock +0 -0
  770. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/Cargo.toml +0 -0
  771. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/cargo-config-local-quadraui.toml.example +0 -0
  772. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/audit.rs +0 -0
  773. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/chat.rs +0 -0
  774. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/events.rs +0 -0
  775. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/fleet_health.rs +0 -0
  776. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/fleet_sessions.rs +0 -0
  777. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/fleet_terminals.rs +0 -0
  778. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/format.rs +0 -0
  779. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/msv.rs +0 -0
  780. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/plans.rs +0 -0
  781. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/sessions.rs +0 -0
  782. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/sidebar.rs +0 -0
  783. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/app/terminal.rs +0 -0
  784. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/bin/gtk.rs +0 -0
  785. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/commands.rs +0 -0
  786. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/lib.rs +0 -0
  787. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/main.rs +0 -0
  788. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/src/settings.rs +0 -0
  789. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/tests/acceptance.rs +0 -0
  790. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/tui/tests/cli.rs +0 -0
  791. {code_coordinator-0.5.197 → code_coordinator-0.5.200}/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.197
3
+ Version: 0.5.200
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.197
3
+ Version: 0.5.200
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.197",
2
+ "tag": "0.5.200",
3
3
  "distance": 0,
4
- "node": "gac6cd7be56630a9693710286586d56b6c59bc767",
4
+ "node": "gc8878ff7b1ebea74a3711aba656f4ccbb265122e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -228,6 +228,17 @@ def compute_pipeline(
228
228
  None,
229
229
  )
230
230
 
231
+ # #2498: a review that came back "request-changes" must never read as
232
+ # mergeable, no matter what else is true about the assignment (including
233
+ # a stray `mq_entry` — see the `mq_entry is not None` branch below, and
234
+ # the unconditional "enqueue" gate this used to feed). Computed once here
235
+ # so both the stage-progression chain and the stage-status/gate-list
236
+ # logic further down share the same verdict check.
237
+ review_rejected = (
238
+ review_assignment is not None
239
+ and review_assignment.review_verdict == "request-changes"
240
+ )
241
+
231
242
  # ── Determine current_stage ──────────────────────────────────────────────
232
243
  current_stage: str
233
244
  if assignment.status == "running":
@@ -251,7 +262,39 @@ def compute_pipeline(
251
262
  current_stage = "merged"
252
263
  elif assignment.status in ("done", "pending"):
253
264
  # Evaluate from most advanced to least advanced.
254
- if mq_entry is not None:
265
+ # #2498: an `mq_entry` (queued/merging/merged) no longer trumps
266
+ # everything else when the linked review came back request-changes —
267
+ # fall through to the normal review/smoke evaluation below instead,
268
+ # so a rejected review keeps showing as blocked even if it was
269
+ # (incorrectly) enqueued before this fix, or by any other path that
270
+ # doesn't re-check the verdict.
271
+ #
272
+ # #2498 (review 1): a *genuine* smoke/test failure or an
273
+ # in-progress smoke assignment must still be checked, and still win,
274
+ # BEFORE `review_assignment` — those are real, distinct signals
275
+ # (an infra failure, or a smoke run that hasn't finished yet) and
276
+ # existing coverage (test_failed_smoke_assignment_does_not_fall_
277
+ # through_to_review) depends on a failed smoke assignment surfacing
278
+ # even when a review also completed.
279
+ #
280
+ # But `assignment.smoke_test == "pass"` (and the sibling
281
+ # "smoke_assignment done → treat as passed" branch) is a different
282
+ # kind of signal: per `coord/state.py:_record_test_verdict_local`
283
+ # (#1384), recording `test_state="passed"` always mirrors to
284
+ # `smoke_test="pass"` on this same work assignment — the default
285
+ # behaviour on every ordinary Test-gate pass, not an edge case — and
286
+ # `auto_loop.py`'s `test_precedes_review` gate requires exactly that
287
+ # mirrored "passed" state before it will ever dispatch a review. So
288
+ # by the time `review_assignment` exists at all, `smoke_test` is
289
+ # already "pass" essentially every time — meaning checking it before
290
+ # `review_assignment` resolved `current_stage` to "smoke_passed" and
291
+ # never reached the review branch at all, leaving `review_rejected`
292
+ # unenforced on the realistic "Test passed, then Review rejected"
293
+ # path. A dispatched review is definitionally more advanced than a
294
+ # merely-passed Test gate (Test precedes Review), so the "pass"
295
+ # branches move below the review check while the failure/running
296
+ # branches stay above it.
297
+ if mq_entry is not None and not review_rejected:
255
298
  from coord.merge_queue import MERGED, MERGING
256
299
 
257
300
  if mq_entry.state == MERGED:
@@ -260,8 +303,6 @@ def compute_pipeline(
260
303
  current_stage = "merging"
261
304
  else:
262
305
  current_stage = "merge_ready"
263
- elif assignment.smoke_test == "pass":
264
- current_stage = "smoke_passed"
265
306
  elif assignment.smoke_test == "fail":
266
307
  current_stage = "smoke_failed"
267
308
  elif smoke_assignment is not None and smoke_assignment.status in ("running", "pending"):
@@ -270,9 +311,6 @@ def compute_pipeline(
270
311
  # Smoke assignment itself failed (infra failure) — not the same as
271
312
  # the smoke *test* failing, but still unblocks the work assignment.
272
313
  current_stage = "smoke_failed"
273
- elif smoke_assignment is not None and smoke_assignment.status in ("done",):
274
- # Smoke assignment completed but smoke_test not yet set — treat as passed.
275
- current_stage = "smoke_passed"
276
314
  elif review_assignment is not None:
277
315
  if review_assignment.status in ("running", "pending", "finalizing"):
278
316
  # #1566: "finalizing" is a review row whose agent finished but
@@ -288,6 +326,11 @@ def compute_pipeline(
288
326
  current_stage = "review_failed"
289
327
  else:
290
328
  current_stage = "review_done"
329
+ elif assignment.smoke_test == "pass":
330
+ current_stage = "smoke_passed"
331
+ elif smoke_assignment is not None and smoke_assignment.status in ("done",):
332
+ # Smoke assignment completed but smoke_test not yet set — treat as passed.
333
+ current_stage = "smoke_passed"
291
334
  else:
292
335
  current_stage = "done"
293
336
  else:
@@ -327,6 +370,12 @@ def compute_pipeline(
327
370
  # This is the current stage.
328
371
  if current_stage == "merged":
329
372
  status = "completed" # final state, show as completed
373
+ elif current_stage == "review_done" and review_rejected:
374
+ # #2498: the review step finished, but a request-changes
375
+ # verdict means it did NOT clear the assignment for the next
376
+ # gate — show "active"/blocked, not a green "completed" that
377
+ # reads as "review passed."
378
+ status = "active"
330
379
  elif current_stage in ("smoke_passed", "review_done"):
331
380
  status = "completed" # sub-stage "done", ready for next gate
332
381
  elif current_stage == "failed":
@@ -367,7 +416,13 @@ def compute_pipeline(
367
416
  elif current_stage == "review_failed":
368
417
  available_gates.append(PipelineGate("dispatch_review", "Dispatch Review", _EP))
369
418
  elif current_stage == "review_done":
370
- available_gates.append(PipelineGate("enqueue", "Queue for Merge", _EP))
419
+ # #2498: only offer "Queue for Merge" when the review is approved or
420
+ # hasn't produced a verdict yet — a request-changes verdict must not
421
+ # be one click from the merge queue. `dispatch_fix` just below is
422
+ # already correctly gated the mirror-image way (only offered ON
423
+ # request-changes); this makes `enqueue` its proper complement.
424
+ if not review_rejected:
425
+ available_gates.append(PipelineGate("enqueue", "Queue for Merge", _EP))
371
426
  if review_assignment is not None and review_assignment.review_posted_at is None:
372
427
  available_gates.append(PipelineGate("post_findings", "Post Findings", _EP))
373
428
  # Offer the phone a way to record a review verdict manually when the
@@ -1787,3 +1787,99 @@ class TestDispatchFixGateForRequestChanges:
1787
1787
  pv = compute_pipeline(work, board, [], _config())
1788
1788
  gate_actions = {g.action for g in pv.available_gates}
1789
1789
  assert "dispatch_fix" not in gate_actions
1790
+
1791
+
1792
+ class TestMergeQueueIgnoresRejectedReview:
1793
+ """#2498: coord-web showed a request-changes review as mergeable once
1794
+ merge-queued — the top badge read "mergeable," the Review row in the
1795
+ gate-status list read green/"completed," and "Merge" was enabled,
1796
+ directly under a Review section whose own verdict said "Changes
1797
+ requested." Root cause was `current_stage`'s `mq_entry is not None`
1798
+ check firing unconditionally, before ever consulting
1799
+ `review_assignment.review_verdict` — and a second bug feeding it: the
1800
+ "enqueue" gate at review_done was offered unconditionally instead of
1801
+ being gated on the verdict the way `dispatch_fix` already was."""
1802
+
1803
+ def test_mq_entry_with_rejected_review_is_not_merge_ready(self) -> None:
1804
+ """An mq_entry existing (e.g. from before this fix, or any other path
1805
+ that skipped the verdict check) must not make a request-changes
1806
+ assignment read as merge_ready/merging/merged."""
1807
+ work = _work(aid="work-1", status="done")
1808
+ rev = _review(of_aid="work-1", status="done")
1809
+ rev.review_verdict = "request-changes"
1810
+ mq = [_mq_entry(state=PENDING)]
1811
+ board = Board(completed=[work, rev])
1812
+ pv = compute_pipeline(work, board, mq, _config())
1813
+
1814
+ assert pv.current_stage not in ("merge_ready", "merging", "merged")
1815
+ assert pv.current_stage == "review_done"
1816
+
1817
+ gate_actions = {g.action for g in pv.available_gates}
1818
+ assert "merge" not in gate_actions
1819
+ assert "enqueue" not in gate_actions
1820
+ assert "dispatch_fix" in gate_actions
1821
+
1822
+ review = next(s for s in pv.stages if s.name == "review")
1823
+ assert review.status != "completed"
1824
+
1825
+ def test_review_done_rejected_does_not_offer_enqueue(self) -> None:
1826
+ """Even with no mq_entry at all, "Queue for Merge" must not be
1827
+ offered on a request-changes verdict (the bug's proximate cause: a
1828
+ human — or an automated caller — one click from queueing rejected
1829
+ code)."""
1830
+ work = _work(aid="work-1", status="done")
1831
+ rev = _review(of_aid="work-1", status="done")
1832
+ rev.review_verdict = "request-changes"
1833
+ board = Board(completed=[work, rev])
1834
+ pv = compute_pipeline(work, board, [], _config())
1835
+
1836
+ assert pv.current_stage == "review_done"
1837
+ gate_actions = {g.action for g in pv.available_gates}
1838
+ assert "enqueue" not in gate_actions
1839
+ assert "dispatch_fix" in gate_actions
1840
+
1841
+ def test_smoke_test_pass_then_rejected_review_is_not_smoke_passed(self) -> None:
1842
+ """#2498 review 1: the realistic path. Per `_record_test_verdict_local`
1843
+ (#1384), a passed Test gate always mirrors `smoke_test="pass"` onto
1844
+ the parent work assignment BEFORE review ever dispatches (Test
1845
+ precedes Review) — so `smoke_test == "pass"` is the normal state by
1846
+ the time a review completes, not an edge case. The old elif-chain
1847
+ checked `assignment.smoke_test == "pass"` before `review_assignment
1848
+ is not None`, so it resolved to "smoke_passed" and never reached the
1849
+ review_rejected guard at all: the review stage rendered "waiting"
1850
+ (hiding that a review even ran) and the untouched `smoke_passed`
1851
+ branch offered "enqueue" unconditionally — one click from queueing
1852
+ rejected code. No `mq_entry` needed to trigger it."""
1853
+ work = _work(aid="work-1", status="done", smoke_test="pass")
1854
+ rev = _review(of_aid="work-1", status="done")
1855
+ rev.review_verdict = "request-changes"
1856
+ board = Board(completed=[work, rev])
1857
+ pv = compute_pipeline(work, board, [], _config())
1858
+
1859
+ assert pv.current_stage not in ("smoke_passed", "merge_ready", "merging", "merged")
1860
+ assert pv.current_stage == "review_done"
1861
+
1862
+ gate_actions = {g.action for g in pv.available_gates}
1863
+ assert "enqueue" not in gate_actions
1864
+ assert "dispatch_fix" in gate_actions
1865
+
1866
+ review = next(s for s in pv.stages if s.name == "review")
1867
+ assert review.status != "waiting"
1868
+ assert review.status != "completed"
1869
+
1870
+ def test_review_done_approved_still_offers_enqueue_with_mq_entry_absent(self) -> None:
1871
+ """Sanity check the fix doesn't over-correct: an approved (or
1872
+ no-verdict-yet) review_done still offers enqueue, unaffected."""
1873
+ work = _work(aid="work-1", status="done")
1874
+ rev = _review(of_aid="work-1", status="done")
1875
+ rev.review_verdict = "approve"
1876
+ board = Board(completed=[work, rev])
1877
+ pv = compute_pipeline(work, board, [], _config())
1878
+
1879
+ assert pv.current_stage == "review_done"
1880
+ gate_actions = {g.action for g in pv.available_gates}
1881
+ assert "enqueue" in gate_actions
1882
+ assert "dispatch_fix" not in gate_actions
1883
+
1884
+ review = next(s for s in pv.stages if s.name == "review")
1885
+ assert review.status == "completed"
@@ -274,6 +274,17 @@ pub(crate) struct FindingsDetailEntry {
274
274
  pub(crate) full: Option<String>,
275
275
  }
276
276
 
277
+ /// #2497: one hydrated (or failed) full-issue-body detail fetch — see
278
+ /// `CoordApp::issue_detail_cache`. Mirrors [`FindingsDetailEntry`] (#1337)
279
+ /// for `issues.body` instead of `assignments.review_findings`.
280
+ pub(crate) struct IssueDetailEntry {
281
+ pub(crate) fetched_at: Instant,
282
+ /// `Some(body)` = the full issue body from `GET /issue/{repo}/{number}`.
283
+ /// `None` = the fetch failed; re-armed after a 30 s back-off so a down
284
+ /// daemon isn't hammered every tick.
285
+ pub(crate) full: Option<String>,
286
+ }
287
+
277
288
  /// #336: Sanitize a git branch name for use as a URL path component.
278
289
  ///
279
290
  /// Mirrors Python's `coord.agent._sanitize_branch`: replaces runs of
@@ -1573,6 +1584,8 @@ pub(crate) fn load_data() -> BoardData {
1573
1584
  .unwrap_or_else(|_| "open".to_string()),
1574
1585
  milestone_number: row.get::<_, Option<i64>>(6).unwrap_or(None),
1575
1586
  milestone_title: row.get::<_, Option<String>>(7).unwrap_or(None),
1587
+ body_truncated: false,
1588
+ body_len: None,
1576
1589
  })
1577
1590
  })
1578
1591
  .map(|rows| rows.filter_map(|r| r.ok()).collect())
@@ -2410,6 +2423,42 @@ pub(crate) fn spawn_findings_detail_fetch(
2410
2423
  rx
2411
2424
  }
2412
2425
 
2426
+ /// #2497: fetch one issue's FULL `body` from the daemon's single-issue
2427
+ /// detail endpoint (`GET /issue/{repo_name}/{number}`). The `/board`
2428
+ /// collection wire drops a closed (non-epic) issue's body to 0 chars
2429
+ /// (`board_wire.bound_issue_row`, #1791); the Board/Pipeline Issue tab
2430
+ /// hydrates the full body through this. Mirrors
2431
+ /// [`spawn_findings_detail_fetch`] (#1337). Sends `None` on any HTTP/parse
2432
+ /// failure (the pane keeps showing the truncation notice).
2433
+ pub(crate) fn spawn_issue_detail_fetch(
2434
+ base_url: String,
2435
+ token: Option<String>,
2436
+ repo_name: String,
2437
+ number: u64,
2438
+ ) -> std::sync::mpsc::Receiver<Option<String>> {
2439
+ let (tx, rx) = std::sync::mpsc::channel();
2440
+ std::thread::spawn(move || {
2441
+ let agent = ureq::AgentBuilder::new()
2442
+ .timeout_connect(std::time::Duration::from_secs(3))
2443
+ .timeout(std::time::Duration::from_secs(5))
2444
+ .build();
2445
+ let mut req = agent.get(&format!("{base_url}/issue/{repo_name}/{number}"));
2446
+ if let Some(t) = token {
2447
+ req = req.set("Authorization", &format!("Bearer {t}"));
2448
+ }
2449
+ let out = match req.call() {
2450
+ Ok(resp) => resp
2451
+ .into_string()
2452
+ .ok()
2453
+ .and_then(|body| serde_json::from_str::<serde_json::Value>(&body).ok())
2454
+ .and_then(|v| v.get("body").and_then(|f| f.as_str()).map(|s| s.to_string())),
2455
+ Err(_) => None,
2456
+ };
2457
+ let _ = tx.send(out);
2458
+ });
2459
+ rx
2460
+ }
2461
+
2413
2462
  /// #584: fetch the read-only board projection from the `coord serve` daemon
2414
2463
  /// over HTTP and assemble it into a [`BoardData`] via the shared
2415
2464
  /// [`assemble_board_data`] tail (so the machine probes still run exactly as the
@@ -84,6 +84,29 @@ impl CoordApp {
84
84
  "send-to-pipeline",
85
85
  "Send to Pipeline",
86
86
  ));
87
+ // #2494: "Add to drive queue" — `coord drive-queue add <repo>
88
+ // <issue>`, this repo's own recommended dispatch path
89
+ // (docs/DRIVE_QUEUE.md) and a genuinely different mechanism from
90
+ // "Send to Pipeline" above (`coord track`, the label-based `coord
91
+ // plan`/`approve` flow, with no drive-queue equivalent). Reuses
92
+ // the exact same menu-item/dispatch machinery the Pipeline row's
93
+ // `PipelineRowLifecycle::New` block already offers below —
94
+ // `pipeline_menu_repo_issue` (the shared dispatch-side resolver
95
+ // behind the `"drive-queue-add"`/`"drive-queue-row-remove"`/
96
+ // `"drive-queue-add-on:<machine>"` action ids) already treats
97
+ // `BoardRow` and `PipelineRow` targets identically, so no new
98
+ // action ids or dispatch plumbing are needed here — only this
99
+ // menu-content wiring. `offer_add: true` (queue-or-update, safe
100
+ // to invoke more than once) gated on the same Backlog-only
101
+ // lifecycle as "Send to Pipeline": queuing something already
102
+ // in-flight doesn't make sense. Swaps to "Remove from drive
103
+ // queue" for a row somehow already queued (e.g. added via `coord
104
+ // drive-queue add` directly before ever visiting the TUI).
105
+ items.extend(self.drive_queue_menu_items_for_pipeline_row(
106
+ issue_number,
107
+ repo_name,
108
+ true,
109
+ ));
87
110
  items.push(ContextMenuItem::separator());
88
111
  }
89
112
  // #661: the Board has NO direct dispatch. Choosing HOW to run an issue
@@ -1289,12 +1312,27 @@ impl CoordApp {
1289
1312
  tracking_issue,
1290
1313
  milestone_title,
1291
1314
  milestone_number,
1292
- } => self.context_menu_items_for_milestone_header(
1293
- repo_name,
1294
- *tracking_issue,
1295
- milestone_title,
1296
- *milestone_number,
1297
- ),
1315
+ } => {
1316
+ // #2494: look up the epic tracking issue's own labels from
1317
+ // the cached open-issues list so the menu can gate "Send to
1318
+ // Pipeline" on whether it's already `coord`-labeled. No
1319
+ // cache row (e.g. a stale/offline board) → empty labels,
1320
+ // which offers the item — worst case a harmless re-`track`.
1321
+ let labels: &[String] = self
1322
+ .data
1323
+ .open_issues
1324
+ .iter()
1325
+ .find(|oi| oi.repo_name == *repo_name && oi.number == *tracking_issue)
1326
+ .map(|oi| oi.labels.as_slice())
1327
+ .unwrap_or(&[]);
1328
+ self.context_menu_items_for_milestone_header(
1329
+ repo_name,
1330
+ *tracking_issue,
1331
+ milestone_title,
1332
+ *milestone_number,
1333
+ labels,
1334
+ )
1335
+ }
1298
1336
  ContextMenuTarget::TerminalRow { .. } => self.context_menu_items_for_terminal_row(),
1299
1337
  ContextMenuTarget::PlansStub { repo_name, milestone } => {
1300
1338
  self.context_menu_items_for_plans_stub(repo_name.as_deref(), milestone.as_ref())
@@ -6091,6 +6129,16 @@ impl CoordApp {
6091
6129
  repo_name: Some(repo),
6092
6130
  ..
6093
6131
  } => (repo.clone(), *num),
6132
+ // #2494: the Plans-panel epic-row menu's "Send to Pipeline"
6133
+ // reuses this same entry point (`coord track <repo>
6134
+ // <tracking_issue>` is identical to the Board row's `track`
6135
+ // call — the epic's own issue number just arrives via a
6136
+ // different target shape).
6137
+ ContextMenuTarget::MilestoneHeader {
6138
+ repo_name,
6139
+ tracking_issue,
6140
+ ..
6141
+ } => (repo_name.clone(), *tracking_issue),
6094
6142
  _ => {
6095
6143
  self.push_toast(
6096
6144
  &format!("{} unavailable", toast_title),
@@ -2547,6 +2547,8 @@ mod tests {
2547
2547
  state: "open".to_string(),
2548
2548
  milestone_number: None,
2549
2549
  milestone_title: None,
2550
+ body_truncated: false,
2551
+ body_len: None,
2550
2552
  }],
2551
2553
  ..BoardData::default()
2552
2554
  };
@@ -2574,6 +2576,8 @@ mod tests {
2574
2576
  state: "open".to_string(),
2575
2577
  milestone_number: None,
2576
2578
  milestone_title: None,
2579
+ body_truncated: false,
2580
+ body_len: None,
2577
2581
  })
2578
2582
  .collect(),
2579
2583
  pipeline_repos: vec![(
@@ -2625,6 +2629,8 @@ mod tests {
2625
2629
  state: "open".to_string(),
2626
2630
  milestone_number: None,
2627
2631
  milestone_title: None,
2632
+ body_truncated: false,
2633
+ body_len: None,
2628
2634
  }],
2629
2635
  pipeline_repos: vec![(
2630
2636
  "claude-coordinator".to_string(),
@@ -466,6 +466,8 @@ mod tests {
466
466
  matched_labels: vec!["coord".to_string()],
467
467
  all_labels: vec!["coord".to_string()],
468
468
  is_closed: false,
469
+ body_truncated: false,
470
+ body_len: None,
469
471
  }
470
472
  }
471
473
 
@@ -2104,6 +2104,8 @@ mod tests {
2104
2104
  matched_labels: vec!["coord".to_string()],
2105
2105
  all_labels: vec!["coord".to_string()],
2106
2106
  is_closed: false,
2107
+ body_truncated: false,
2108
+ body_len: None,
2107
2109
  }
2108
2110
  }
2109
2111
 
@@ -321,6 +321,8 @@ mod tests {
321
321
  matched_labels: vec!["coord".to_string()],
322
322
  all_labels: vec!["coord".to_string()],
323
323
  is_closed: false,
324
+ body_truncated: false,
325
+ body_len: None,
324
326
  }
325
327
  }
326
328
 
@@ -218,6 +218,8 @@ pub fn make_test_app(data: BoardData) -> CoordApp {
218
218
  artifact_fetch_rx: None,
219
219
  findings_detail_cache: std::collections::HashMap::new(),
220
220
  findings_fetch_rx: None,
221
+ issue_detail_cache: std::collections::HashMap::new(),
222
+ issue_fetch_rx: None,
221
223
  pending_artifact_pull: None,
222
224
  last_artifact_pulls: std::collections::HashMap::new(),
223
225
  artifact_pull_dialog: None,
@@ -910,6 +912,8 @@ pub fn make_app_with_one_completed_issue() -> CoordApp {
910
912
  labels: Vec::new(),
911
913
  milestone_number: None,
912
914
  milestone_title: None,
915
+ body_truncated: false,
916
+ body_len: None,
913
917
  });
914
918
  app.rebuild_board_sidebar();
915
919
  app
@@ -296,6 +296,22 @@ pub(crate) fn labels_carry_epic_label(labels: &[String]) -> bool {
296
296
  .any(|l| l.eq_ignore_ascii_case(TRACKING_ISSUE_LABEL))
297
297
  }
298
298
 
299
+ /// Mirrors `coord.commands.issues.track`'s `"coord"` label — the label that
300
+ /// marks an issue as Pipeline-tracked (`coord/dispatch.py`'s
301
+ /// `label_change_for_subcommand("track")` adds it, `board_row_lifecycle`
302
+ /// reads it back).
303
+ pub(crate) const COORD_LABEL: &str = "coord";
304
+
305
+ /// Case-insensitive check for [`COORD_LABEL`] against an arbitrary label
306
+ /// list, mirroring `labels_carry_epic_label`'s convention. #2494: an epic
307
+ /// tracking issue created via `coord milestone capture`/`chat` never carries
308
+ /// this label until something runs `coord track` against it — used to gate
309
+ /// the Plans-panel epic-row menu's "Send to Pipeline" item so it only
310
+ /// appears while the epic is still untracked.
311
+ pub(crate) fn labels_carry_coord_label(labels: &[String]) -> bool {
312
+ labels.iter().any(|l| l.eq_ignore_ascii_case(COORD_LABEL))
313
+ }
314
+
299
315
  /// The open issue in `repo_name`/`milestone_number` carrying the `"epic"`
300
316
  /// label — the milestone's tracking issue (mirrors
301
317
  /// `coord.milestone_order.TRACKING_ISSUE_LABEL` / the #645 convention).
@@ -622,19 +638,37 @@ impl CoordApp {
622
638
  /// doesn't depend on it — only the id matters); it's accepted for
623
639
  /// symmetry with the target's fields and because a future item may need
624
640
  /// it for a disabled-state check.
641
+ ///
642
+ /// #2494: `labels` is the epic tracking issue's current GitHub labels
643
+ /// (looked up by the caller from `data.open_issues`) — used solely to
644
+ /// gate "Send to Pipeline": an epic created via `coord milestone
645
+ /// capture`/`chat` carries neither `coord` nor `status:ready` until
646
+ /// something runs `coord track` against it, and until then it never
647
+ /// appears in Pipeline at all, so every Gate A action stays unreachable.
648
+ /// Shown only while the epic is still untracked (mirrors the Board row
649
+ /// menu's own Backlog-only gate on the same action).
625
650
  pub(crate) fn context_menu_items_for_milestone_header(
626
651
  &self,
627
652
  _repo_name: &str,
628
653
  _tracking_issue: u64,
629
654
  _milestone_title: &str,
630
655
  _milestone_number: i64,
656
+ labels: &[String],
631
657
  ) -> Vec<ContextMenuItem> {
632
- vec![
658
+ let mut items = vec![
633
659
  ContextMenuItem::action("open-milestone-chat", "Open milestone chat"),
634
660
  ContextMenuItem::action("dispatch-milestone", "Dispatch milestone").with_shortcut("d"),
635
661
  ContextMenuItem::action("dispatch-milestone-next", "Dispatch next…"),
636
662
  ContextMenuItem::action("view-milestone-order", "View order / DAG"),
637
- ContextMenuItem::separator(),
663
+ ];
664
+ if !labels_carry_coord_label(labels) {
665
+ items.push(ContextMenuItem::action(
666
+ "send-to-pipeline",
667
+ "Send to Pipeline",
668
+ ));
669
+ }
670
+ items.push(ContextMenuItem::separator());
671
+ items.extend([
638
672
  ContextMenuItem::action("edit-milestone", "Edit milestone…"),
639
673
  ContextMenuItem::action("add-issue-to-milestone", "Add issue to milestone…"),
640
674
  ContextMenuItem::action(
@@ -655,7 +689,8 @@ impl CoordApp {
655
689
  ContextMenuItem::action("close-plan", "Close / archive plan"),
656
690
  ContextMenuItem::separator(),
657
691
  ContextMenuItem::action("refresh", "Refresh").with_shortcut("r"),
658
- ]
692
+ ]);
693
+ items
659
694
  }
660
695
 
661
696
  /// #1123 (contract §4b/§4c): context-menu items for a Plans-panel
@@ -1298,6 +1333,8 @@ mod pure_tests {
1298
1333
  state: state.to_string(),
1299
1334
  milestone_number: None,
1300
1335
  milestone_title: None,
1336
+ body_truncated: false,
1337
+ body_len: None,
1301
1338
  }
1302
1339
  }
1303
1340
 
@@ -2905,6 +2905,19 @@ pub struct CoordApp {
2905
2905
  (String, i64),
2906
2906
  std::sync::mpsc::Receiver<Option<String>>,
2907
2907
  )>,
2908
+ /// #2497: Full issue bodies hydrated from the daemon's
2909
+ /// `GET /issue/{repo}/{number}` detail endpoint, keyed by `(repo,
2910
+ /// issue_number)` — the /board collection wire drops a closed
2911
+ /// (non-epic) issue's body to 0 chars (`board_wire.bound_issue_row`,
2912
+ /// #1791). A successful entry never expires (a closed issue's body is
2913
+ /// immutable in practice). A failed entry (`full: None`) backs off for
2914
+ /// 30 s before re-arming. Mirrors `findings_detail_cache` (#1337).
2915
+ issue_detail_cache: std::collections::HashMap<(String, u64), IssueDetailEntry>,
2916
+ /// #2497: In-flight issue-body detail fetch. `None` when idle.
2917
+ issue_fetch_rx: Option<(
2918
+ (String, u64),
2919
+ std::sync::mpsc::Receiver<Option<String>>,
2920
+ )>,
2908
2921
  /// #336: Tracks a pending `coord pull-artifact` dispatch.
2909
2922
  /// Contains `(work_id, repo, sanitized_branch)` so we can show the
2910
2923
  /// destination path in a completion dialog.
@@ -3956,6 +3969,8 @@ impl CoordApp {
3956
3969
  artifact_fetch_rx: None,
3957
3970
  findings_detail_cache: std::collections::HashMap::new(),
3958
3971
  findings_fetch_rx: None,
3972
+ issue_detail_cache: std::collections::HashMap::new(),
3973
+ issue_fetch_rx: None,
3959
3974
  pending_artifact_pull: None,
3960
3975
  last_artifact_pulls: std::collections::HashMap::new(),
3961
3976
  artifact_pull_dialog: None,
@@ -5392,6 +5407,8 @@ impl CoordApp {
5392
5407
  matched_labels: matched,
5393
5408
  all_labels: oi.labels.clone(),
5394
5409
  is_closed: oi.state == "closed",
5410
+ body_truncated: oi.body_truncated,
5411
+ body_len: oi.body_len,
5395
5412
  })
5396
5413
  })
5397
5414
  .collect();
@@ -5459,6 +5476,8 @@ impl CoordApp {
5459
5476
  matched_labels: matched,
5460
5477
  all_labels: oi.labels.clone(),
5461
5478
  is_closed: oi.state == "closed",
5479
+ body_truncated: oi.body_truncated,
5480
+ body_len: oi.body_len,
5462
5481
  });
5463
5482
  present.insert(key);
5464
5483
  }