code-coordinator 0.5.185__tar.gz → 0.5.187__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 (784) hide show
  1. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/merge.py +3 -1
  5. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/config.py +9 -5
  6. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/conflict_fix.py +55 -6
  7. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.service +6 -5
  8. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.timer +12 -0
  9. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/deploy_lane_facts.py +28 -24
  10. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_deploy_lanes.py +2 -2
  11. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/merge_queue.py +12 -0
  12. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notify.py +8 -2
  13. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_verify.py +1 -1
  14. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.service +6 -5
  15. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.sh +56 -30
  16. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.timer +12 -0
  17. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_DIST.md +11 -0
  18. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/AGENT_OPERATIONS.md +14 -12
  19. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PHONE_WEBAPP.md +14 -10
  20. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_conflict_fix.py +94 -0
  21. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_web_dist.py +82 -2
  22. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_deploy_lane_facts.py +66 -18
  23. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/board.md +0 -0
  24. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/complete-session.md +0 -0
  25. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/coordinator.md +0 -0
  26. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/_lib.sh +0 -0
  27. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-checkout +0 -0
  28. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-commit +0 -0
  29. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-merge +0 -0
  30. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/coord-ci-acceptance.yml +0 -0
  32. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/auto-release.yml +0 -0
  33. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/cargo-test.yml +0 -0
  34. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/publish.yml +0 -0
  35. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/release-tui.yml +0 -0
  36. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/test.yml +0 -0
  37. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.gitignore +0 -0
  38. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/CLAUDE.md +0 -0
  39. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/GOAL.md +0 -0
  40. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/LICENSE +0 -0
  41. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/MANIFEST.in +0 -0
  42. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/README.md +0 -0
  43. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/SOURCES.txt +0 -0
  44. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/dependency_links.txt +0 -0
  45. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/entry_points.txt +0 -0
  46. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/requires.txt +0 -0
  47. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/scm_file_list.json +0 -0
  48. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/top_level.txt +0 -0
  49. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/__init__.py +0 -0
  50. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/_board_mapping.py +0 -0
  51. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/acceptance.py +0 -0
  52. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/acceptance_drivers.py +0 -0
  53. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent.py +0 -0
  54. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent_app.py +0 -0
  55. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent_update.py +0 -0
  56. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/.gitignore +0 -0
  57. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/agents/work.md +0 -0
  58. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/routing.jsonc +0 -0
  59. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/audit.py +0 -0
  60. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/auto_loop.py +0 -0
  61. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/block_log.py +0 -0
  62. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_bool_guard.py +0 -0
  63. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_service.py +0 -0
  64. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_wire.py +0 -0
  65. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/brain.py +0 -0
  66. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/branch_model.py +0 -0
  67. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/bug_intake.py +0 -0
  68. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/cargo_cache.py +0 -0
  69. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/ci_github.py +0 -0
  70. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/cli.py +0 -0
  73. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/client.py +0 -0
  74. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/__init__.py +0 -0
  75. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/_common.py +0 -0
  76. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/acceptance.py +0 -0
  77. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/agent_ops.py +0 -0
  78. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/audit.py +0 -0
  79. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/dispatch.py +0 -0
  81. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/dispatch_workers.py +0 -0
  82. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/drive.py +0 -0
  83. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/drive_queue.py +0 -0
  84. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/gate_a.py +0 -0
  85. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/gates.py +0 -0
  86. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/issues.py +0 -0
  87. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/lifecycle.py +0 -0
  88. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/terminal.py +0 -0
  101. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/test_gate.py +0 -0
  102. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/tui.py +0 -0
  103. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/comments.py +0 -0
  104. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/db.py +0 -0
  112. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.service +0 -0
  116. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.sh +0 -0
  117. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.timer +0 -0
  118. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-drive-queue.service +0 -0
  119. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-drive-queue.timer +0 -0
  120. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-notify.service +0 -0
  121. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-notify.timer +0 -0
  122. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-propagate.service +0 -0
  123. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-propagate.timer +0 -0
  124. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-window.service +0 -0
  125. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-window.timer +0 -0
  126. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-serve.service +0 -0
  127. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web.service +0 -0
  128. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deps.py +0 -0
  131. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/diagnose.py +0 -0
  132. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dispatch.py +0 -0
  133. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dist_name.py +0 -0
  134. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive.py +0 -0
  135. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive_queue.py +0 -0
  136. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive_state.py +0 -0
  137. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/events.py +0 -0
  138. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/failure_class.py +0 -0
  139. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/filelock.py +0 -0
  140. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/fleet_config_health.py +0 -0
  141. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/goal.py +0 -0
  148. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/graph_health.py +0 -0
  149. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/__init__.py +0 -0
  150. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/aggregate.py +0 -0
  151. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/__init__.py +0 -0
  152. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/agent_install.py +0 -0
  153. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/cargo_targets.py +0 -0
  154. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/claude_binary.py +0 -0
  155. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/coord_web_ci_pin.py +0 -0
  156. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/disk.py +0 -0
  157. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_board.py +0 -0
  158. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_phantom.py +0 -0
  159. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_unit_drift.py +0 -0
  160. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/graph.py +0 -0
  161. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/graphify_cli.py +0 -0
  162. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/index_lock.py +0 -0
  163. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/plan_usage.py +0 -0
  164. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/repo_state.py +0 -0
  165. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/spawned_coord.py +0 -0
  166. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/timer_active.py +0 -0
  167. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/toolchain.py +0 -0
  168. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/unit_drift.py +0 -0
  169. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/unit_enablement.py +0 -0
  170. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/worktrees.py +0 -0
  171. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/cli.py +0 -0
  172. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/context.py +0 -0
  173. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/fleet_snapshot.py +0 -0
  174. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/models.py +0 -0
  175. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/pypi.py +0 -0
  176. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/registry.py +0 -0
  177. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/render.py +0 -0
  178. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/units.py +0 -0
  179. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/hooks.py +0 -0
  180. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/housekeeping.py +0 -0
  181. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/interactive.py +0 -0
  182. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/issue_store.py +0 -0
  183. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/liveness_auditor.py +0 -0
  184. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/machine_pause.py +0 -0
  185. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_chat.py +0 -0
  186. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_dispatch.py +0 -0
  187. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_gate.py +0 -0
  188. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_order.py +0 -0
  189. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/mock_author.py +0 -0
  190. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/models.py +0 -0
  191. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/network.py +0 -0
  192. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/openapi.py +0 -0
  204. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/overlap_fence.py +0 -0
  205. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/overlap_predict.py +0 -0
  206. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/parentage.py +0 -0
  207. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/parentage_github.py +0 -0
  208. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/pipeline.py +0 -0
  209. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/plan_parser.py +0 -0
  210. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/plans.py +0 -0
  211. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/platform_paths.py +0 -0
  212. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_bridge.py +0 -0
  213. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_store.py +0 -0
  214. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_sync.py +0 -0
  215. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/pr_body_lint.py +0 -0
  216. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/prereqs.py +0 -0
  217. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/progress.py +0 -0
  218. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/__init__.py +0 -0
  219. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/base.py +0 -0
  220. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/claude.py +0 -0
  221. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/claude_pty.py +0 -0
  222. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/opencode.py +0 -0
  223. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/queue_diagnose.py +0 -0
  224. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reconcile.py +0 -0
  225. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reconcile_tick.py +0 -0
  226. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/refine_chat.py +0 -0
  227. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_cordon.py +0 -0
  228. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_propagate.py +0 -0
  229. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_window.py +0 -0
  230. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/repo_edit.py +0 -0
  231. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/repo_onboard.py +0 -0
  232. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reports.py +0 -0
  233. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/revalidate.py +0 -0
  234. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/review.py +0 -0
  235. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/scorecard.py +0 -0
  236. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/self_health.py +0 -0
  237. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/serve_app.py +0 -0
  238. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  239. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  240. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  241. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  242. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/portal-followup/SKILL.md +0 -0
  244. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  245. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  246. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/update-issue/SKILL.md +0 -0
  247. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/smoke.py +0 -0
  248. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/spend_ceiling.py +0 -0
  249. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/split_work.py +0 -0
  250. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/stage_projection.py +0 -0
  251. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/state.py +0 -0
  252. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_author.py +0 -0
  253. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_chat.py +0 -0
  254. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_orchestrator.py +0 -0
  255. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_report.py +0 -0
  256. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/tui_release.py +0 -0
  257. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage.py +0 -0
  258. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage_limits.py +0 -0
  259. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage_rollup.py +0 -0
  260. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/worker_events.py +0 -0
  261. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coordinator.example.yml +0 -0
  262. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-agent.service +0 -0
  263. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.service +0 -0
  264. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.sh +0 -0
  265. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.timer +0 -0
  266. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-drive-queue.service +0 -0
  267. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-drive-queue.timer +0 -0
  268. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-notify.service +0 -0
  269. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-notify.timer +0 -0
  270. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-propagate.service +0 -0
  271. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-propagate.timer +0 -0
  272. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-window.service +0 -0
  273. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-window.timer +0 -0
  274. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-serve.service +0 -0
  275. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-rollback.sh +0 -0
  276. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web.service +0 -0
  277. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/node-shim.sh +0 -0
  278. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  279. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_CI.md +0 -0
  280. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ARCHITECTURE.md +0 -0
  281. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ARCH_SECURITY_GATES.md +0 -0
  282. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/COCKPIT.md +0 -0
  283. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CONTROL_CENTER.md +0 -0
  284. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/COST_DISCIPLINE.md +0 -0
  285. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CROSS_PLATFORM.md +0 -0
  286. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CUSTOMER_PORTAL.md +0 -0
  287. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/DRIVE_QUEUE.md +0 -0
  288. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/EPHEMERAL_WORKERS.md +0 -0
  289. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/FORGE_MIGRATION.md +0 -0
  290. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/GRAPHIFY_SETUP.md +0 -0
  291. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ISSUE_GUIDANCE.md +0 -0
  292. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/MAC_MINI.md +0 -0
  293. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  294. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/NOTIFIER.md +0 -0
  295. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/OPENCODE_VERIFICATION.md +0 -0
  296. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/OPERATING_GOTCHAS.md +0 -0
  297. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ORACLE_LOOP.md +0 -0
  298. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PIPELINE_V2.md +0 -0
  299. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PLATFORM_EVOLUTION.md +0 -0
  300. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/SECOND_BACKEND.md +0 -0
  301. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/STORE_SERVICE.md +0 -0
  302. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  303. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/WEB_CONTROL_CENTER.md +0 -0
  304. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/WSL_WINDOWS_WORKER.md +0 -0
  305. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/README.md +0 -0
  306. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/_tokens.css +0 -0
  307. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/issue-detail.html +0 -0
  308. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/pipeline-narrow.html +0 -0
  309. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/pipeline-wide.html +0 -0
  310. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/graphify-out/.gitignore +0 -0
  311. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/install-agent.sh +0 -0
  312. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/pyproject.toml +0 -0
  313. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/audit_review_verdict_overrides.py +0 -0
  314. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  315. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/build-worker-image.sh +0 -0
  316. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/coordinator-machine.py +0 -0
  317. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/epic-down.sh +0 -0
  318. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/epic-up.sh +0 -0
  319. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/preflight.sh +0 -0
  320. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/provision-worker.sh +0 -0
  321. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  322. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  323. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/verify-github-token.sh +0 -0
  324. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/codegen.py +0 -0
  325. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/coord-test-runner.sh +0 -0
  326. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/drive-batch.sh +0 -0
  327. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/gen_board_fixture.py +0 -0
  328. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/next_release_tag.py +0 -0
  329. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/run_tests_in_populated_home.sh +0 -0
  330. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/run_tests_without_gh.sh +0 -0
  331. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/smoke_437_interactive.py +0 -0
  332. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_878_review_capture.py +0 -0
  333. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_release_published.py +0 -0
  334. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_release_wheel.py +0 -0
  335. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/setup.cfg +0 -0
  336. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/SMOKE_SET.md +0 -0
  337. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/__init__.py +0 -0
  338. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  339. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/contract.md +0 -0
  340. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/manifest.yml +0 -0
  341. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  342. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  343. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  344. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  345. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/conftest.py +0 -0
  346. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/contract.md +0 -0
  347. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/manifest.yml +0 -0
  348. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  349. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  350. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/contract.md +0 -0
  351. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/manifest.yml +0 -0
  352. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  353. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  354. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  355. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  356. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  357. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  358. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  359. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  360. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  361. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  362. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/contract.md +0 -0
  363. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  364. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  365. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/manifest.yml +0 -0
  366. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  367. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/tsconfig.json +0 -0
  368. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  369. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  370. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  371. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/contract.md +0 -0
  372. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  373. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/manifest.yml +0 -0
  374. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  375. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  376. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  377. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  378. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  379. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  380. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  381. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  382. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  383. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  384. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  385. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  386. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/conftest.py +0 -0
  387. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/board-pipeline-basic.json +0 -0
  388. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  389. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  390. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  391. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  392. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/all_pass.json +0 -0
  393. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  394. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/mixed_fail.json +0 -0
  395. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  396. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  397. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/skip.json +0 -0
  398. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/truncated.json +0 -0
  399. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  400. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  401. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  402. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  403. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  404. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  405. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  406. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  407. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_acceptance.py +0 -0
  408. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_acceptance_drivers.py +0 -0
  409. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent.py +0 -0
  410. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_api_error.py +0 -0
  411. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_app.py +0 -0
  412. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_branch_base.py +0 -0
  413. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_branch_capture.py +0 -0
  414. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_config_free_1712.py +0 -0
  415. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_deploy_units_endpoint.py +0 -0
  416. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_dirty_worktree.py +0 -0
  417. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  418. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_graph_self_heal.py +0 -0
  419. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_health_h3.py +0 -0
  420. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_idle_restart.py +0 -0
  421. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_push_failure.py +0 -0
  422. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_reap.py +0 -0
  423. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_repos_and_pull.py +0 -0
  424. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_restart_services_endpoint.py +0 -0
  425. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_skills_self_heal.py +0 -0
  426. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_startup_diagnostics.py +0 -0
  427. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_update.py +0 -0
  428. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_update_bluegreen.py +0 -0
  429. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_usage_limit.py +0 -0
  430. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_zero_commit.py +0 -0
  431. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ambient_home_isolation.py +0 -0
  432. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_approve_reject_plan.py +0 -0
  433. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_approve_usage_gate.py +0 -0
  434. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_assignment_already_recorded_daemon.py +0 -0
  435. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_log.py +0 -0
  436. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_outcome.py +0 -0
  437. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_query.py +0 -0
  438. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_auto_loop.py +0 -0
  439. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_auto_release_publish_2035.py +0 -0
  440. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_base_checkout_restore.py +0 -0
  441. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_block_log.py +0 -0
  442. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_cap_762.py +0 -0
  443. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_fixture.py +0 -0
  444. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_read_path.py +0 -0
  445. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_service.py +0 -0
  446. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_state.py +0 -0
  447. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_wire.py +0 -0
  448. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_brain.py +0 -0
  449. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_branch_model.py +0 -0
  450. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_bug_intake.py +0 -0
  451. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_build_worker_image_env_update.py +0 -0
  452. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cargo_cache.py +0 -0
  453. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_acceptance_gate_1950.py +0 -0
  454. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_parity_2091.py +0 -0
  455. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_store.py +0 -0
  456. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_claim.py +0 -0
  457. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_acceptance.py +0 -0
  458. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign.py +0 -0
  459. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  460. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_interactive_remote.py +0 -0
  461. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_provider.py +0 -0
  462. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  463. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_audit.py +0 -0
  464. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_chat_continue.py +0 -0
  465. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_decide.py +0 -0
  466. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_config_provenance.py +0 -0
  467. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_graph.py +0 -0
  468. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_self.py +0 -0
  469. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor.py +0 -0
  470. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor_config_free_1801.py +0 -0
  471. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  472. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_drive.py +0 -0
  473. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_drive_queue.py +0 -0
  474. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_escalate.py +0 -0
  475. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_fix_headless_review.py +0 -0
  476. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_gate_a.py +0 -0
  477. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_install_drift.py +0 -0
  478. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_install_skills.py +0 -0
  479. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_issue_create_label.py +0 -0
  480. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_issue_reopen.py +0 -0
  481. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_merge.py +0 -0
  482. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_assign.py +0 -0
  483. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_capture.py +0 -0
  484. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_chat_add_child.py +0 -0
  485. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_dispatch.py +0 -0
  486. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_gate_b.py +0 -0
  487. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_gate_c.py +0 -0
  488. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_order.py +0 -0
  489. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  490. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_ship.py +0 -0
  491. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_network.py +0 -0
  492. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_new_issue_chat.py +0 -0
  493. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_plans.py +0 -0
  494. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_portal.py +0 -0
  495. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_pull_artifact.py +0 -0
  496. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_queue.py +0 -0
  497. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_reattach_sessions.py +0 -0
  498. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_refine_board.py +0 -0
  499. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_preflight.py +0 -0
  500. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_propagate.py +0 -0
  501. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_window.py +0 -0
  502. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_repo_2220.py +0 -0
  503. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_scorecard.py +0 -0
  504. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_set_review_findings.py +0 -0
  505. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_advisory_terminal.py +0 -0
  506. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_merge_queue.py +0 -0
  507. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_provider.py +0 -0
  508. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_review_finalizing.py +0 -0
  509. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_test_failed_tag.py +0 -0
  510. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_usage_limit.py +0 -0
  511. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_sync_comments_873.py +0 -0
  512. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_test_plan.py +0 -0
  513. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_track.py +0 -0
  514. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_tui_update.py +0 -0
  515. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_wait.py +0 -0
  516. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_client_base_install.py +0 -0
  517. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_comments.py +0 -0
  518. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_completion_summary.py +0 -0
  519. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config.py +0 -0
  520. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_acceptance.py +0 -0
  521. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_audit.py +0 -0
  522. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_pricing.py +0 -0
  523. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  524. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_usage_gate.py +0 -0
  525. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_conflict_fix_semantic.py +0 -0
  526. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test.py +0 -0
  527. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_baseline.py +0 -0
  528. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_populated_home.py +0 -0
  529. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_routing.py +0 -0
  530. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_toolchain.py +0 -0
  531. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_web_sse_restart_live.py +0 -0
  532. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coordinator_machine.py +0 -0
  533. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cross_platform_imports.py +0 -0
  534. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard.py +0 -0
  535. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_fixture.py +0 -0
  536. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_terminal.py +0 -0
  537. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_terminal_live.py +0 -0
  538. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_db.py +0 -0
  539. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dead_end.py +0 -0
  540. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_db_backup.py +0 -0
  541. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_web_rollback.py +0 -0
  542. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_drive_queue_unit.py +0 -0
  543. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_manifest.py +0 -0
  544. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_units_lane.py +0 -0
  545. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_web_unit.py +0 -0
  546. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deps.py +0 -0
  547. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_diagnose.py +0 -0
  548. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dispatch.py +0 -0
  549. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dispatch_target_validation.py +0 -0
  550. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dist_name.py +0 -0
  551. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_done_housekeeping.py +0 -0
  552. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive.py +0 -0
  553. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_queue.py +0 -0
  554. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_state.py +0 -0
  555. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_tmux.py +0 -0
  556. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_capability_detection.py +0 -0
  557. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  558. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_image_provenance.py +0 -0
  559. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_errors.py +0 -0
  560. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_events.py +0 -0
  561. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_failure_class.py +0 -0
  562. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_filelock.py +0 -0
  563. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  564. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fix_of_force_override.py +0 -0
  565. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_config_health.py +0 -0
  566. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_health_probes.py +0 -0
  567. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_health_snapshot.py +0 -0
  568. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_freshness.py +0 -0
  569. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_a.py +0 -0
  570. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_b.py +0 -0
  571. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_snapshot_staleness.py +0 -0
  572. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gates.py +0 -0
  573. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  574. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_generated_types_fixture.py +0 -0
  575. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_github_ops.py +0 -0
  576. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_goal.py +0 -0
  577. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_graph_health.py +0 -0
  578. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_graph_selfheal_absent_2237.py +0 -0
  579. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_handoff.py +0 -0
  580. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_checks.py +0 -0
  581. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_cli.py +0 -0
  582. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_cli_graph.py +0 -0
  583. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_config.py +0 -0
  584. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_context.py +0 -0
  585. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_coord_web_ci_pin.py +0 -0
  586. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_incident_regression.py +0 -0
  587. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_pypi.py +0 -0
  588. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_registry.py +0 -0
  589. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_timer_active.py +0 -0
  590. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_toolchain.py +0 -0
  591. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_unit_drift.py +0 -0
  592. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_unit_enablement.py +0 -0
  593. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_hooks.py +0 -0
  594. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_human_attended_437.py +0 -0
  595. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_init.py +0 -0
  596. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_integration.py +0 -0
  597. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_briefing_echo.py +0 -0
  598. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_prefill_state.py +0 -0
  599. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_session_relaunch.py +0 -0
  600. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_test_verdict_backstop.py +0 -0
  601. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_token_attribution.py +0 -0
  602. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_worktree.py +0 -0
  603. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_issue_store_seam.py +0 -0
  604. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_liveness_auditor.py +0 -0
  605. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_liveness_notify.py +0 -0
  606. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_machine_pause.py +0 -0
  607. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_merge_queue.py +0 -0
  608. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_merge_verify.py +0 -0
  609. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_chat.py +0 -0
  610. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_dispatch.py +0 -0
  611. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_gate.py +0 -0
  612. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_order.py +0 -0
  613. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_seam.py +0 -0
  614. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_mock_author.py +0 -0
  615. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_model_tiering.py +0 -0
  616. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_models.py +0 -0
  617. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_models_config_labels.py +0 -0
  618. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_needs_attention.py +0 -0
  619. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_network.py +0 -0
  620. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_new_issue_chat.py +0 -0
  621. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_next_release_tag.py +0 -0
  622. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_no_direct_gh_calls.py +0 -0
  623. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_node_shim.py +0 -0
  624. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_baseline.py +0 -0
  625. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_cli.py +0 -0
  626. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_collect.py +0 -0
  627. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_config.py +0 -0
  628. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_drive_seam.py +0 -0
  629. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_isolation.py +0 -0
  630. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_predicate.py +0 -0
  631. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_quiet_hours.py +0 -0
  632. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_service.py +0 -0
  633. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notify.py +0 -0
  634. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notify_drain.py +0 -0
  635. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_openapi.py +0 -0
  636. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_operational_defaults.py +0 -0
  637. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_overlap_fence.py +0 -0
  638. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_overlap_predict.py +0 -0
  639. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_packaged_deploy_units.py +0 -0
  640. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_parentage.py +0 -0
  641. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_paste_landed.py +0 -0
  642. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_pipeline.py +0 -0
  643. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_approve_plan_command.py +0 -0
  644. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_pr_command.py +0 -0
  645. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_review_command.py +0 -0
  646. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_only.py +0 -0
  647. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_parser.py +0 -0
  648. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_platform_paths.py +0 -0
  649. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_bridge.py +0 -0
  650. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_config.py +0 -0
  651. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_sync.py +0 -0
  652. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_pr_body_lint.py +0 -0
  653. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_prereqs.py +0 -0
  654. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_production_db_guard.py +0 -0
  655. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_progress.py +0 -0
  656. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_provider_seam.py +0 -0
  657. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers.py +0 -0
  658. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers_config_labels.py +0 -0
  659. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers_pty.py +0 -0
  660. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_quiet_hours.py +0 -0
  661. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_quiet_hours_store_2146.py +0 -0
  662. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reap_merged_sessions.py +0 -0
  663. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reap_stale_interactive_tick.py +0 -0
  664. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile.py +0 -0
  665. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_branch.py +0 -0
  666. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_completions.py +0 -0
  667. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_merges.py +0 -0
  668. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_no_agent_record.py +0 -0
  669. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_tick.py +0 -0
  670. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_usage_limit_done.py +0 -0
  671. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_refine_chat.py +0 -0
  672. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_2101.py +0 -0
  673. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  674. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_deadlock_2240.py +0 -0
  675. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_propagate.py +0 -0
  676. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_unified_1242.py +0 -0
  677. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_verify.py +0 -0
  678. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_window.py +0 -0
  679. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_remote_auto_prune.py +0 -0
  680. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_remote_interactive_reaper.py +0 -0
  681. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_edit_2220.py +0 -0
  682. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_graph_fleet_2237.py +0 -0
  683. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_onboard_2220.py +0 -0
  684. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_report_result_push.py +0 -0
  685. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reports.py +0 -0
  686. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry.py +0 -0
  687. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry_advisory_1606.py +0 -0
  688. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry_type_1636.py +0 -0
  689. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_revalidate.py +0 -0
  690. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review.py +0 -0
  691. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_end_review_without_verdict.py +0 -0
  692. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_parse_failure_diagnostic.py +0 -0
  693. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_reaffirm.py +0 -0
  694. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_state.py +0 -0
  695. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_backstop.py +0 -0
  696. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_override_audit.py +0 -0
  697. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_relay.py +0 -0
  698. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_zero_commits.py +0 -0
  699. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_scoped_review_wiring.py +0 -0
  700. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_scorecard.py +0 -0
  701. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_self_health.py +0 -0
  702. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_serve.py +0 -0
  703. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_serve_app_board_trim.py +0 -0
  704. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_session.py +0 -0
  705. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_slice_issue_attribution.py +0 -0
  706. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke.py +0 -0
  707. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke_live_checkout_restore.py +0 -0
  708. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke_workflow.py +0 -0
  709. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_spend_ceiling.py +0 -0
  710. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_spend_ceiling_coordinator.py +0 -0
  711. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_split.py +0 -0
  712. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_split_work.py +0 -0
  713. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stage_projection.py +0 -0
  714. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stalled_pipeline.py +0 -0
  715. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_state.py +0 -0
  716. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_state_review_findings_daemon.py +0 -0
  717. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_status_fleet_footer.py +0 -0
  718. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stop_1567.py +0 -0
  719. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stuck.py +0 -0
  720. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_terminal_command.py +0 -0
  721. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_author.py +0 -0
  722. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_chat.py +0 -0
  723. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_orchestrator.py +0 -0
  724. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_report.py +0 -0
  725. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_verdict_parsing.py +0 -0
  726. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_verdict_transcript_floor.py +0 -0
  727. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_board_audit.py +0 -0
  728. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_config_load_1080.py +0 -0
  729. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_daemon_routing_906.py +0 -0
  730. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_tmux_host.py +0 -0
  731. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_tmux_session.py +0 -0
  732. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_transcript_floor.py +0 -0
  733. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage.py +0 -0
  734. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage_limits.py +0 -0
  735. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage_rollup.py +0 -0
  736. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_venv_live_install_2121.py +0 -0
  737. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_version_single_source.py +0 -0
  738. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_watch.py +0 -0
  739. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  740. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_events.py +0 -0
  741. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_image_pin_sync.py +0 -0
  742. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_safety.py +0 -0
  743. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_test_scoping.py +0 -0
  744. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worktree.py +0 -0
  745. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  746. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/Cargo.lock +0 -0
  747. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/Cargo.toml +0 -0
  748. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/cargo-config-local-quadraui.toml.example +0 -0
  749. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/audit.rs +0 -0
  750. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/chat.rs +0 -0
  751. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/data.rs +0 -0
  752. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/dialogs.rs +0 -0
  753. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/doc_tabs.rs +0 -0
  754. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/drive.rs +0 -0
  755. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/drive_queue.rs +0 -0
  756. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/escalation.rs +0 -0
  757. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/events.rs +0 -0
  758. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fixtures.rs +0 -0
  759. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_health.rs +0 -0
  760. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_sessions.rs +0 -0
  761. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_terminals.rs +0 -0
  762. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/format.rs +0 -0
  763. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/milestone_dag.rs +0 -0
  764. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/mod.rs +0 -0
  765. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/msv.rs +0 -0
  766. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/pipeline.rs +0 -0
  767. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/plans.rs +0 -0
  768. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/render.rs +0 -0
  769. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/reports.rs +0 -0
  770. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/sessions.rs +0 -0
  771. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/settings_ui.rs +0 -0
  772. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/sidebar.rs +0 -0
  773. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/terminal.rs +0 -0
  774. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/tests.rs +0 -0
  775. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/types.rs +0 -0
  776. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/workspace.rs +0 -0
  777. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/bin/gtk.rs +0 -0
  778. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/commands.rs +0 -0
  779. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/lib.rs +0 -0
  780. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/main.rs +0 -0
  781. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/settings.rs +0 -0
  782. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/tests/acceptance.rs +0 -0
  783. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/tests/cli.rs +0 -0
  784. {code_coordinator-0.5.185 → code_coordinator-0.5.187}/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.185
3
+ Version: 0.5.187
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.185
3
+ Version: 0.5.187
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.185",
2
+ "tag": "0.5.187",
3
3
  "distance": 0,
4
- "node": "g2d150e839b7920ff70d6be0f4983503f6a092831",
4
+ "node": "gc74dfc5a8d399b33526076eaec24aed5d5ad1ce3",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-20"
@@ -456,7 +456,9 @@ def _dispatch_conflict_fixes(events, config, *, dry_run: bool) -> None:
456
456
  # failed for this entry in this session, don't loop — mark
457
457
  # HUMAN_REQUIRED so the user takes over. A successful
458
458
  # prior fix does not trigger this guard (#784).
459
- if has_prior_conflict_fix(fix_board, ev.entry.assignment_id):
459
+ if has_prior_conflict_fix(
460
+ fix_board, ev.entry.assignment_id, current_error=ev.entry.error,
461
+ ):
460
462
  ev.entry.state = HUMAN_REQUIRED
461
463
  click.echo(
462
464
  f" {ev.entry.repo_name} #{ev.entry.issue_number}: "
@@ -1617,11 +1617,15 @@ class HealthConfig:
1617
1617
  # None → ~/coord-web-dist — the symlink `deploy/coord-web-dist-build.timer`
1618
1618
  # atomically repoints at each new release (#1543).
1619
1619
  webapp_dist_path: str | None = None
1620
- # Directory holding the coord/dashboard/webapp/ sources the bundle was
1621
- # built from. None `<checkout>/coord/dashboard/webapp/src` for the
1622
- # first configured local checkout that has one. Same `src/`-not-root
1623
- # reasoning as `tui_source_dir`: rooting at the webapp package root would
1624
- # sweep `node_modules`/`dist` were they not already skipped by name.
1620
+ # Directory holding the `coord-web` sources the bundle was built from
1621
+ # (#2470; before epic #2002 split the webapp out into its own repo, this
1622
+ # was `coord/dashboard/webapp/` inside THIS repo). None → `<checkout>/src`
1623
+ # for this machine's `coord-web` checkout, discovered the same way
1624
+ # `coord_web_checkout` is (see
1625
+ # `coord.health.checks.coord_web_ci_pin.resolve_coord_web_checkout`).
1626
+ # Same `src/`-not-root reasoning as `tui_source_dir`: rooting at the
1627
+ # webapp package root would sweep `node_modules`/`dist` were they not
1628
+ # already skipped by name.
1625
1629
  webapp_source_dir: str | None = None
1626
1630
  # Absolute path to the heartbeat coord-web-dist-build.sh writes on EVERY
1627
1631
  # invocation, whether or not there was anything to build (#2122). None →
@@ -367,7 +367,32 @@ def _has_active_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
367
367
  )
368
368
 
369
369
 
370
- def has_prior_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
370
+ def _dispatched_error(assignment: Assignment) -> str | None:
371
+ """The merge-failure text *assignment*'s briefing was built from.
372
+
373
+ ``build_conflict_fix_briefing``/``build_semantic_conflict_briefing``
374
+ both embed the triggering ``QueuedMerge.error`` verbatim (as a
375
+ ``"Reason: …"``/``"Last merge error: …"`` line) — that's the only durable
376
+ record of what the merge looked like *at dispatch time*, since
377
+ ``on_conflict_fix_done`` clears ``entry.error`` back to ``None`` on
378
+ success before the merge is retried. Returns ``None`` when the briefing
379
+ doesn't carry either marker (e.g. a hand-built test ``Assignment``).
380
+ """
381
+ briefing = assignment.briefing or ""
382
+ for line in briefing.splitlines():
383
+ if line.startswith("Reason: "):
384
+ return line[len("Reason: "):]
385
+ if line.startswith("Last merge error: "):
386
+ return line[len("Last merge error: "):]
387
+ return None
388
+
389
+
390
+ def has_prior_conflict_fix(
391
+ board: Board,
392
+ merge_entry_id: str | None,
393
+ *,
394
+ current_error: str | None = None,
395
+ ) -> bool:
371
396
  """True when a second conflict-fix dispatch for *merge_entry_id* is blocked.
372
397
 
373
398
  Blocks when a conflict-fix is **active** (running/pending — don't spawn a
@@ -379,6 +404,18 @@ def has_prior_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
379
404
  followed by a new conflict if other PRs merged in the meantime; that is a
380
405
  fresh situation and warrants a fresh fix attempt. Only actual failures
381
406
  consume the one-per-entry cap.
407
+
408
+ #2475: that "successful" carve-out assumed a ``done`` conflict-fix always
409
+ resolved *something*. It doesn't when the merge was never blocked by a
410
+ content conflict in the first place (e.g. a permanently-unmergeable
411
+ branch-protection state) — the worker finds nothing to rebase, exits
412
+ ``done``, and the merge queue retries into the *identical* failure
413
+ forever (#2009's 38-turn thrash). When *current_error* is given and a
414
+ prior ``done`` conflict-fix's dispatch-time error
415
+ (:func:`_dispatched_error`) matches it exactly, that's the same blocker
416
+ recurring unchanged — not a fresh conflict — so it now consumes the cap
417
+ too. Callers that don't pass *current_error* keep the pre-#2475 behaviour
418
+ (``done`` never blocks) since they have no error text to compare.
382
419
  """
383
420
  if merge_entry_id is None:
384
421
  return False
@@ -393,9 +430,16 @@ def has_prior_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
393
430
  # Genuine failure — retry cap consumed, surface to human.
394
431
  if a.status in ("failed", "advisory"):
395
432
  return True
396
- # "done" = successful rebase → cap not consumed; a re-conflict is new.
397
- # "cancelled" falls through here too a cancelled attempt did no work,
398
- # so it is treated the same as "done": re-dispatch is allowed.
433
+ if a.status == "done":
434
+ if current_error is not None and _dispatched_error(a) == current_error:
435
+ # Same failure text recurring after a "successful" fix means
436
+ # nothing was actually fixed — treat like a genuine failure.
437
+ return True
438
+ # Otherwise: successful rebase, different (or unknown) situation
439
+ # now → cap not consumed; a re-conflict is new.
440
+ # "cancelled" falls through here too — a cancelled attempt did no
441
+ # work, so it is treated the same as an unrelated "done": re-dispatch
442
+ # is allowed.
399
443
  return False
400
444
 
401
445
 
@@ -463,7 +507,10 @@ def dispatch_conflict_fix(
463
507
  the caller marks the entry ``HUMAN_REQUIRED``. A ``done`` (successful)
464
508
  conflict-fix does *not* block a new dispatch — a successful rebase can be
465
509
  followed by a fresh conflict if other PRs merged in the meantime, and that
466
- warrants a new attempt rather than an immediate human escalation (#784).
510
+ warrants a new attempt rather than an immediate human escalation (#784)
511
+ UNLESS (#2475) *entry.error* is identical to the error the prior ``done``
512
+ attempt was dispatched for, which means the merge failed the same way
513
+ again with nothing actually fixed; see :func:`has_prior_conflict_fix`.
467
514
 
468
515
  ``semantic=True`` (#1291) dispatches the escalated second attempt: a
469
516
  different, less prescriptive briefing (see
@@ -481,7 +528,9 @@ def dispatch_conflict_fix(
481
528
  return None
482
529
  if _has_active_conflict_fix(board, entry.assignment_id):
483
530
  return None
484
- elif has_prior_conflict_fix(board, entry.assignment_id):
531
+ elif has_prior_conflict_fix(
532
+ board, entry.assignment_id, current_error=entry.error,
533
+ ):
485
534
  return None
486
535
 
487
536
  repo = config.repo(entry.repo_name)
@@ -4,13 +4,14 @@
4
4
  #
5
5
  # A systemd *user* unit, Type=oneshot, mirroring coord-drive-queue.service's
6
6
  # tick pattern (timer-fired, its own flock so a slow run can't stack). Runs
7
- # deploy/coord-web-dist-build.sh, which:
7
+ # deploy/coord-web-dist-build.sh, which (#2470: tracks the dedicated
8
+ # `coord-web` repo, not `coord/dashboard/webapp/` inside THIS repo — see
9
+ # docs/ADR_COORD_WEB_DIST.md; #2009: that used to be ~/src/code-coordinator,
10
+ # back when the webapp was a subdirectory of this repo):
8
11
  # - fetches origin/main into ~/src/coord-web (read-only — only
9
12
  # `git fetch` + `rev-parse`, never touches that checkout's working tree
10
- # or whatever branch an operator has it parked on). #2009: that used
11
- # to be ~/src/code-coordinator, back when the webapp was a
12
- # subdirectory of this repo,
13
- # - builds that repo's ROOT at that SHA inside a DEDICATED worktree
13
+ # or whatever branch an operator has it parked on),
14
+ # - builds coord-web's repo root from that SHA inside a DEDICATED worktree
14
15
  # (~/.coord-web-checkout, never shared with an operator or `coord drive`),
15
16
  # - atomically repoints ~/coord-web-dist at the new build.
16
17
  #
@@ -48,6 +48,18 @@
48
48
  # overlap the flock, in which case the next fire simply retries 10 minutes
49
49
  # later.
50
50
  #
51
+ # #2470: this unit now tracks the dedicated `coord-web` repo's `main`
52
+ # (deploy/coord-web-dist-build.sh's BASE_CHECKOUT/WEBAPP_CHECKOUT), not
53
+ # `coord/dashboard/webapp/` inside THIS repo (docs/ADR_COORD_WEB_DIST.md).
54
+ # The cadence measurement above predates that split and was taken against
55
+ # this repo's merge history; it stays the right order-of-magnitude
56
+ # justification for 10 minutes because `coord-web`, being a repo dedicated
57
+ # entirely to the webapp, has EVERY merge to its `main` in-scope for a build
58
+ # — there is no "does this commit touch webapp/ at all" filtering to do
59
+ # anymore (the script never filtered by path either; it always rebuilt on
60
+ # any `origin/main` SHA change, webapp-only or not — this just makes that
61
+ # now-trivially-true for the repo it targets).
62
+ #
51
63
  # Install: see deploy/coord-web-dist-build.sh's header, or
52
64
  # docs/PHONE_WEBAPP.md / docs/AGENT_OPERATIONS.md.
53
65
 
@@ -38,10 +38,14 @@ wheel's version the way ``agent_venv``/``spawned_coord`` are —
38
38
  ``~/.coord-venv`` release cadence, so "is it on the released version?" is
39
39
  not a well-formed question for it. What *is* well-formed, and what this
40
40
  checks — mirroring ``tui_binary`` exactly — is whether the live bundle is
41
- older than the webapp source tree it claims to have been built from. Since
42
- #2009 (epic #2002) that source tree is a ``coord-web`` checkout rather than
43
- this repo's ``coord/dashboard/webapp/``; see
44
- :func:`resolve_webapp_source_dir` for how both layouts are located.
41
+ older than the source tree it claims to have been built from: the
42
+ `coord-web` repo's own checkout (#2470; retargeted from this repo's now-gone
43
+ ``coord/dashboard/webapp/`` once the webapp moved out under epic #2002 —
44
+ see :func:`resolve_webapp_source_dir`, which shares its checkout-discovery
45
+ convention with ``coord.health.checks.coord_web_ci_pin`` so the two checks
46
+ can never disagree about which local checkout *is* `coord-web`, with a
47
+ fallback to the pre-#2009 in-repo layout for a checkout still parked on a
48
+ pre-split commit).
45
49
  """
46
50
 
47
51
  from __future__ import annotations
@@ -50,6 +54,7 @@ import subprocess
50
54
 
51
55
  from coord.dist_name import CANDIDATE_NAMES
52
56
  from coord.health.checks.agent_install import pip_show
57
+ from coord.health.checks.coord_web_ci_pin import resolve_coord_web_checkout
53
58
  from coord.health.models import CheckResult, HealthContext, Severity
54
59
  from coord.health.registry import check
55
60
  from coord.health.units import expand, shorten_path
@@ -142,31 +147,30 @@ def resolve_webapp_build_heartbeat_path(ctx: HealthContext):
142
147
  def resolve_webapp_source_dir(ctx: HealthContext):
143
148
  """The webapp source tree in the first local checkout that has one.
144
149
 
145
- Same convention as :func:`resolve_tui_source_dir`. Two layouts are
146
- recognised, in this order:
147
-
148
- 1. ``<checkout>/src`` a ``coord-web`` checkout, whose repo ROOT is the
149
- webapp root (#2009, epic #2002). Gated on a sibling ``package.json``
150
- so an unrelated repo that merely happens to have a top-level ``src/``
151
- (any Rust or src-layout Python project in ``ctx.checkouts``) cannot be
152
- mistaken for the webapp — grading the live bundle against the WRONG
153
- tree would manufacture staleness rather than report it, which is the
154
- exact failure ``resolve_tui_source_dir`` refuses to risk by not
155
- guessing relative to the binary path.
156
- 2. ``<checkout>/coord/dashboard/webapp/src`` the pre-#2009 in-repo
157
- layout. Kept because a machine can legitimately still have an older
158
- ``claude-coordinator`` checkout parked on a pre-split commit, and this
159
- lane reporting UNKNOWN there would be a regression in signal for no
160
- gain. It can only ever match a tree that genuinely is webapp source.
150
+ Prefers a `coord-web` checkout (#2470), discovered via
151
+ :func:`coord.health.checks.coord_web_ci_pin.resolve_coord_web_checkout`
152
+ — the same "checkout named ``coord-web``, else one carrying
153
+ ``playwright.acceptance.config.ts`` at its root" discovery that check
154
+ already uses so `webapp_bundle` and `coord_web_ci_pin` can never
155
+ disagree about which local checkout is `coord-web`. That checkout's
156
+ ``src/`` is the webapp root (#2009, epic #2002).
157
+
158
+ Falls back to ``<checkout>/coord/dashboard/webapp/src`` the pre-#2009
159
+ in-repo layout. Kept because a machine can legitimately still have an
160
+ older ``claude-coordinator`` checkout parked on a pre-split commit, and
161
+ this lane reporting UNKNOWN there would be a regression in signal for no
162
+ gain. Configured ``health.webapp_source_dir`` still wins outright, same
163
+ convention as every other path in this module.
161
164
  """
162
165
  configured = getattr(ctx.thresholds, "webapp_source_dir", None)
163
166
  if configured:
164
167
  return expand(configured, ctx.home)
168
+ checkout = resolve_coord_web_checkout(ctx)
169
+ if checkout is not None:
170
+ candidate = checkout / "src"
171
+ if candidate.is_dir():
172
+ return candidate
165
173
  for checkout in ctx.checkouts:
166
- if (checkout.path / "package.json").is_file():
167
- candidate = checkout.path / "src"
168
- if candidate.is_dir():
169
- return candidate
170
174
  candidate = checkout.path / "coord" / "dashboard" / "webapp" / "src"
171
175
  if candidate.is_dir():
172
176
  return candidate
@@ -351,8 +351,8 @@ def probe_tui_binary(ctx: HealthContext) -> CheckResult:
351
351
  order=13,
352
352
  description=(
353
353
  "The dist/ bundle `coord web --dist` serves is not older than the "
354
- "coord/dashboard/webapp/ source tree it was supposedly built from, "
355
- "on every machine that has one (#1834 lane 5)."
354
+ "`coord-web` source tree it was supposedly built from, "
355
+ "on every machine that has one (#1834 lane 5, #2470)."
356
356
  ),
357
357
  )
358
358
  def probe_webapp_bundle(ctx: HealthContext) -> CheckResult:
@@ -93,6 +93,18 @@ _HUMAN_SIGNALS = (
93
93
  "permission",
94
94
  "protected branch",
95
95
  "branch protection",
96
+ # #2475: GitHub's wording when a required status check can never report
97
+ # — e.g. its source CI job was deleted from the workflow while the
98
+ # check was still required in branch protection. This is a *permanent*
99
+ # block; no rebase or content change fixes it. The full message is
100
+ # something like "Pull request X is not mergeable: the base branch
101
+ # policy prohibits the merge.", which also contains "not mergeable" —
102
+ # a _REBASEABLE_SIGNALS entry — so without this specific phrase here,
103
+ # classify_conflict fell through past _HUMAN_SIGNALS (no match) to
104
+ # _REBASEABLE_SIGNALS's generic "not mergeable" match and misclassified
105
+ # the failure as "rebaseable", dispatching a conflict-fix worker that
106
+ # could never succeed (#2009's 38-turn thrash).
107
+ "policy prohibits the merge",
96
108
  )
97
109
 
98
110
 
@@ -884,7 +884,11 @@ def detect_stalled_pipeline(
884
884
  elif (
885
885
  matching_entry.state == CONFLICT
886
886
  and classify_conflict(matching_entry.error) == "rebaseable"
887
- and not has_prior_conflict_fix(board, matching_entry.assignment_id)
887
+ and not has_prior_conflict_fix(
888
+ board,
889
+ matching_entry.assignment_id,
890
+ current_error=matching_entry.error,
891
+ )
888
892
  ):
889
893
  # #1478: a rebaseable CONFLICT with no active/failed
890
894
  # conflict-fix attempt — the #1474 classify-and-dispatch step
@@ -1412,7 +1416,9 @@ def dispatch_stalled_pipeline_action(
1412
1416
  return StalledDispatchAction(
1413
1417
  kind="no_action", detail="merge queue entry no longer found",
1414
1418
  )
1415
- if has_prior_conflict_fix(board, entry.assignment_id):
1419
+ if has_prior_conflict_fix(
1420
+ board, entry.assignment_id, current_error=entry.error,
1421
+ ):
1416
1422
  return StalledDispatchAction(
1417
1423
  kind="skipped_human_required",
1418
1424
  detail="conflict-fix already active or its retry cap was already hit",
@@ -395,7 +395,7 @@ def findings_for_host(host: str, health: dict | None) -> list[Finding]:
395
395
  )
396
396
  )
397
397
 
398
- # ── webapp bundle vs coord/dashboard/webapp/ source (#1834 lane 5) ───
398
+ # ── webapp bundle vs coord-web's own source tree (#1834 lane 5, #2470)
399
399
  # Deliberately not a Lane/version comparison — see release_verify.py's
400
400
  # module docstring and coord.health.checks.fleet_deploy_lanes: the
401
401
  # bundle is versioned by origin/main's SHA on a continuous publish
@@ -4,13 +4,14 @@
4
4
  #
5
5
  # A systemd *user* unit, Type=oneshot, mirroring coord-drive-queue.service's
6
6
  # tick pattern (timer-fired, its own flock so a slow run can't stack). Runs
7
- # deploy/coord-web-dist-build.sh, which:
7
+ # deploy/coord-web-dist-build.sh, which (#2470: tracks the dedicated
8
+ # `coord-web` repo, not `coord/dashboard/webapp/` inside THIS repo — see
9
+ # docs/ADR_COORD_WEB_DIST.md; #2009: that used to be ~/src/code-coordinator,
10
+ # back when the webapp was a subdirectory of this repo):
8
11
  # - fetches origin/main into ~/src/coord-web (read-only — only
9
12
  # `git fetch` + `rev-parse`, never touches that checkout's working tree
10
- # or whatever branch an operator has it parked on). #2009: that used
11
- # to be ~/src/code-coordinator, back when the webapp was a
12
- # subdirectory of this repo,
13
- # - builds that repo's ROOT at that SHA inside a DEDICATED worktree
13
+ # or whatever branch an operator has it parked on),
14
+ # - builds coord-web's repo root from that SHA inside a DEDICATED worktree
14
15
  # (~/.coord-web-checkout, never shared with an operator or `coord drive`),
15
16
  # - atomically repoints ~/coord-web-dist at the new build.
16
17
  #
@@ -1,19 +1,26 @@
1
1
  #!/usr/bin/env bash
2
2
  #
3
- # coord-web-dist-build.sh — build the `coord-web` webapp from its merged
4
- # `main` into a directory `coord web --dist` serves, WITHOUT touching
5
- # ~/.coord-venv (#1543).
3
+ # coord-web-dist-build.sh — build the React webapp from the `coord-web`
4
+ # repo's merged `main` into a directory `coord web --dist` serves, WITHOUT
5
+ # touching ~/.coord-venv (#1543; retargeted at `coord-web` by #2470 once the
6
+ # webapp moved out of THIS repo into its own, epic #2002 — see
7
+ # docs/ADR_COORD_WEB_DIST.md for the decision. Before #2470 this built
8
+ # `coord/dashboard/webapp` out of a `claude-coordinator` checkout; the
9
+ # mechanism below is otherwise unchanged, only which repo it points at).
6
10
  #
7
11
  # Why this exists: coord-web, coord-agent and coord-serve all `ExecStart`
8
12
  # from the SAME ~/.coord-venv, so "ship a webapp change" used to mean
9
13
  # `pip install --upgrade code-coordinator` on that venv — which also
10
14
  # upgrades the board daemon and the agent runtime on that host, and
11
15
  # `coord agent update` is already known to kill running headless workers
12
- # (see the #1543 issue body). This script decouples the two: it keeps an
13
- # independent worktree of the webapp's repo, builds it from merged main into
14
- # a fresh release directory named after the SHA, and atomically repoints a
15
- # symlink at it. `coord web --dist ~/coord-web-dist` (see
16
- # deploy/coord-web.service) always points at that symlink.
16
+ # (see the #1543 issue body). This script decouples the two: it keeps a
17
+ # DEDICATED clone of the `coord-web` repo (never an operator's own
18
+ # `~/src/coord-web` dev checkout's working tree same "never the checkout
19
+ # someone else is using" rule this script has always applied to the repo it
20
+ # builds from), builds it from merged main into a fresh, timestamped release
21
+ # directory, and atomically repoints a symlink at it. `coord web --dist
22
+ # ~/coord-web-dist` (see deploy/coord-web.service) always points at that
23
+ # symlink.
17
24
  #
18
25
  # #2009 (epic #2002) — WHICH repo this builds changed, nothing else did.
19
26
  # Until the split, `$BASE_CHECKOUT` was a checkout of *claude-coordinator*
@@ -28,11 +35,12 @@
28
35
  # file (#2122) all carry over untouched, because none of them ever depended
29
36
  # on which repo the source came from.
30
37
  #
31
- # ONE thing does still come from claude-coordinator: the health check boots a
32
- # real `coord web --fixture` and needs that repo's board fixture JSON, which
33
- # `coord-web` has no copy of. `$COORD_CHECKOUT` (default
34
- # `$SRC_ROOT/code-coordinator`) is where it is read from — set
35
- # `$HEALTH_CHECK_FIXTURE` directly on a host that keeps no such checkout.
38
+ # The health check boots a real `coord web --fixture` and needs a board
39
+ # fixture JSON for it — `coord-web` vendored its own copy of the one
40
+ # `e2e/fixtureServer.ts` already uses (post-#2005 split, commit 7e0bf5b), so
41
+ # this reads `$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json` and
42
+ # has no dependency on a claude-coordinator checkout being present. Set
43
+ # `$HEALTH_CHECK_FIXTURE` directly to override.
36
44
  #
37
45
  # NO RESTART of coord-web is required after the first build. Starlette's
38
46
  # StaticFiles/FileResponse re-resolve the directory on every request (see
@@ -45,14 +53,21 @@
45
53
  # once, THEN start/enable coord-web.
46
54
  #
47
55
  # Safe to run unattended on a timer (see coord-web-dist-build.timer): it
48
- # never touches ~/.coord-venv, ~/src/coord-web's own checkout (it
49
- # uses a DEDICATED `git worktree`, so it can't collide with whatever branch
50
- # an operator has that checkout parked on same reasoning as `coord drive`'s
51
- # worktree isolation), or any running coord-agent/coord-serve/coord-web
52
- # process. A `flock` guards against overlapping runs; a same-SHA re-run is a
53
- # fast no-op.
56
+ # never touches ~/.coord-venv or $BASE_CHECKOUT's working tree (only
57
+ # `git fetch`/`rev-parse` run there the actual build happens in a
58
+ # SEPARATE, DEDICATED `git worktree`, $WEBAPP_CHECKOUT, so it can't collide
59
+ # with whatever branch an operator has $BASE_CHECKOUT parked on — same
60
+ # reasoning as `coord drive`'s worktree isolation), or any running
61
+ # coord-agent/coord-serve/coord-web process. A `flock` guards against
62
+ # overlapping runs; a same-SHA re-run is a fast no-op.
54
63
  #
55
- # Install:
64
+ # Install: $BASE_CHECKOUT (default ~/src/coord-web) must be a real, already-
65
+ # cloned `coord-web` checkout before the first run — this script only
66
+ # fetches/rev-parses/worktrees off it, it never `git clone`s one into
67
+ # existence. Use a checkout dedicated to this deploy lane if the operator
68
+ # also keeps their own `coord-web` dev checkout elsewhere on this box.
69
+ #
70
+ # git clone <coord-web-remote> ~/src/coord-web # one-time, if not already there
56
71
  # cp deploy/coord-web-dist-build.sh ~/.local/bin/ # or run in place
57
72
  # chmod +x ~/.local/bin/coord-web-dist-build.sh
58
73
  # ~/.local/bin/coord-web-dist-build.sh # first build, before
@@ -116,6 +131,12 @@
116
131
 
117
132
  set -uo pipefail
118
133
 
134
+ # #2470: tracks the `coord-web` repo's main, not this repo's — see the
135
+ # header. $BASE_CHECKOUT is read-only from this script's point of view (only
136
+ # `git fetch`/`rev-parse`/`worktree add` ever touch it, never `checkout`), so
137
+ # an operator's own `coord-web` dev checkout at the default path is safe in
138
+ # principle, but a checkout dedicated to this deploy lane is still the
139
+ # documented install step — see the header's "Install" section.
119
140
  SRC_ROOT="${SRC_ROOT:-$HOME/src}"
120
141
  # #2009: the webapp's repo, not claude-coordinator's. See the header.
121
142
  REPO_NAME="${REPO_NAME:-coord-web}"
@@ -126,10 +147,6 @@ BRANCH="${BRANCH:-main}"
126
147
  # hard-coded `coord/dashboard/webapp`, and stays configurable so a future
127
148
  # monorepo layout needs an env var rather than an edit here.
128
149
  WEBAPP_SUBDIR="${WEBAPP_SUBDIR:-}"
129
- # claude-coordinator's checkout — needed ONLY for the health-check fixture
130
- # below, which lives in that repo's tests/fixtures/ and has no coord-web
131
- # equivalent. Not fetched, not built, not written to.
132
- COORD_CHECKOUT="${COORD_CHECKOUT:-$SRC_ROOT/code-coordinator}"
133
150
 
134
151
  # A worktree DEDICATED to this script — never the same directory an operator
135
152
  # or `coord drive` worktree might be using, and never checked out over a
@@ -168,9 +185,20 @@ HEALTH_CHECK_PORT="${HEALTH_CHECK_PORT:-18434}"
168
185
  HEALTH_CHECK_TIMEOUT_SECS="${HEALTH_CHECK_TIMEOUT_SECS:-20}"
169
186
  # The reference seeded board (#1538) — deterministic, no DB/fleet/network, so
170
187
  # the scratch instance below never touches ~/.coord/coord.db or races the
171
- # real coord-web/coord-serve/coord-agent processes. Defaults to the fixture
172
- # AT THE SHA BEING DEPLOYED (via $WEBAPP_CHECKOUT), so the fixture schema
173
- # always matches the server code that will parse it.
188
+ # real coord-web/coord-serve/coord-agent processes. Defaults to the copy
189
+ # checked into $WEBAPP_CHECKOUT (the `coord-web` SHA being deployed) at
190
+ # `e2e/fixtures/board-pipeline-basic.json` that is where the fixture
191
+ # actually lives in the `coord-web` repo (`git ls-tree -r --name-only
192
+ # origin/main` has no `tests/` directory at all post-split). NOTE:
193
+ # `coord-web`'s own `playwright.acceptance.config.ts` still has a stale
194
+ # `DEFAULT_FIXTURE` pointing at the old `tests/fixtures/...` path (a
195
+ # leftover `REPO_ROOT` miscalculation from before the repo split — see
196
+ # docs/ADR_COORD_WEB_DIST.md) so do NOT use that config as the source of
197
+ # truth for this path; this comment documents the real, verified location
198
+ # instead (#2470). This is never a claim that the fixture matches the
199
+ # INSTALLED `coord`'s server code, which post-#2002-split is versioned
200
+ # independently (see docs/ADR_COORD_WEB_DIST.md, "Staleness across the
201
+ # split").
174
202
  HEALTH_CHECK_FIXTURE="${HEALTH_CHECK_FIXTURE:-}"
175
203
 
176
204
  say() { echo "[$(date -Is)] $*" >&2; }
@@ -220,9 +248,7 @@ health_check_release() {
220
248
  return 1
221
249
  fi
222
250
 
223
- # #2009: read from claude-coordinator's checkout, not $WEBAPP_CHECKOUT
224
- # the fixture is a coord *board* fixture and never moved to coord-web.
225
- fixture="${HEALTH_CHECK_FIXTURE:-$COORD_CHECKOUT/tests/fixtures/board-pipeline-basic.json}"
251
+ fixture="${HEALTH_CHECK_FIXTURE:-$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json}"
226
252
  if [[ ! -f "$fixture" ]]; then
227
253
  say "ERROR: health-check fixture missing: $fixture — cannot health-check $release_dir"
228
254
  return 1
@@ -48,6 +48,18 @@
48
48
  # overlap the flock, in which case the next fire simply retries 10 minutes
49
49
  # later.
50
50
  #
51
+ # #2470: this unit now tracks the dedicated `coord-web` repo's `main`
52
+ # (deploy/coord-web-dist-build.sh's BASE_CHECKOUT/WEBAPP_CHECKOUT), not
53
+ # `coord/dashboard/webapp/` inside THIS repo (docs/ADR_COORD_WEB_DIST.md).
54
+ # The cadence measurement above predates that split and was taken against
55
+ # this repo's merge history; it stays the right order-of-magnitude
56
+ # justification for 10 minutes because `coord-web`, being a repo dedicated
57
+ # entirely to the webapp, has EVERY merge to its `main` in-scope for a build
58
+ # — there is no "does this commit touch webapp/ at all" filtering to do
59
+ # anymore (the script never filtered by path either; it always rebuilt on
60
+ # any `origin/main` SHA change, webapp-only or not — this just makes that
61
+ # now-trivially-true for the repo it targets).
62
+ #
51
63
  # Install: see deploy/coord-web-dist-build.sh's header, or
52
64
  # docs/PHONE_WEBAPP.md / docs/AGENT_OPERATIONS.md.
53
65
 
@@ -156,3 +156,14 @@ timer is still alive.
156
156
  - Options 2 and 3 remain available to revisit if `coord-web` ever needs a
157
157
  distribution channel independent of this fleet's own daemon host — no
158
158
  requirement in scope today calls for that.
159
+ - Known follow-up, not fixed here: `coord-web`'s own
160
+ `playwright.acceptance.config.ts` computes `DEFAULT_FIXTURE` via a
161
+ `REPO_ROOT = path.resolve(here, '../../..')` climb that predates the
162
+ split, when that config lived three levels down under
163
+ `coord/dashboard/webapp/`. Now that the config lives at the `coord-web`
164
+ repo root, that climb resolves outside the repo entirely, so the default
165
+ points at a path that doesn't exist — the same class of bug #2470 fixed
166
+ in `deploy/coord-web-dist-build.sh`'s health-check fixture default (now
167
+ `$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json`). Will bite
168
+ `coord-web`'s own `npm run test:acceptance` whenever it runs with no
169
+ explicit fixture path arg; needs a fix in the `coord-web` repo, not here.
@@ -1418,7 +1418,7 @@ Three things follow, and they are why this command is shaped the way it is:
1418
1418
  | unit files vs the packaged `coord/deploy/**` | each machine's `/health` | `unit_drift` / PATH shadow (#1831, #1927) |
1419
1419
  | `~/.coord-cli-venv` | each machine's `/health` | `cli_venv` (#1806) |
1420
1420
  | `coord-tui` binary vs `tui/` source | each machine's `/health` | `tui_binary` — until PKG-3/PKG-4 give it a real channel |
1421
- | `coord web --dist` bundle vs `coord/dashboard/webapp/` source | each machine's `/health` | `webapp_bundle` / `fleet_webapp_bundle` — lane 5, staleness only (see below) |
1421
+ | `coord web --dist` bundle vs `coord-web`'s own source | each machine's `/health` | `webapp_bundle` / `fleet_webapp_bundle` — lane 5, staleness only (see below) |
1422
1422
 
1423
1423
  `.githooks/**` (lane 6 above) is deliberately **not** graded here: its failure
1424
1424
  mode is the inverse — it is live everywhere at the next `git fetch`, with no
@@ -1431,17 +1431,19 @@ row above — deliberately, not by oversight.** Every other lane compares
1431
1431
  against *the released version*: a pip version string that both an agent venv
1432
1432
  and a spawned `coord` can report. The webapp bundle has no such string to
1433
1433
  compare against. `deploy/coord-web-dist-build.timer` publishes it
1434
- continuously off `origin/main`'s SHA, once a minute, **decoupled on purpose**
1435
- from the `~/.coord-venv` release cadence every other lane rides (#1543)
1436
- that decoupling is the entire point of that pipeline, so folding it into the
1437
- version-skew map above would manufacture permanent, meaningless "skew"
1438
- between a semver string and a git SHA on every correctly-running fleet, not
1439
- report a real defect. What `webapp_bundle` (machine-scope) /
1440
- `fleet_webapp_bundle` (fleet-scope) check instead, on its own terms the
1441
- same shape `tui_binary`/`fleet_tui_binary` already use for the locally-built
1442
- `coord-tui` binary is whether the live bundle is *stale relative to the
1443
- `coord/dashboard/webapp/` source tree it claims to have been built from*, and
1444
- whether two machines both serving `coord web` agree on which build that is.
1434
+ continuously off the `coord-web` repo's `origin/main` SHA (#2470; before
1435
+ that, this repo's own `coord/dashboard/webapp/`, epic #2002), every 10
1436
+ minutes (#2122), **decoupled on purpose** from the `~/.coord-venv` release
1437
+ cadence every other lane rides (#1543) that decoupling is the entire point
1438
+ of that pipeline, so folding it into the version-skew map above would
1439
+ manufacture permanent, meaningless "skew" between a semver string and a git
1440
+ SHA on every correctly-running fleet, not report a real defect. What
1441
+ `webapp_bundle` (machine-scope) / `fleet_webapp_bundle` (fleet-scope) check
1442
+ instead, on its own terms the same shape `tui_binary`/`fleet_tui_binary`
1443
+ already use for the locally-built `coord-tui` binary is whether the live
1444
+ bundle is *stale relative to the `coord-web` source tree it claims to have
1445
+ been built from*, and whether two machines both serving `coord web` agree on
1446
+ which build that is.
1445
1447
  A WARN there means "`coord-web-dist-build.timer` has stopped publishing",
1446
1448
  which is the failure mode this lane exists to catch; it says nothing about
1447
1449
  whether that publish is caught up with the latest tagged release, because