code-coordinator 0.5.184__tar.gz → 0.5.186__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.184 → code_coordinator-0.5.186}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/config.py +9 -5
  5. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web-dist-build.service +6 -5
  6. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web-dist-build.timer +12 -0
  7. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/deploy_lane_facts.py +28 -24
  8. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_deploy_lanes.py +2 -2
  9. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_verify.py +1 -1
  10. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reports.py +170 -5
  11. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.service +6 -5
  12. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.sh +56 -30
  13. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.timer +12 -0
  14. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_DIST.md +11 -0
  15. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/AGENT_OPERATIONS.md +14 -12
  16. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PHONE_WEBAPP.md +14 -10
  17. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_web_dist.py +82 -2
  18. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_deploy_lane_facts.py +66 -18
  19. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reports.py +302 -11
  20. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/reports.rs +105 -4
  21. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/board.md +0 -0
  22. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/complete-session.md +0 -0
  23. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/coordinator.md +0 -0
  24. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/_lib.sh +0 -0
  25. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-checkout +0 -0
  26. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-commit +0 -0
  27. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-merge +0 -0
  28. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/coord-ci-acceptance.yml +0 -0
  30. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/auto-release.yml +0 -0
  31. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/cargo-test.yml +0 -0
  32. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/release-tui.yml +0 -0
  34. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/test.yml +0 -0
  35. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.gitignore +0 -0
  36. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/CLAUDE.md +0 -0
  37. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/GOAL.md +0 -0
  38. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/LICENSE +0 -0
  39. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/MANIFEST.in +0 -0
  40. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/README.md +0 -0
  41. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/SOURCES.txt +0 -0
  42. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/scm_file_list.json +0 -0
  46. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/top_level.txt +0 -0
  47. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/__init__.py +0 -0
  48. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/_board_mapping.py +0 -0
  49. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/acceptance.py +0 -0
  50. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/acceptance_drivers.py +0 -0
  51. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent.py +0 -0
  52. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent_app.py +0 -0
  53. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent_update.py +0 -0
  54. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/.gitignore +0 -0
  55. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/agents/work.md +0 -0
  56. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/routing.jsonc +0 -0
  57. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/audit.py +0 -0
  58. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/auto_loop.py +0 -0
  59. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/block_log.py +0 -0
  60. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_bool_guard.py +0 -0
  61. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/ci_github.py +0 -0
  68. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/ci_store.py +0 -0
  69. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/claim.py +0 -0
  70. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/client.py +0 -0
  72. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/__init__.py +0 -0
  73. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/_common.py +0 -0
  74. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/acceptance.py +0 -0
  75. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/agent_ops.py +0 -0
  76. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/audit.py +0 -0
  77. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/chat.py +0 -0
  78. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/dispatch.py +0 -0
  79. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/dispatch_workers.py +0 -0
  80. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/release.py +0 -0
  92. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/repo.py +0 -0
  93. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/report.py +0 -0
  94. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/review.py +0 -0
  95. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/scorecard.py +0 -0
  96. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/sessions.py +0 -0
  97. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/setup.py +0 -0
  98. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/status.py +0 -0
  99. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/db.py +0 -0
  112. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.service +0 -0
  116. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.sh +0 -0
  117. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.timer +0 -0
  118. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-drive-queue.service +0 -0
  119. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-drive-queue.timer +0 -0
  120. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-notify.service +0 -0
  121. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-notify.timer +0 -0
  122. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-propagate.service +0 -0
  123. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-propagate.timer +0 -0
  124. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-window.service +0 -0
  125. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-window.timer +0 -0
  126. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-serve.service +0 -0
  127. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web.service +0 -0
  128. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deps.py +0 -0
  131. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/diagnose.py +0 -0
  132. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dispatch.py +0 -0
  133. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dist_name.py +0 -0
  134. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive.py +0 -0
  135. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive_queue.py +0 -0
  136. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive_state.py +0 -0
  137. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/events.py +0 -0
  138. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/failure_class.py +0 -0
  139. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/filelock.py +0 -0
  140. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/fleet_config_health.py +0 -0
  141. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/goal.py +0 -0
  148. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/graph_health.py +0 -0
  149. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/__init__.py +0 -0
  150. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/aggregate.py +0 -0
  151. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/__init__.py +0 -0
  152. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/agent_install.py +0 -0
  153. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/cargo_targets.py +0 -0
  154. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/claude_binary.py +0 -0
  155. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/coord_web_ci_pin.py +0 -0
  156. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/disk.py +0 -0
  157. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_board.py +0 -0
  158. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_phantom.py +0 -0
  159. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_unit_drift.py +0 -0
  160. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/graph.py +0 -0
  161. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/graphify_cli.py +0 -0
  162. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/index_lock.py +0 -0
  163. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/plan_usage.py +0 -0
  164. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/repo_state.py +0 -0
  165. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/spawned_coord.py +0 -0
  166. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/timer_active.py +0 -0
  167. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/toolchain.py +0 -0
  168. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/unit_drift.py +0 -0
  169. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/unit_enablement.py +0 -0
  170. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/worktrees.py +0 -0
  171. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/cli.py +0 -0
  172. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/context.py +0 -0
  173. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/fleet_snapshot.py +0 -0
  174. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/models.py +0 -0
  175. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/pypi.py +0 -0
  176. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/registry.py +0 -0
  177. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/render.py +0 -0
  178. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/units.py +0 -0
  179. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/hooks.py +0 -0
  180. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/housekeeping.py +0 -0
  181. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/interactive.py +0 -0
  182. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/issue_store.py +0 -0
  183. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/liveness_auditor.py +0 -0
  184. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/machine_pause.py +0 -0
  185. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/merge_queue.py +0 -0
  186. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_chat.py +0 -0
  187. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_dispatch.py +0 -0
  188. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_gate.py +0 -0
  189. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_order.py +0 -0
  190. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/mock_author.py +0 -0
  191. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/models.py +0 -0
  192. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/network.py +0 -0
  193. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/new_issue_chat.py +0 -0
  194. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/__init__.py +0 -0
  195. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/baseline.py +0 -0
  196. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/cli.py +0 -0
  197. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/collect.py +0 -0
  198. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/digest.py +0 -0
  199. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/models.py +0 -0
  200. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/predicate.py +0 -0
  201. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/service.py +0 -0
  202. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/store.py +0 -0
  203. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/transport.py +0 -0
  204. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notify.py +0 -0
  205. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/openapi.py +0 -0
  206. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/overlap_fence.py +0 -0
  207. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/overlap_predict.py +0 -0
  208. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/parentage.py +0 -0
  209. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/parentage_github.py +0 -0
  210. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/pipeline.py +0 -0
  211. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/plan_parser.py +0 -0
  212. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/plans.py +0 -0
  213. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/platform_paths.py +0 -0
  214. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_bridge.py +0 -0
  215. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_store.py +0 -0
  216. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_sync.py +0 -0
  217. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/pr_body_lint.py +0 -0
  218. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/prereqs.py +0 -0
  219. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/progress.py +0 -0
  220. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/__init__.py +0 -0
  221. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/base.py +0 -0
  222. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/claude.py +0 -0
  223. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/claude_pty.py +0 -0
  224. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/opencode.py +0 -0
  225. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/queue_diagnose.py +0 -0
  226. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reconcile.py +0 -0
  227. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reconcile_tick.py +0 -0
  228. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/refine_chat.py +0 -0
  229. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_cordon.py +0 -0
  230. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_propagate.py +0 -0
  231. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_window.py +0 -0
  232. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/repo_edit.py +0 -0
  233. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/repo_onboard.py +0 -0
  234. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/revalidate.py +0 -0
  235. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/review.py +0 -0
  236. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/scorecard.py +0 -0
  237. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/self_health.py +0 -0
  238. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/serve_app.py +0 -0
  239. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  240. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  241. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  242. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/portal-followup/SKILL.md +0 -0
  245. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  246. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  247. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/update-issue/SKILL.md +0 -0
  248. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/smoke.py +0 -0
  249. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/spend_ceiling.py +0 -0
  250. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/split_work.py +0 -0
  251. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/stage_projection.py +0 -0
  252. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/state.py +0 -0
  253. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_author.py +0 -0
  254. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_chat.py +0 -0
  255. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_orchestrator.py +0 -0
  256. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_report.py +0 -0
  257. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/tui_release.py +0 -0
  258. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage.py +0 -0
  259. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage_limits.py +0 -0
  260. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage_rollup.py +0 -0
  261. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/worker_events.py +0 -0
  262. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coordinator.example.yml +0 -0
  263. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-agent.service +0 -0
  264. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.service +0 -0
  265. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.sh +0 -0
  266. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.timer +0 -0
  267. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-drive-queue.service +0 -0
  268. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-drive-queue.timer +0 -0
  269. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-notify.service +0 -0
  270. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-notify.timer +0 -0
  271. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-propagate.service +0 -0
  272. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-propagate.timer +0 -0
  273. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-window.service +0 -0
  274. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-window.timer +0 -0
  275. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-serve.service +0 -0
  276. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-rollback.sh +0 -0
  277. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web.service +0 -0
  278. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/node-shim.sh +0 -0
  279. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  280. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_CI.md +0 -0
  281. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ARCHITECTURE.md +0 -0
  282. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ARCH_SECURITY_GATES.md +0 -0
  283. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/COCKPIT.md +0 -0
  284. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CONTROL_CENTER.md +0 -0
  285. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/COST_DISCIPLINE.md +0 -0
  286. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CROSS_PLATFORM.md +0 -0
  287. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CUSTOMER_PORTAL.md +0 -0
  288. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/DRIVE_QUEUE.md +0 -0
  289. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/EPHEMERAL_WORKERS.md +0 -0
  290. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/FORGE_MIGRATION.md +0 -0
  291. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/GRAPHIFY_SETUP.md +0 -0
  292. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ISSUE_GUIDANCE.md +0 -0
  293. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/MAC_MINI.md +0 -0
  294. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  295. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/NOTIFIER.md +0 -0
  296. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/OPENCODE_VERIFICATION.md +0 -0
  297. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/OPERATING_GOTCHAS.md +0 -0
  298. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ORACLE_LOOP.md +0 -0
  299. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PIPELINE_V2.md +0 -0
  300. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PLATFORM_EVOLUTION.md +0 -0
  301. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/SECOND_BACKEND.md +0 -0
  302. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/STORE_SERVICE.md +0 -0
  303. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  304. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/WEB_CONTROL_CENTER.md +0 -0
  305. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/WSL_WINDOWS_WORKER.md +0 -0
  306. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/README.md +0 -0
  307. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/_tokens.css +0 -0
  308. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/issue-detail.html +0 -0
  309. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/pipeline-narrow.html +0 -0
  310. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/pipeline-wide.html +0 -0
  311. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/graphify-out/.gitignore +0 -0
  312. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/install-agent.sh +0 -0
  313. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/pyproject.toml +0 -0
  314. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/audit_review_verdict_overrides.py +0 -0
  315. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  316. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/build-worker-image.sh +0 -0
  317. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/coordinator-machine.py +0 -0
  318. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/epic-down.sh +0 -0
  319. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/epic-up.sh +0 -0
  320. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/preflight.sh +0 -0
  321. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/provision-worker.sh +0 -0
  322. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  323. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  324. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/verify-github-token.sh +0 -0
  325. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/codegen.py +0 -0
  326. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/coord-test-runner.sh +0 -0
  327. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/drive-batch.sh +0 -0
  328. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/gen_board_fixture.py +0 -0
  329. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/next_release_tag.py +0 -0
  330. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/run_tests_in_populated_home.sh +0 -0
  331. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/run_tests_without_gh.sh +0 -0
  332. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/smoke_437_interactive.py +0 -0
  333. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_878_review_capture.py +0 -0
  334. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_release_published.py +0 -0
  335. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_release_wheel.py +0 -0
  336. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/setup.cfg +0 -0
  337. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/SMOKE_SET.md +0 -0
  338. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/__init__.py +0 -0
  339. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  340. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/contract.md +0 -0
  341. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/manifest.yml +0 -0
  342. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  343. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  344. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  345. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  346. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/conftest.py +0 -0
  347. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/contract.md +0 -0
  348. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/manifest.yml +0 -0
  349. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  350. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  351. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/contract.md +0 -0
  352. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/manifest.yml +0 -0
  353. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  354. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  355. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  356. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  357. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  358. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  359. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  360. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  361. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  362. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  363. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/contract.md +0 -0
  364. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  365. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  366. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/manifest.yml +0 -0
  367. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  368. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/tsconfig.json +0 -0
  369. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  370. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  371. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  372. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/contract.md +0 -0
  373. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  374. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/manifest.yml +0 -0
  375. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  376. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  377. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  378. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  379. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  380. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  381. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  382. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  383. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  384. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  385. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  386. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  387. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/conftest.py +0 -0
  388. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/board-pipeline-basic.json +0 -0
  389. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  390. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  391. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  392. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  393. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/all_pass.json +0 -0
  394. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  395. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/mixed_fail.json +0 -0
  396. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  397. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  398. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/skip.json +0 -0
  399. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/truncated.json +0 -0
  400. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  401. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  402. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  403. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  404. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  405. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  406. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  407. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_acceptance.py +0 -0
  409. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_acceptance_drivers.py +0 -0
  410. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent.py +0 -0
  411. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_api_error.py +0 -0
  412. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_app.py +0 -0
  413. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_branch_base.py +0 -0
  414. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_branch_capture.py +0 -0
  415. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_config_free_1712.py +0 -0
  416. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_deploy_units_endpoint.py +0 -0
  417. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_dirty_worktree.py +0 -0
  418. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  419. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_graph_self_heal.py +0 -0
  420. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_health_h3.py +0 -0
  421. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_idle_restart.py +0 -0
  422. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_push_failure.py +0 -0
  423. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_reap.py +0 -0
  424. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_repos_and_pull.py +0 -0
  425. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_restart_services_endpoint.py +0 -0
  426. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_skills_self_heal.py +0 -0
  427. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_startup_diagnostics.py +0 -0
  428. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_update.py +0 -0
  429. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_update_bluegreen.py +0 -0
  430. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_usage_limit.py +0 -0
  431. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_zero_commit.py +0 -0
  432. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ambient_home_isolation.py +0 -0
  433. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_approve_reject_plan.py +0 -0
  434. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_approve_usage_gate.py +0 -0
  435. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_assignment_already_recorded_daemon.py +0 -0
  436. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_log.py +0 -0
  437. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_outcome.py +0 -0
  438. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_query.py +0 -0
  439. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_auto_loop.py +0 -0
  440. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_auto_release_publish_2035.py +0 -0
  441. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_base_checkout_restore.py +0 -0
  442. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_block_log.py +0 -0
  443. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_cap_762.py +0 -0
  444. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_fixture.py +0 -0
  445. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_read_path.py +0 -0
  446. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_service.py +0 -0
  447. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_state.py +0 -0
  448. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_wire.py +0 -0
  449. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_brain.py +0 -0
  450. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_branch_model.py +0 -0
  451. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_bug_intake.py +0 -0
  452. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_build_worker_image_env_update.py +0 -0
  453. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cargo_cache.py +0 -0
  454. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_acceptance_gate_1950.py +0 -0
  455. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_parity_2091.py +0 -0
  456. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_store.py +0 -0
  457. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_claim.py +0 -0
  458. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_acceptance.py +0 -0
  459. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign.py +0 -0
  460. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  461. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_interactive_remote.py +0 -0
  462. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_provider.py +0 -0
  463. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  464. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_audit.py +0 -0
  465. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_chat_continue.py +0 -0
  466. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_decide.py +0 -0
  467. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_config_provenance.py +0 -0
  468. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_graph.py +0 -0
  469. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_self.py +0 -0
  470. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor.py +0 -0
  471. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor_config_free_1801.py +0 -0
  472. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  473. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_drive.py +0 -0
  474. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_drive_queue.py +0 -0
  475. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_escalate.py +0 -0
  476. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_fix_headless_review.py +0 -0
  477. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_gate_a.py +0 -0
  478. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_install_drift.py +0 -0
  479. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_install_skills.py +0 -0
  480. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_issue_create_label.py +0 -0
  481. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_issue_reopen.py +0 -0
  482. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_merge.py +0 -0
  483. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_assign.py +0 -0
  484. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_capture.py +0 -0
  485. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_chat_add_child.py +0 -0
  486. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_dispatch.py +0 -0
  487. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_gate_b.py +0 -0
  488. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_gate_c.py +0 -0
  489. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_order.py +0 -0
  490. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  491. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_ship.py +0 -0
  492. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_network.py +0 -0
  493. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_new_issue_chat.py +0 -0
  494. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_plans.py +0 -0
  495. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_portal.py +0 -0
  496. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_pull_artifact.py +0 -0
  497. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_queue.py +0 -0
  498. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_reattach_sessions.py +0 -0
  499. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_refine_board.py +0 -0
  500. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_preflight.py +0 -0
  501. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_propagate.py +0 -0
  502. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_window.py +0 -0
  503. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_repo_2220.py +0 -0
  504. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_scorecard.py +0 -0
  505. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_set_review_findings.py +0 -0
  506. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_advisory_terminal.py +0 -0
  507. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_merge_queue.py +0 -0
  508. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_provider.py +0 -0
  509. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_review_finalizing.py +0 -0
  510. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_test_failed_tag.py +0 -0
  511. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_usage_limit.py +0 -0
  512. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_sync_comments_873.py +0 -0
  513. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_test_plan.py +0 -0
  514. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_track.py +0 -0
  515. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_tui_update.py +0 -0
  516. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_wait.py +0 -0
  517. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_client_base_install.py +0 -0
  518. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_comments.py +0 -0
  519. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_completion_summary.py +0 -0
  520. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config.py +0 -0
  521. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_acceptance.py +0 -0
  522. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_audit.py +0 -0
  523. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_pricing.py +0 -0
  524. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  525. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_usage_gate.py +0 -0
  526. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_conflict_fix.py +0 -0
  527. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_conflict_fix_semantic.py +0 -0
  528. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test.py +0 -0
  529. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_baseline.py +0 -0
  530. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_populated_home.py +0 -0
  531. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_routing.py +0 -0
  532. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_toolchain.py +0 -0
  533. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_web_sse_restart_live.py +0 -0
  534. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coordinator_machine.py +0 -0
  535. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cross_platform_imports.py +0 -0
  536. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard.py +0 -0
  537. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_fixture.py +0 -0
  538. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_terminal.py +0 -0
  539. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_terminal_live.py +0 -0
  540. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_db.py +0 -0
  541. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dead_end.py +0 -0
  542. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_db_backup.py +0 -0
  543. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_web_rollback.py +0 -0
  544. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_drive_queue_unit.py +0 -0
  545. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_manifest.py +0 -0
  546. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_units_lane.py +0 -0
  547. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_web_unit.py +0 -0
  548. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deps.py +0 -0
  549. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_diagnose.py +0 -0
  550. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dispatch.py +0 -0
  551. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dispatch_target_validation.py +0 -0
  552. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dist_name.py +0 -0
  553. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_done_housekeeping.py +0 -0
  554. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive.py +0 -0
  555. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_queue.py +0 -0
  556. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_state.py +0 -0
  557. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_tmux.py +0 -0
  558. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_capability_detection.py +0 -0
  559. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  560. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_image_provenance.py +0 -0
  561. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_errors.py +0 -0
  562. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_events.py +0 -0
  563. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_failure_class.py +0 -0
  564. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_filelock.py +0 -0
  565. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  566. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fix_of_force_override.py +0 -0
  567. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_config_health.py +0 -0
  568. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_health_probes.py +0 -0
  569. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_health_snapshot.py +0 -0
  570. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_freshness.py +0 -0
  571. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_a.py +0 -0
  572. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_b.py +0 -0
  573. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_snapshot_staleness.py +0 -0
  574. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gates.py +0 -0
  575. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  576. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_generated_types_fixture.py +0 -0
  577. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_github_ops.py +0 -0
  578. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_goal.py +0 -0
  579. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_graph_health.py +0 -0
  580. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_graph_selfheal_absent_2237.py +0 -0
  581. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_handoff.py +0 -0
  582. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_checks.py +0 -0
  583. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_cli.py +0 -0
  584. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_cli_graph.py +0 -0
  585. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_config.py +0 -0
  586. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_context.py +0 -0
  587. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_coord_web_ci_pin.py +0 -0
  588. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_incident_regression.py +0 -0
  589. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_pypi.py +0 -0
  590. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_registry.py +0 -0
  591. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_timer_active.py +0 -0
  592. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_toolchain.py +0 -0
  593. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_unit_drift.py +0 -0
  594. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_unit_enablement.py +0 -0
  595. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_hooks.py +0 -0
  596. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_human_attended_437.py +0 -0
  597. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_init.py +0 -0
  598. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_integration.py +0 -0
  599. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_briefing_echo.py +0 -0
  600. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_prefill_state.py +0 -0
  601. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_session_relaunch.py +0 -0
  602. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_test_verdict_backstop.py +0 -0
  603. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_token_attribution.py +0 -0
  604. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_worktree.py +0 -0
  605. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_issue_store_seam.py +0 -0
  606. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_liveness_auditor.py +0 -0
  607. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_liveness_notify.py +0 -0
  608. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_machine_pause.py +0 -0
  609. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_merge_queue.py +0 -0
  610. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_merge_verify.py +0 -0
  611. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_chat.py +0 -0
  612. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_dispatch.py +0 -0
  613. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_gate.py +0 -0
  614. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_order.py +0 -0
  615. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_seam.py +0 -0
  616. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_mock_author.py +0 -0
  617. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_model_tiering.py +0 -0
  618. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_models.py +0 -0
  619. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_models_config_labels.py +0 -0
  620. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_needs_attention.py +0 -0
  621. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_network.py +0 -0
  622. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_new_issue_chat.py +0 -0
  623. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_next_release_tag.py +0 -0
  624. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_no_direct_gh_calls.py +0 -0
  625. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_node_shim.py +0 -0
  626. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_baseline.py +0 -0
  627. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_cli.py +0 -0
  628. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_collect.py +0 -0
  629. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_config.py +0 -0
  630. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_drive_seam.py +0 -0
  631. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_isolation.py +0 -0
  632. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_predicate.py +0 -0
  633. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_quiet_hours.py +0 -0
  634. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_service.py +0 -0
  635. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notify.py +0 -0
  636. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notify_drain.py +0 -0
  637. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_openapi.py +0 -0
  638. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_operational_defaults.py +0 -0
  639. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_overlap_fence.py +0 -0
  640. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_overlap_predict.py +0 -0
  641. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_packaged_deploy_units.py +0 -0
  642. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_parentage.py +0 -0
  643. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_paste_landed.py +0 -0
  644. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_pipeline.py +0 -0
  645. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_approve_plan_command.py +0 -0
  646. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_pr_command.py +0 -0
  647. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_review_command.py +0 -0
  648. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_only.py +0 -0
  649. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_parser.py +0 -0
  650. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_platform_paths.py +0 -0
  651. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_bridge.py +0 -0
  652. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_config.py +0 -0
  653. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_sync.py +0 -0
  654. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_pr_body_lint.py +0 -0
  655. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_prereqs.py +0 -0
  656. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_production_db_guard.py +0 -0
  657. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_progress.py +0 -0
  658. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_provider_seam.py +0 -0
  659. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers.py +0 -0
  660. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers_config_labels.py +0 -0
  661. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers_pty.py +0 -0
  662. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_quiet_hours.py +0 -0
  663. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_quiet_hours_store_2146.py +0 -0
  664. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reap_merged_sessions.py +0 -0
  665. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reap_stale_interactive_tick.py +0 -0
  666. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile.py +0 -0
  667. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_branch.py +0 -0
  668. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_completions.py +0 -0
  669. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_merges.py +0 -0
  670. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_no_agent_record.py +0 -0
  671. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_tick.py +0 -0
  672. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_usage_limit_done.py +0 -0
  673. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_refine_chat.py +0 -0
  674. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_2101.py +0 -0
  675. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  676. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_deadlock_2240.py +0 -0
  677. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_propagate.py +0 -0
  678. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_unified_1242.py +0 -0
  679. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_verify.py +0 -0
  680. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_window.py +0 -0
  681. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_remote_auto_prune.py +0 -0
  682. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_remote_interactive_reaper.py +0 -0
  683. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_edit_2220.py +0 -0
  684. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_graph_fleet_2237.py +0 -0
  685. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_onboard_2220.py +0 -0
  686. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_report_result_push.py +0 -0
  687. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry.py +0 -0
  688. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry_advisory_1606.py +0 -0
  689. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry_type_1636.py +0 -0
  690. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_revalidate.py +0 -0
  691. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review.py +0 -0
  692. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_end_review_without_verdict.py +0 -0
  693. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_parse_failure_diagnostic.py +0 -0
  694. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_reaffirm.py +0 -0
  695. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_state.py +0 -0
  696. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_backstop.py +0 -0
  697. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_override_audit.py +0 -0
  698. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_relay.py +0 -0
  699. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_zero_commits.py +0 -0
  700. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_scoped_review_wiring.py +0 -0
  701. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_scorecard.py +0 -0
  702. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_self_health.py +0 -0
  703. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_serve.py +0 -0
  704. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_serve_app_board_trim.py +0 -0
  705. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_session.py +0 -0
  706. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_slice_issue_attribution.py +0 -0
  707. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke.py +0 -0
  708. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke_live_checkout_restore.py +0 -0
  709. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke_workflow.py +0 -0
  710. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_spend_ceiling.py +0 -0
  711. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_spend_ceiling_coordinator.py +0 -0
  712. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_split.py +0 -0
  713. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_split_work.py +0 -0
  714. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stage_projection.py +0 -0
  715. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stalled_pipeline.py +0 -0
  716. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_state.py +0 -0
  717. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_state_review_findings_daemon.py +0 -0
  718. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_status_fleet_footer.py +0 -0
  719. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stop_1567.py +0 -0
  720. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stuck.py +0 -0
  721. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_terminal_command.py +0 -0
  722. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_author.py +0 -0
  723. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_chat.py +0 -0
  724. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_orchestrator.py +0 -0
  725. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_report.py +0 -0
  726. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_verdict_parsing.py +0 -0
  727. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_verdict_transcript_floor.py +0 -0
  728. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_board_audit.py +0 -0
  729. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_config_load_1080.py +0 -0
  730. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_daemon_routing_906.py +0 -0
  731. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_tmux_host.py +0 -0
  732. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_tmux_session.py +0 -0
  733. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_transcript_floor.py +0 -0
  734. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage.py +0 -0
  735. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage_limits.py +0 -0
  736. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage_rollup.py +0 -0
  737. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_venv_live_install_2121.py +0 -0
  738. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_version_single_source.py +0 -0
  739. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_watch.py +0 -0
  740. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  741. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_events.py +0 -0
  742. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_image_pin_sync.py +0 -0
  743. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_safety.py +0 -0
  744. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_test_scoping.py +0 -0
  745. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worktree.py +0 -0
  746. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  747. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/Cargo.lock +0 -0
  748. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/Cargo.toml +0 -0
  749. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/cargo-config-local-quadraui.toml.example +0 -0
  750. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/audit.rs +0 -0
  751. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/chat.rs +0 -0
  752. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/data.rs +0 -0
  753. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/dialogs.rs +0 -0
  754. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/doc_tabs.rs +0 -0
  755. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/drive.rs +0 -0
  756. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/drive_queue.rs +0 -0
  757. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/escalation.rs +0 -0
  758. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/events.rs +0 -0
  759. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fixtures.rs +0 -0
  760. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_health.rs +0 -0
  761. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_sessions.rs +0 -0
  762. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_terminals.rs +0 -0
  763. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/format.rs +0 -0
  764. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/milestone_dag.rs +0 -0
  765. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/mod.rs +0 -0
  766. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/msv.rs +0 -0
  767. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/pipeline.rs +0 -0
  768. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/plans.rs +0 -0
  769. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/render.rs +0 -0
  770. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/sessions.rs +0 -0
  771. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/settings_ui.rs +0 -0
  772. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/sidebar.rs +0 -0
  773. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/terminal.rs +0 -0
  774. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/tests.rs +0 -0
  775. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/types.rs +0 -0
  776. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/workspace.rs +0 -0
  777. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/bin/gtk.rs +0 -0
  778. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/commands.rs +0 -0
  779. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/lib.rs +0 -0
  780. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/main.rs +0 -0
  781. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/settings.rs +0 -0
  782. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/tests/acceptance.rs +0 -0
  783. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/tests/cli.rs +0 -0
  784. {code_coordinator-0.5.184 → code_coordinator-0.5.186}/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.184
3
+ Version: 0.5.186
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.184
3
+ Version: 0.5.186
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.184",
2
+ "tag": "0.5.186",
3
3
  "distance": 0,
4
- "node": "gea4dcf394483b237b6756e217d1187c0b24b598c",
4
+ "node": "g91a8fc0c07fd891a6a9c258c7f30aba6e090c865",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-20"
@@ -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 →
@@ -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:
@@ -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
@@ -2623,6 +2623,13 @@ COMPLETED_COLUMNS = [
2623
2623
  "title",
2624
2624
  "started_at",
2625
2625
  "ended_at",
2626
+ # #2472's four. Appended, never interleaved: the client addresses columns
2627
+ # by INDEX for sorting (`reports_sort_by_column`), so inserting one in the
2628
+ # middle would silently re-point a saved sort at a different column.
2629
+ "legs",
2630
+ "tokens_in",
2631
+ "tokens_out",
2632
+ "cost_total",
2626
2633
  ]
2627
2634
 
2628
2635
  # One entry per COMPLETED_COLUMNS entry, same order (#1760).
@@ -2633,14 +2640,109 @@ COMPLETED_COLUMNS = [
2633
2640
  # server-side report has no such screen context, and its `repo` param
2634
2641
  # defaults to *all repos*, so the pair has to be two real columns — which is
2635
2642
  # also what `issue-activity` already does, and what `RowIdentity` reads.
2643
+ #
2644
+ # #2472's spend columns reuse `_USAGE_COLUMN_META`'s labels/kinds verbatim
2645
+ # (`Legs`, `Tok In`, `Tok Out`, `Total $`) rather than inventing near-synonyms:
2646
+ # an operator reading `completed` and `usage` side by side is looking at the
2647
+ # same numbers out of the same rollup, and two spellings of "Tok In" would
2648
+ # imply otherwise.
2649
+ #
2650
+ # ONE cost column, not `usage`'s `cost_captured`/`cost_est` split. `usage`
2651
+ # splits because it is the dedicated cost report, where "some legs have no
2652
+ # captured cost, don't silently price at $0" (#1763) is the headline; here the
2653
+ # headline is still the time-range list, and a 5-column table growing to 11
2654
+ # would push `title` off a narrow pane. Both halves still ship as extra ROW
2655
+ # keys (see `_completed_spend`) — the wire contract allows row keys beyond
2656
+ # `columns`, so a client that wants the split has it without another column,
2657
+ # and `usage` remains the report to visit for it on screen.
2636
2658
  COMPLETED_COLUMN_META = [
2637
2659
  ColumnMeta(id="repo", label="Repo", kind="text"),
2638
2660
  ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
2639
2661
  ColumnMeta(id="title", label="Title", kind="text", weight=3.0),
2640
2662
  ColumnMeta(id="started_at", label="Started", kind="timestamp"),
2641
2663
  ColumnMeta(id="ended_at", label="Ended", kind="timestamp"),
2664
+ ColumnMeta(id="legs", label="Legs", kind="int", align="right", weight=0.6),
2665
+ ColumnMeta(id="tokens_in", label="Tok In", kind="int", align="right"),
2666
+ ColumnMeta(id="tokens_out", label="Tok Out", kind="int", align="right"),
2667
+ ColumnMeta(id="cost_total", label="Total $", kind="money", align="right"),
2642
2668
  ]
2643
2669
 
2670
+ def _completed_spend(
2671
+ assignment_rows: Sequence[Mapping[str, Any]], pricing: Any
2672
+ ) -> dict[tuple[str, int], dict[str, Any]]:
2673
+ """Per-issue ``legs``/tokens/cost, keyed ``(repo_name, issue_number)``.
2674
+
2675
+ A thin adapter over :func:`coord.usage_rollup.rollup`, **not** a second
2676
+ cost calculator: the pricing rules, the captured-vs-estimated split and
2677
+ the "never silently priced at $0" unknown-model rule all stay in
2678
+ ``usage_rollup``, exactly as #1763 requires, and the numbers are shaped by
2679
+ the same :func:`_usage_metrics` that builds a ``usage`` row. ``legs``
2680
+ therefore counts agent SESSIONS (every dispatch attempt and retry), which
2681
+ is what ``GroupRollup.legs`` already means — no new arithmetic here.
2682
+
2683
+ One keying detail worth being explicit about: ``rollup``'s ``IssueKey``
2684
+ books a leg to :func:`~coord.usage_rollup.row_issue_number`, i.e.
2685
+ ``for_issue_number`` when the leg carries one (#1553's oracle-loop
2686
+ attribution), while this fold's own ``first_dispatch``/``last_finish`` key
2687
+ on the raw ``issue_number``. That divergence is DELIBERATE: the whole
2688
+ point of #2472 is that ``completed``'s cost for an issue equals what
2689
+ ``usage`` reports for the same issue, so the cost columns must use
2690
+ ``usage``'s attribution rule. The timestamps keep #2454's, which is a
2691
+ port of ``completed_rows``.
2692
+ """
2693
+ from coord.usage_rollup import IssueKey, TimeWindow, rollup # noqa: PLC0415
2694
+
2695
+ # THE WINDOW IS UNBOUNDED — the spend figures are the issue's *lifetime*
2696
+ # spend, not spend inside the report's own window.
2697
+ #
2698
+ # `completed`'s `since`/`until` filters on ENDED — "what finished in this
2699
+ # range". An issue's legs routinely ran before that window opened (a 24h
2700
+ # window over an issue dispatched a week ago is the normal case, not the
2701
+ # edge case), so windowing the cost the same way would answer "what did
2702
+ # this issue cost me *today*" under a column an operator reads as "what did
2703
+ # finishing this issue cost me" — and would report a smaller number every
2704
+ # time the window narrowed, for an issue whose true cost never changed.
2705
+ # `usage` is where a windowed spend question belongs; it has a `window`
2706
+ # param and this report does not.
2707
+ #
2708
+ # Consequence worth stating: an unbounded `TimeWindow` still drops a leg
2709
+ # with NEITHER `dispatched_at` NOR `finished_at` (`leg_in_window` needs one
2710
+ # of the two to be in range, and `contains(None)` is False). Such a row is
2711
+ # not a session that ran — it is a row with no evidence it ever started —
2712
+ # and `usage` excludes it on the same rule.
2713
+ result = rollup(
2714
+ [dict(a) for a in assignment_rows],
2715
+ group_by="issue",
2716
+ window=TimeWindow(),
2717
+ pricing=pricing,
2718
+ )
2719
+ spend: dict[tuple[str, int], dict[str, Any]] = {}
2720
+ for key, group in result.groups.items():
2721
+ if not isinstance(key, IssueKey) or not key.repo_name:
2722
+ continue
2723
+ spend[(str(key.repo_name), int(key.issue_number))] = _usage_metrics(group)
2724
+ return spend
2725
+
2726
+
2727
+ #: What a row gets when the rollup saw no legs at all for its issue — a real
2728
+ #: zero, not a missing key. An issue can be closed with no assignment ever
2729
+ #: dispatched against it (closed by hand, or fixed as a drive-by in someone
2730
+ #: else's PR), and that row's honest answer is "0 legs, $0", not a blank cell
2731
+ #: a client would have to guess the meaning of.
2732
+ _COMPLETED_NO_LEGS: dict[str, Any] = {
2733
+ "legs": 0,
2734
+ "tokens_in": 0,
2735
+ "tokens_out": 0,
2736
+ "cost_captured": 0.0,
2737
+ "cost_est": 0.0,
2738
+ "cost_total": 0.0,
2739
+ "tokens_cache_read": 0,
2740
+ "tokens_cache_creation": 0,
2741
+ "duration_secs": 0.0,
2742
+ "open_legs": 0,
2743
+ "unknown_model_legs": 0,
2744
+ }
2745
+
2644
2746
 
2645
2747
  def fold_completed(
2646
2748
  issues: Iterable[Mapping[str, Any]],
@@ -2650,6 +2752,8 @@ def fold_completed(
2650
2752
  *,
2651
2753
  repo: str = "",
2652
2754
  generated_at: float | None = None,
2755
+ pricing: Any = None,
2756
+ extra_notes: Sequence[str] = (),
2653
2757
  ) -> ReportResult:
2654
2758
  """Fold the board's own tables into one row per issue that *finished*
2655
2759
  inside ``window``.
@@ -2658,6 +2762,12 @@ def fold_completed(
2658
2762
  above is testable without a database (same posture as
2659
2763
  :func:`fold_issue_activity`). Rows come back newest-ENDED first, which
2660
2764
  is #2405's default order; the client re-sorts by column head-click.
2765
+
2766
+ *pricing* left at ``None`` falls through to ``usage_rollup``'s built-in
2767
+ default rates, which is correct for a unit test and **not** what the
2768
+ runner does — :func:`run_completed` loads ``coordinator.yml`` and passes
2769
+ the real ``pricing:`` block, the same seam :func:`fold_usage` uses and for
2770
+ the same #1763 reason.
2661
2771
  """
2662
2772
  start, end = window
2663
2773
  generated_at = time.time() if generated_at is None else float(generated_at)
@@ -2719,6 +2829,8 @@ def fold_completed(
2719
2829
  if value is not None and value > last_finish.get(key, float("-inf")):
2720
2830
  last_finish[key] = value
2721
2831
 
2832
+ spend = _completed_spend(assignment_rows, pricing)
2833
+
2722
2834
  rows: list[dict] = []
2723
2835
  no_end_time = 0
2724
2836
  for issue in issue_rows:
@@ -2752,6 +2864,10 @@ def fold_completed(
2752
2864
  "title": str(issue.get("title") or "") or None,
2753
2865
  "started_at": first_dispatch.get(key),
2754
2866
  "ended_at": ended,
2867
+ # #2472. `**` copies the pairs into this row's own dict, so
2868
+ # the shared `_COMPLETED_NO_LEGS` constant can never end up
2869
+ # aliased by two zero-leg rows.
2870
+ **spend.get(key, _COMPLETED_NO_LEGS),
2755
2871
  }
2756
2872
  )
2757
2873
 
@@ -2760,7 +2876,7 @@ def fold_completed(
2760
2876
  # `sort_completed_rows` takes the same precaution for the same reason).
2761
2877
  rows.sort(key=lambda r: (-float(r["ended_at"]), r["repo"], r["issue"]))
2762
2878
 
2763
- notes: list[str] = []
2879
+ notes: list[str] = list(extra_notes)
2764
2880
  if no_end_time:
2765
2881
  notes.append(
2766
2882
  f"{no_end_time} completed issue(s) have no end timestamp (no merged "
@@ -2774,6 +2890,27 @@ def fold_completed(
2774
2890
  f"No issue in this board belongs to repo {repo_filter!r} — check the "
2775
2891
  "coord-local repo name (the one in coordinator.yml), not the GitHub slug."
2776
2892
  )
2893
+ # #1763's rule is "never silently priced at $0", and `cost_total` here is
2894
+ # exactly the number that would go silently short. So it IS noted — but as
2895
+ # ONE aggregate line rather than `fold_usage`'s line-per-issue: this report
2896
+ # is a time-range list that can easily carry a hundred rows, and a hundred
2897
+ # near-identical notes would bury the two above that are about the list
2898
+ # itself. The per-issue breakdown is a question for `usage`, which the note
2899
+ # names.
2900
+ unpriced = sorted(
2901
+ f"{r['repo']}#{r['issue']}" for r in rows if r.get("unknown_model_legs")
2902
+ )
2903
+ if unpriced:
2904
+ shown = ", ".join(unpriced[:5])
2905
+ more = f" (and {len(unpriced) - 5} more)" if len(unpriced) > 5 else ""
2906
+ notes.append(
2907
+ f"{len(unpriced)} issue(s) ran leg(s) on a model with no entry in "
2908
+ f"the loaded `pricing:` config — {shown}{more}. Their tokens are "
2909
+ "counted but that spend is NOT in `Total $` (never silently priced "
2910
+ "at $0), so those rows read LOW. Add a rate for the model to "
2911
+ "coordinator.yml, or run the `usage` report for the per-issue "
2912
+ "breakdown."
2913
+ )
2777
2914
 
2778
2915
  return ReportResult(
2779
2916
  report_id="completed",
@@ -2805,10 +2942,21 @@ def _default_completed_source() -> tuple[list[dict], list[dict], list[dict]]:
2805
2942
  "SELECT repo_name, number, title, state FROM issues"
2806
2943
  ).fetchall()
2807
2944
  ]
2945
+ # #2472 widens this one SELECT rather than adding a second source
2946
+ # function: the spend columns fold out of the SAME assignment rows the
2947
+ # timestamps do, so a second round trip would re-read the same table to
2948
+ # get columns this one could have carried. Everything past
2949
+ # `finished_at` is what `usage_rollup.rollup`/`leg_cost` read — token
2950
+ # counts, the captured `cost_usd`, the `model` its estimate is keyed
2951
+ # by, and `for_issue_number` for #1553's attribution. `type` is NOT
2952
+ # selected: it only feeds `usage`'s per-stage drill-down, which this
2953
+ # report does not emit.
2808
2954
  assignments = [
2809
2955
  dict(r)
2810
2956
  for r in conn.execute(
2811
- "SELECT repo_name, issue_number, dispatched_at, finished_at "
2957
+ "SELECT repo_name, issue_number, for_issue_number, "
2958
+ "dispatched_at, finished_at, input_tokens, output_tokens, "
2959
+ "cache_read_tokens, cache_creation_tokens, cost_usd, model "
2812
2960
  "FROM assignments"
2813
2961
  ).fetchall()
2814
2962
  ]
@@ -2834,9 +2982,10 @@ def run_completed(
2834
2982
  Sequence[Mapping[str, Any]],
2835
2983
  Sequence[Mapping[str, Any]],
2836
2984
  ]] | None = None,
2985
+ pricing: Any = None,
2837
2986
  ) -> ReportResult:
2838
- """Read the board and fold it. ``now``/``source`` are test seams
2839
- (mirrors :func:`run_issue_activity`); the report's own parameters are
2987
+ """Read the board and fold it. ``now``/``source``/``pricing`` are test
2988
+ seams (mirrors :func:`run_issue_activity`); the report's own parameters are
2840
2989
  ``since``/``until``/``repo`` — the same three, with the same vocabulary
2841
2990
  and the same validators, that ``issue-activity`` uses."""
2842
2991
  generated_at = time.time() if now is None else float(now)
@@ -2844,6 +2993,15 @@ def run_completed(
2844
2993
  start = end - parse_duration(since)
2845
2994
  source_fn = _default_completed_source if source is None else source
2846
2995
  issues, assignments, merge_queue = source_fn()
2996
+
2997
+ # Same seam, same reason as `run_usage`: the estimated half of `cost_total`
2998
+ # has to be priced off the fleet's OWN `pricing:` block, and a config that
2999
+ # could not be loaded says so in a note instead of silently falling back
3000
+ # (#1763).
3001
+ extra_notes: list[str] = []
3002
+ if pricing is None:
3003
+ pricing, extra_notes = _load_pricing()
3004
+
2847
3005
  return fold_completed(
2848
3006
  issues,
2849
3007
  assignments,
@@ -2851,6 +3009,8 @@ def run_completed(
2851
3009
  (start, end),
2852
3010
  repo=repo,
2853
3011
  generated_at=generated_at,
3012
+ pricing=pricing,
3013
+ extra_notes=extra_notes,
2854
3014
  )
2855
3015
 
2856
3016
 
@@ -2938,7 +3098,12 @@ COMPLETED = ReportDef(
2938
3098
  "merged (the PR closed it before the brain synced the close). ENDED is "
2939
3099
  "the merge timestamp, falling back to the last assignment to finish; "
2940
3100
  "STARTED is the first dispatch. Issues with no end timestamp at all "
2941
- "cannot be placed in a time range and are counted in a note instead."
3101
+ "cannot be placed in a time range and are counted in a note instead. "
3102
+ "Each row also carries what it cost: LEGS is how many agent sessions "
3103
+ "(dispatches and retries) ran against the issue, and the token and "
3104
+ "dollar figures are the issue's WHOLE-LIFE spend — not just the part "
3105
+ "inside this window — so narrowing the range never shrinks them. Use "
3106
+ "the `usage` report for windowed spend or the captured/estimated split."
2942
3107
  ),
2943
3108
  params=(
2944
3109
  # The same three params, the same vocabulary and the same validators
@@ -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