code-coordinator 0.5.261__tar.gz → 0.5.263__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 (872) hide show
  1. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/lifecycle.py +11 -1
  5. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/housekeeping.py +42 -10
  6. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/merge_queue.py +57 -6
  7. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/serve_app.py +234 -28
  8. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_cap_762.py +100 -0
  9. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_sync.py +45 -0
  10. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_serve.py +370 -8
  11. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_board_audit.py +5 -0
  12. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/cargo-test.yml +0 -0
  23. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/release-tui.yml +0 -0
  25. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.gitignore +0 -0
  27. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/GOAL.md +0 -0
  29. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/LICENSE +0 -0
  30. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/README.md +0 -0
  32. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/approved_work.py +0 -0
  49. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_bool_guard.py +0 -0
  53. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_schema.py +0 -0
  54. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/client.py +0 -0
  67. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/gate_a.py +0 -0
  78. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/gates.py +0 -0
  79. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/issues.py +0 -0
  80. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/pr.py +0 -0
  86. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/release.py +0 -0
  87. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/repo.py +0 -0
  88. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/report.py +0 -0
  89. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/review.py +0 -0
  90. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/scorecard.py +0 -0
  91. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/sessions.py +0 -0
  92. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/setup.py +0 -0
  93. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/status.py +0 -0
  94. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/terminal.py +0 -0
  95. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/test_gate.py +0 -0
  96. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/tui.py +0 -0
  97. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/comments.py +0 -0
  98. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/config.py +0 -0
  99. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/confirm_test.py +0 -0
  101. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/db.py +0 -0
  109. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dead_end.py +0 -0
  110. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/decomposition_chat.py +0 -0
  111. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/README.md +0 -0
  112. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-agent.service +0 -0
  113. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.service +0 -0
  114. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.sh +0 -0
  115. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.timer +0 -0
  116. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-drive-queue.service +0 -0
  117. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-drive-queue.timer +0 -0
  118. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-failure-notify.service +0 -0
  119. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-fleet-watchdog.service +0 -0
  120. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  121. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-notify.service +0 -0
  122. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-notify.timer +0 -0
  123. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-propagate.service +0 -0
  124. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-propagate.timer +0 -0
  125. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-window.service +0 -0
  126. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-window.timer +0 -0
  127. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-serve.service +0 -0
  128. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web-dist-build.service +0 -0
  129. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web-dist-build.timer +0 -0
  130. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web.service +0 -0
  131. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy_manifest.py +0 -0
  132. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy_units.py +0 -0
  133. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deps.py +0 -0
  134. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/diagnose.py +0 -0
  135. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dispatch.py +0 -0
  136. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dist_name.py +0 -0
  137. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive.py +0 -0
  138. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive_queue.py +0 -0
  139. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive_state.py +0 -0
  140. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/events.py +0 -0
  141. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/failure_class.py +0 -0
  142. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/filelock.py +0 -0
  143. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/fleet_config_health.py +0 -0
  144. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/forge_availability.py +0 -0
  145. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/freshness.py +0 -0
  146. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_a.py +0 -0
  147. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_b.py +0 -0
  148. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_snapshot.py +0 -0
  149. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gates.py +0 -0
  150. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/github_ops.py +0 -0
  151. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/github_throttle.py +0 -0
  152. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/goal.py +0 -0
  153. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/graph_health.py +0 -0
  154. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/__init__.py +0 -0
  155. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/aggregate.py +0 -0
  156. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/__init__.py +0 -0
  157. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/issues_sync_staleness.py +0 -0
  171. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/plan_usage.py +0 -0
  172. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/release_cordon.py +0 -0
  173. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/repo_state.py +0 -0
  174. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/spawned_coord.py +0 -0
  175. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/stalled_pipeline.py +0 -0
  176. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/issues_sync_status.py +0 -0
  193. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/machine_pause.py +0 -0
  195. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/models.py +0 -0
  201. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/network.py +0 -0
  202. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/predicate.py +0 -0
  210. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notify.py +0 -0
  214. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/openapi.py +0 -0
  215. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/overlap_fence.py +0 -0
  216. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/overlap_predict.py +0 -0
  217. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/parentage.py +0 -0
  218. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/parentage_github.py +0 -0
  219. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/pipeline.py +0 -0
  220. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/plan_parser.py +0 -0
  221. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/plans.py +0 -0
  222. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/platform_paths.py +0 -0
  223. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_bridge.py +0 -0
  224. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_store.py +0 -0
  225. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_sync.py +0 -0
  226. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/pr_body_lint.py +0 -0
  227. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/prereqs.py +0 -0
  228. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/progress.py +0 -0
  229. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/__init__.py +0 -0
  230. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/base.py +0 -0
  231. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/claude.py +0 -0
  232. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/claude_pty.py +0 -0
  233. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/opencode.py +0 -0
  234. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/queue_diagnose.py +0 -0
  235. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reconcile.py +0 -0
  236. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reconcile_tick.py +0 -0
  237. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/refine_chat.py +0 -0
  238. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_cordon.py +0 -0
  239. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_propagate.py +0 -0
  240. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_verify.py +0 -0
  241. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_window.py +0 -0
  242. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/repo_edit.py +0 -0
  243. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/repo_onboard.py +0 -0
  244. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reports.py +0 -0
  245. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/revalidate.py +0 -0
  246. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/review.py +0 -0
  247. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/scorecard.py +0 -0
  248. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/self_health.py +0 -0
  249. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  250. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  251. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  252. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  254. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/portal-followup/SKILL.md +0 -0
  255. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  256. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  257. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/update-issue/SKILL.md +0 -0
  258. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/smoke.py +0 -0
  259. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/spend_ceiling.py +0 -0
  260. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/split_work.py +0 -0
  261. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/sql.py +0 -0
  262. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/stage_projection.py +0 -0
  263. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/state.py +0 -0
  264. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_author.py +0 -0
  265. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_chat.py +0 -0
  266. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_orchestrator.py +0 -0
  267. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_report.py +0 -0
  268. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/tui_release.py +0 -0
  269. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage.py +0 -0
  270. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage_limits.py +0 -0
  271. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage_rollup.py +0 -0
  272. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/worker_events.py +0 -0
  273. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coordinator.example.yml +0 -0
  274. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-agent.service +0 -0
  275. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.service +0 -0
  276. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.sh +0 -0
  277. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.timer +0 -0
  278. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-drive-queue.service +0 -0
  279. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-drive-queue.timer +0 -0
  280. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-failure-notify.service +0 -0
  281. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-failure-notify.sh +0 -0
  282. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-fleet-watchdog.service +0 -0
  283. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-fleet-watchdog.timer +0 -0
  284. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-notify.service +0 -0
  285. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-notify.timer +0 -0
  286. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-propagate.service +0 -0
  287. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-propagate.timer +0 -0
  288. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-window.service +0 -0
  289. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-window.timer +0 -0
  290. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-serve.service +0 -0
  291. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.service +0 -0
  292. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.sh +0 -0
  293. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.timer +0 -0
  294. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-rollback.sh +0 -0
  295. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web.service +0 -0
  296. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/node-shim.sh +0 -0
  297. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  298. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_CI.md +0 -0
  299. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_DIST.md +0 -0
  300. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/AGENT_OPERATIONS.md +0 -0
  301. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ARCHITECTURE.md +0 -0
  302. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ARCH_SECURITY_GATES.md +0 -0
  303. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/COCKPIT.md +0 -0
  304. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CONTROL_CENTER.md +0 -0
  305. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/COST_DISCIPLINE.md +0 -0
  306. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CROSS_PLATFORM.md +0 -0
  307. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CUSTOMER_FACING_APPS.md +0 -0
  308. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CUSTOMER_PORTAL.md +0 -0
  309. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/DRIVE_QUEUE.md +0 -0
  310. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/EPHEMERAL_WORKERS.md +0 -0
  311. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/FORGE_MIGRATION.md +0 -0
  312. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/GRAPHIFY_SETUP.md +0 -0
  313. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ISSUE_GUIDANCE.md +0 -0
  314. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/MAC_MINI.md +0 -0
  315. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  316. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/NOTIFIER.md +0 -0
  317. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPENCODE_VERIFICATION.md +0 -0
  318. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPERATING_GOTCHAS.md +0 -0
  319. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPERATOR_GUIDES.md +0 -0
  320. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ORACLE_LOOP.md +0 -0
  321. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PHONE_WEBAPP.md +0 -0
  322. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PIPELINE_V2.md +0 -0
  323. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PLATFORM_EVOLUTION.md +0 -0
  324. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/SECOND_BACKEND.md +0 -0
  325. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/STORE_SERVICE.md +0 -0
  326. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  327. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/WEB_CONTROL_CENTER.md +0 -0
  328. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/WSL_WINDOWS_WORKER.md +0 -0
  329. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/README.md +0 -0
  330. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/_tokens.css +0 -0
  331. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/issue-detail.html +0 -0
  332. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/pipeline-narrow.html +0 -0
  333. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/pipeline-wide.html +0 -0
  334. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/graphify-out/.gitignore +0 -0
  335. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/install-agent.sh +0 -0
  336. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/pyproject.toml +0 -0
  337. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/audit_review_verdict_overrides.py +0 -0
  338. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  339. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/build-worker-image.sh +0 -0
  340. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/coordinator-machine.py +0 -0
  341. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/epic-down.sh +0 -0
  342. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/epic-up.sh +0 -0
  343. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/preflight.sh +0 -0
  344. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/provision-worker.sh +0 -0
  345. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  346. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  347. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/verify-github-token.sh +0 -0
  348. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/check_gh_argv_containment.py +0 -0
  349. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/codegen.py +0 -0
  350. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/coord-test-runner.sh +0 -0
  351. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/coord-venv-rollback.sh +0 -0
  352. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/drive-batch.sh +0 -0
  353. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/fleet_watchdog.py +0 -0
  354. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/gen_board_fixture.py +0 -0
  355. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/gen_mock_index.py +0 -0
  356. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/next_release_tag.py +0 -0
  357. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/run_tests_in_populated_home.sh +0 -0
  358. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/run_tests_without_gh.sh +0 -0
  359. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/smoke_437_interactive.py +0 -0
  360. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_878_review_capture.py +0 -0
  361. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_release_published.py +0 -0
  362. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_release_wheel.py +0 -0
  363. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/setup.cfg +0 -0
  364. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/SMOKE_SET.md +0 -0
  365. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/__init__.py +0 -0
  366. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  367. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/contract.md +0 -0
  368. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/manifest.yml +0 -0
  369. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  370. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  371. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  372. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  373. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/conftest.py +0 -0
  374. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/contract.md +0 -0
  375. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/manifest.yml +0 -0
  376. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  377. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  378. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/contract.md +0 -0
  379. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/manifest.yml +0 -0
  380. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  381. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  382. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  383. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  384. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  385. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  386. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  387. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  388. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  389. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  390. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/contract.md +0 -0
  391. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  392. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  393. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/manifest.yml +0 -0
  394. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  395. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/tsconfig.json +0 -0
  396. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  397. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  398. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  399. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/contract.md +0 -0
  400. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  401. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/manifest.yml +0 -0
  402. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  403. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  404. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  405. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  406. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  407. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  408. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  409. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  410. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  411. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  412. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  413. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  414. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/contract.md +0 -0
  415. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  416. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/manifest.yml +0 -0
  417. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  418. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  419. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  420. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  421. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  422. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  423. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  424. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/conftest.py +0 -0
  425. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/board-pipeline-basic.json +0 -0
  426. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  427. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  428. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  429. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  430. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/all_pass.json +0 -0
  431. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  432. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/mixed_fail.json +0 -0
  433. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  434. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  435. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/skip.json +0 -0
  436. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/truncated.json +0 -0
  437. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  438. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  439. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  440. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  441. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  442. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  443. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  444. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  445. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_acceptance.py +0 -0
  446. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_acceptance_drivers.py +0 -0
  447. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent.py +0 -0
  448. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_api_error.py +0 -0
  449. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_app.py +0 -0
  450. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_branch_base.py +0 -0
  451. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_branch_capture.py +0 -0
  452. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_config_free_1712.py +0 -0
  453. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_deploy_units_endpoint.py +0 -0
  454. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_dirty_worktree.py +0 -0
  455. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  456. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_graph_self_heal.py +0 -0
  457. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_health_h3.py +0 -0
  458. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_idle_restart.py +0 -0
  459. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_push_failure.py +0 -0
  460. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_reap.py +0 -0
  461. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_repos_and_pull.py +0 -0
  462. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_restart_services_endpoint.py +0 -0
  463. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_skills_self_heal.py +0 -0
  464. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_startup_diagnostics.py +0 -0
  465. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_update.py +0 -0
  466. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_update_bluegreen.py +0 -0
  467. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_usage_limit.py +0 -0
  468. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_zero_commit.py +0 -0
  469. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ambient_home_isolation.py +0 -0
  470. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_dependency_busy_2804.py +0 -0
  471. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_reject_plan.py +0 -0
  472. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_usage_gate.py +0 -0
  473. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approved_work_2532.py +0 -0
  474. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_assignment_already_recorded_daemon.py +0 -0
  475. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_log.py +0 -0
  476. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_outcome.py +0 -0
  477. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_query.py +0 -0
  478. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_auto_loop.py +0 -0
  479. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_auto_release_publish_2035.py +0 -0
  480. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_base_checkout_restore.py +0 -0
  481. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_block_log.py +0 -0
  482. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_fixture.py +0 -0
  483. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_read_path.py +0 -0
  484. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_schema.py +0 -0
  485. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_service.py +0 -0
  486. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_state.py +0 -0
  487. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_wire.py +0 -0
  488. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_brain.py +0 -0
  489. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_branch_model.py +0 -0
  490. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_bug_intake.py +0 -0
  491. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_build_worker_image_env_update.py +0 -0
  492. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cargo_cache.py +0 -0
  493. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_check_gh_argv_containment.py +0 -0
  494. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_acceptance_gate_1950.py +0 -0
  495. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_fix.py +0 -0
  496. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_gitlab.py +0 -0
  497. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_parity_2091.py +0 -0
  498. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_store.py +0 -0
  499. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_claim.py +0 -0
  500. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_claude_md_budget.py +0 -0
  501. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_acceptance.py +0 -0
  502. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign.py +0 -0
  503. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  504. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_interactive_remote.py +0 -0
  505. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_provider.py +0 -0
  506. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  507. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_audit.py +0 -0
  508. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_chat_continue.py +0 -0
  509. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_decide.py +0 -0
  510. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_config_provenance.py +0 -0
  511. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_forge_availability.py +0 -0
  512. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_graph.py +0 -0
  513. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_self.py +0 -0
  514. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor.py +0 -0
  515. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor_config_free_1801.py +0 -0
  516. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  517. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_drive.py +0 -0
  518. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_drive_queue.py +0 -0
  519. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_escalate.py +0 -0
  520. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_fix_headless_review.py +0 -0
  521. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_gate_a.py +0 -0
  522. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_install_drift.py +0 -0
  523. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_install_skills.py +0 -0
  524. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_comment.py +0 -0
  525. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_create_label.py +0 -0
  526. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_reopen.py +0 -0
  527. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_view_list.py +0 -0
  528. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_merge.py +0 -0
  529. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_assign.py +0 -0
  530. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_capture.py +0 -0
  531. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_chat_add_child.py +0 -0
  532. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_dispatch.py +0 -0
  533. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_gate_b.py +0 -0
  534. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_gate_c.py +0 -0
  535. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_order.py +0 -0
  536. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  537. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_ship.py +0 -0
  538. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_network.py +0 -0
  539. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_new_issue_chat.py +0 -0
  540. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_plans.py +0 -0
  541. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_portal.py +0 -0
  542. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_pr.py +0 -0
  543. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_pull_artifact.py +0 -0
  544. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_queue.py +0 -0
  545. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_reattach_sessions.py +0 -0
  546. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_refine_board.py +0 -0
  547. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_preflight.py +0 -0
  548. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_propagate.py +0 -0
  549. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_window.py +0 -0
  550. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_repo_2220.py +0 -0
  551. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  552. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_contested_tag.py +0 -0
  556. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_merge_queue.py +0 -0
  557. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_provider.py +0 -0
  558. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_review_finalizing.py +0 -0
  559. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_test_failed_tag.py +0 -0
  560. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_usage_limit.py +0 -0
  561. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_sync_comments_873.py +0 -0
  562. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_test_plan.py +0 -0
  563. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_track.py +0 -0
  564. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_tui_update.py +0 -0
  565. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_wait.py +0 -0
  566. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_client_base_install.py +0 -0
  567. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_commands_common.py +0 -0
  568. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_comments.py +0 -0
  569. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_completion_summary.py +0 -0
  570. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config.py +0 -0
  571. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_acceptance.py +0 -0
  572. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_audit.py +0 -0
  573. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_pricing.py +0 -0
  574. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  575. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_usage_gate.py +0 -0
  576. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_confirm_test.py +0 -0
  577. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_conflict_fix.py +0 -0
  578. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_conflict_fix_semantic.py +0 -0
  579. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  580. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test.py +0 -0
  581. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_baseline.py +0 -0
  582. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_populated_home.py +0 -0
  583. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_routing.py +0 -0
  584. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_toolchain.py +0 -0
  585. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_uat.py +0 -0
  586. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_web_sse_restart_live.py +0 -0
  587. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coordinator_machine.py +0 -0
  588. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cross_platform_imports.py +0 -0
  589. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dao.py +0 -0
  590. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard.py +0 -0
  591. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_fixture.py +0 -0
  592. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_terminal.py +0 -0
  593. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_terminal_live.py +0 -0
  594. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_db.py +0 -0
  595. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dead_end.py +0 -0
  596. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_decomposition_chat.py +0 -0
  597. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_db_backup.py +0 -0
  598. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_web_dist.py +0 -0
  599. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_web_rollback.py +0 -0
  600. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_drive_queue_unit.py +0 -0
  601. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_failure_notify_unit.py +0 -0
  602. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_manifest.py +0 -0
  603. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_notify_unit.py +0 -0
  604. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_units_lane.py +0 -0
  605. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_web_unit.py +0 -0
  606. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deps.py +0 -0
  607. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_diagnose.py +0 -0
  608. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dispatch.py +0 -0
  609. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dispatch_target_validation.py +0 -0
  610. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dist_name.py +0 -0
  611. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_done_housekeeping.py +0 -0
  612. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive.py +0 -0
  613. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue.py +0 -0
  614. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_blocked_rendering.py +0 -0
  615. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_launch_argv.py +0 -0
  616. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  617. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_roll_pending.py +0 -0
  618. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  619. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_state.py +0 -0
  620. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_tmux.py +0 -0
  621. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_capability_detection.py +0 -0
  622. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  623. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_image_provenance.py +0 -0
  624. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_errors.py +0 -0
  625. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_events.py +0 -0
  626. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_failure_class.py +0 -0
  627. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_filelock.py +0 -0
  628. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  629. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fix_of_force_override.py +0 -0
  630. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_config_health.py +0 -0
  631. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_health_probes.py +0 -0
  632. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_health_snapshot.py +0 -0
  633. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_watchdog.py +0 -0
  634. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_forge_availability.py +0 -0
  635. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_freshness.py +0 -0
  636. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_a.py +0 -0
  637. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_b.py +0 -0
  638. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_snapshot_staleness.py +0 -0
  639. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gates.py +0 -0
  640. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  641. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gen_mock_index.py +0 -0
  642. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_generated_rust_fixture.py +0 -0
  643. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_generated_types_fixture.py +0 -0
  644. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_github_ops.py +0 -0
  645. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_github_throttle.py +0 -0
  646. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_goal.py +0 -0
  647. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_graph_health.py +0 -0
  648. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_graph_selfheal_absent_2237.py +0 -0
  649. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_handoff.py +0 -0
  650. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_checks.py +0 -0
  651. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_cli.py +0 -0
  652. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_cli_graph.py +0 -0
  653. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_config.py +0 -0
  654. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_context.py +0 -0
  655. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_coord_web_ci_pin.py +0 -0
  656. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_deploy_lane_facts.py +0 -0
  657. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_fix.py +0 -0
  658. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_incident_regression.py +0 -0
  659. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_issues_sync_staleness.py +0 -0
  660. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_pypi.py +0 -0
  661. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_registry.py +0 -0
  662. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_release_cordon_probe.py +0 -0
  663. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_timer_active.py +0 -0
  664. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_toolchain.py +0 -0
  665. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_unit_drift.py +0 -0
  666. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_unit_enablement.py +0 -0
  667. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_hooks.py +0 -0
  668. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_human_attended_437.py +0 -0
  669. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_init.py +0 -0
  670. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_integration.py +0 -0
  671. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_briefing_echo.py +0 -0
  672. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_pane_log_2541.py +0 -0
  673. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_prefill_state.py +0 -0
  674. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_session_relaunch.py +0 -0
  675. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_test_verdict_backstop.py +0 -0
  676. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_token_attribution.py +0 -0
  677. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_worktree.py +0 -0
  678. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_issue_store_seam.py +0 -0
  679. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_issues_sync_status.py +0 -0
  680. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_liveness_auditor.py +0 -0
  681. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_liveness_notify.py +0 -0
  682. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_lock_contention_ratchet.py +0 -0
  683. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_machine_pause.py +0 -0
  684. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_merge_queue.py +0 -0
  685. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_merge_verify.py +0 -0
  686. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_chat.py +0 -0
  687. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_dispatch.py +0 -0
  688. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_gate.py +0 -0
  689. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_order.py +0 -0
  690. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_seam.py +0 -0
  691. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_mock_author.py +0 -0
  692. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_model_tiering.py +0 -0
  693. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_models.py +0 -0
  694. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_models_config_labels.py +0 -0
  695. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_needs_attention.py +0 -0
  696. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_network.py +0 -0
  697. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_new_issue_chat.py +0 -0
  698. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_next_release_tag.py +0 -0
  699. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_node_shim.py +0 -0
  700. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_baseline.py +0 -0
  701. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_cli.py +0 -0
  702. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_collect.py +0 -0
  703. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_config.py +0 -0
  704. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_drive_seam.py +0 -0
  705. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_isolation.py +0 -0
  706. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_predicate.py +0 -0
  707. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_quiet_hours.py +0 -0
  708. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_service.py +0 -0
  709. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notify.py +0 -0
  710. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notify_drain.py +0 -0
  711. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_openapi.py +0 -0
  712. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_operational_defaults.py +0 -0
  713. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_overlap_fence.py +0 -0
  714. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_overlap_predict.py +0 -0
  715. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_packaged_deploy_units.py +0 -0
  716. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_parentage.py +0 -0
  717. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_paste_landed.py +0 -0
  718. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  719. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_pipeline.py +0 -0
  720. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_approve_plan_command.py +0 -0
  721. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_pr_command.py +0 -0
  722. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_review_command.py +0 -0
  723. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_only.py +0 -0
  724. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_parser.py +0 -0
  725. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_platform_paths.py +0 -0
  726. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_bridge.py +0 -0
  727. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_config.py +0 -0
  728. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_store.py +0 -0
  729. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_pr_body_lint.py +0 -0
  730. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_prereqs.py +0 -0
  731. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_production_db_guard.py +0 -0
  732. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_progress.py +0 -0
  733. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_provider_seam.py +0 -0
  734. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers.py +0 -0
  735. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers_config_labels.py +0 -0
  736. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers_pty.py +0 -0
  737. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_quiet_hours.py +0 -0
  738. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_quiet_hours_store_2146.py +0 -0
  739. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reap_merged_sessions.py +0 -0
  740. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reap_stale_interactive_tick.py +0 -0
  741. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile.py +0 -0
  742. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_branch.py +0 -0
  743. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_completions.py +0 -0
  744. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  745. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_merges.py +0 -0
  746. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_no_agent_record.py +0 -0
  747. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_tick.py +0 -0
  748. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_usage_limit_done.py +0 -0
  749. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_refine_chat.py +0 -0
  750. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_2101.py +0 -0
  751. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  752. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_deadlock_2240.py +0 -0
  753. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_stuck_2490.py +0 -0
  754. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_propagate.py +0 -0
  755. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_propagate_threshold.py +0 -0
  756. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_roll_between_legs_2854.py +0 -0
  757. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_roll_window_handoff.py +0 -0
  758. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_unified_1242.py +0 -0
  759. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_verify.py +0 -0
  760. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_window.py +0 -0
  761. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_remote_auto_prune.py +0 -0
  762. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_remote_interactive_reaper.py +0 -0
  763. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_add.py +0 -0
  764. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_edit_2220.py +0 -0
  765. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_graph_fleet_2237.py +0 -0
  766. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_onboard_2220.py +0 -0
  767. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_report_result_push.py +0 -0
  768. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reports.py +0 -0
  769. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry.py +0 -0
  770. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry_advisory_1606.py +0 -0
  771. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry_type_1636.py +0 -0
  772. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_revalidate.py +0 -0
  773. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review.py +0 -0
  774. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_end_review_without_verdict.py +0 -0
  775. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_parse_failure_diagnostic.py +0 -0
  776. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_reaffirm.py +0 -0
  777. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_state.py +0 -0
  778. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_backstop.py +0 -0
  779. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_override_audit.py +0 -0
  780. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_relay.py +0 -0
  781. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_zero_commits.py +0 -0
  782. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_scoped_review_wiring.py +0 -0
  783. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_scorecard.py +0 -0
  784. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_self_health.py +0 -0
  785. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_serve_app_board_trim.py +0 -0
  786. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_session.py +0 -0
  787. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_slice_issue_attribution.py +0 -0
  788. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke.py +0 -0
  789. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke_live_checkout_restore.py +0 -0
  790. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke_workflow.py +0 -0
  791. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_spend_ceiling.py +0 -0
  792. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_spend_ceiling_coordinator.py +0 -0
  793. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_split.py +0 -0
  794. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_split_work.py +0 -0
  795. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_sql_dialect.py +0 -0
  796. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stage_projection.py +0 -0
  797. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stalled_pipeline.py +0 -0
  798. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_state.py +0 -0
  799. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_state_review_findings_daemon.py +0 -0
  800. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_status_fleet_footer.py +0 -0
  801. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stop_1567.py +0 -0
  802. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_store_contract.py +0 -0
  803. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stuck.py +0 -0
  804. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  805. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_terminal_command.py +0 -0
  806. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_author.py +0 -0
  807. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_chat.py +0 -0
  808. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_orchestrator.py +0 -0
  809. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_report.py +0 -0
  810. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_verdict_parsing.py +0 -0
  811. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_verdict_transcript_floor.py +0 -0
  812. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_text_io_encoding_audit.py +0 -0
  813. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_config_load_1080.py +0 -0
  814. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_daemon_routing_906.py +0 -0
  815. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_tmux_host.py +0 -0
  816. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_tmux_session.py +0 -0
  817. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_transcript_floor.py +0 -0
  818. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage.py +0 -0
  819. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage_limits.py +0 -0
  820. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage_rollup.py +0 -0
  821. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_venv_live_install_2121.py +0 -0
  822. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_version_single_source.py +0 -0
  823. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_watch.py +0 -0
  824. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  825. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_env_venv_isolation.py +0 -0
  826. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_events.py +0 -0
  827. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_image_pin_sync.py +0 -0
  828. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_safety.py +0 -0
  829. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_test_scoping.py +0 -0
  830. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worktree.py +0 -0
  831. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  832. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/Cargo.lock +0 -0
  833. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/Cargo.toml +0 -0
  834. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/cargo-config-local-quadraui.toml.example +0 -0
  835. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/approved.rs +0 -0
  836. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/audit.rs +0 -0
  837. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/chat.rs +0 -0
  838. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/data.rs +0 -0
  839. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/dialogs.rs +0 -0
  840. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/doc_tabs.rs +0 -0
  841. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/drive.rs +0 -0
  842. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/drive_queue.rs +0 -0
  843. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/escalation.rs +0 -0
  844. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/events.rs +0 -0
  845. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fixtures.rs +0 -0
  846. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_health.rs +0 -0
  847. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_sessions.rs +0 -0
  848. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_terminals.rs +0 -0
  849. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/format.rs +0 -0
  850. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/milestone_dag.rs +0 -0
  851. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/mod.rs +0 -0
  852. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/msv.rs +0 -0
  853. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/pipeline.rs +0 -0
  854. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/plans.rs +0 -0
  855. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/render.rs +0 -0
  856. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/reports.rs +0 -0
  857. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/sessions.rs +0 -0
  858. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/settings_ui.rs +0 -0
  859. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/sidebar.rs +0 -0
  860. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/terminal.rs +0 -0
  861. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/tests.rs +0 -0
  862. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/types/generated.rs +0 -0
  863. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/types.rs +0 -0
  864. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/workspace.rs +0 -0
  865. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/bin/gtk.rs +0 -0
  866. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/commands.rs +0 -0
  867. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/lib.rs +0 -0
  868. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/main.rs +0 -0
  869. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/settings.rs +0 -0
  870. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/tests/acceptance.rs +0 -0
  871. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/tests/cli.rs +0 -0
  872. {code_coordinator-0.5.261 → code_coordinator-0.5.263}/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.261
3
+ Version: 0.5.263
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.261
3
+ Version: 0.5.263
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.261",
2
+ "tag": "0.5.263",
3
3
  "distance": 0,
4
- "node": "gdf4e499710b63d60b2e356a67c40269d877fa1a9",
4
+ "node": "g48c97e278762fe857dec843b91373c0a1ce790b2",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -565,7 +565,17 @@ def serve(config_path: Path, bind_host: str, bind_port: int, token: str | None)
565
565
  from coord.dao import SqliteStore
566
566
  from coord.db import DB_PATH
567
567
  from coord.serve_app import build_app as build_serve_app
568
- from coord.serve_app import resolve_serve_token
568
+ from coord.serve_app import configure_daemon_logging, resolve_serve_token
569
+
570
+ # #2862: turn the daemon's own logging on BEFORE anything else runs.
571
+ # Without this the root logger has no handler and sits at WARNING, and
572
+ # `uvicorn.run(log_level="info")` below does not change that (it only
573
+ # configures the `uvicorn*` loggers) — so every `log.info(...)` in
574
+ # `serve_app._tick_loop`, including the customer-portal bridge's per-pass
575
+ # summary, was discarded before it was formatted. That is what made "Step
576
+ # 3d is quiet" unfalsifiable from the journal in #2824 and again in #2862.
577
+ # Level via $COORD_LOG_LEVEL (default INFO).
578
+ configure_daemon_logging()
569
579
 
570
580
  # #2824: `allow_thin_client=False` — `coord serve` IS the daemon every
571
581
  # thin client's `_load_config()` proxies to; it must always load the
@@ -21,6 +21,18 @@ Two guarantees make the sweep safe:
21
21
  The sweep runs automatically on a low-cadence daemon tick and on demand via
22
22
  ``coord housekeeping`` (which routes through the daemon — the canonical DB lives
23
23
  there).
24
+
25
+ #1107 Part 3: the same sweep also archives ``merge_queue`` rows in the
26
+ ``MERGED`` terminal state once they're older than the retention window, into
27
+ ``merge_queue_archive`` — mirroring the move-not-delete pattern above.
28
+ ``merge_queue`` has no natural "close" event of its own (unlike assignments,
29
+ which age out via ``TERMINAL_STATUSES``), so without this a MERGED row lives
30
+ forever: 192 such rows had accumulated by 2026-07-12 and 61 more by
31
+ 2026-07-30, both requiring a manual one-off ``DELETE``/``coord merge --drop``
32
+ declog. ``coord.merge_queue.merged_issue_keys()`` unions the live table with
33
+ the archive so the "already merged, don't re-enqueue" dedup in
34
+ ``enqueue_approved_work``/``staging_items`` keeps working after a row ages
35
+ out.
24
36
  """
25
37
 
26
38
  from __future__ import annotations
@@ -48,6 +60,9 @@ _ASSIGNMENTS = "assignments"
48
60
  _ASSIGNMENTS_ARCHIVE = "assignments_archive"
49
61
  _NOTIFICATIONS = "notifications"
50
62
  _NOTIFICATIONS_ARCHIVE = "notifications_archive"
63
+ _MERGE_QUEUE = "merge_queue"
64
+ _MERGE_QUEUE_ARCHIVE = "merge_queue_archive"
65
+ _MERGE_QUEUE_MERGED_STATE = "merged"
51
66
  _BATCH = 400 # keep IN(...) clauses well under SQLite's 999-variable limit
52
67
 
53
68
 
@@ -124,20 +139,26 @@ def _move_rows(
124
139
 
125
140
 
126
141
  def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
127
- """Archive stale terminal assignments + their notifications.
142
+ """Archive stale terminal assignments + their notifications + merged
143
+ merge_queue entries.
128
144
 
129
145
  Returns ``{"archived_assignments": N, "archived_notifications": M,
130
- "dry_run": bool, "retention_days": D}``. ``archived_*`` are the counts that
131
- were (or, for ``dry_run``, would be) moved. A no-op returns zeros.
146
+ "archived_merge_queue": K, "dry_run": bool, "retention_days": D}``.
147
+ ``archived_*`` are the counts that were (or, for ``dry_run``, would be)
148
+ moved. A no-op returns zeros.
132
149
 
133
150
  Conservative by construction: nothing active, recent (within the archive
134
151
  window), queued-for-merge, latest-of-an-open-issue, or review-linked to any
135
- such row is ever moved.
152
+ such row is ever moved. Merge queue entries are archived only once they
153
+ are in the terminal ``MERGED`` state (#1107 Part 3) — non-terminal /
154
+ conflicted entries are left for ``prune_stale_queue_entries`` or manual
155
+ ``coord merge --drop``.
136
156
  """
137
157
  cutoff = _archive_cutoff(now)
138
158
  result = {
139
159
  "archived_assignments": 0,
140
160
  "archived_notifications": 0,
161
+ "archived_merge_queue": 0,
141
162
  "dry_run": dry_run,
142
163
  "retention_days": _archive_retention_days(),
143
164
  }
@@ -151,13 +172,19 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
151
172
  conn, f"SELECT {_KEEP_INDEX_COLUMNS} FROM {_ASSIGNMENTS}" # noqa: S608
152
173
  ).fetchall()
153
174
  ]
154
- mq_ids = {
175
+ mq_rows = sql.execute(
176
+ conn,
177
+ "SELECT assignment_id, state, last_attempt, enqueued_at " # noqa: S608
178
+ f"FROM {_MERGE_QUEUE}",
179
+ ).fetchall()
180
+ mq_ids = {r["assignment_id"] for r in mq_rows if r["assignment_id"]}
181
+ mq_merged_ids = [
155
182
  r["assignment_id"]
156
- for r in sql.execute(
157
- conn, f"SELECT assignment_id FROM merge_queue" # noqa: S608
158
- ).fetchall()
183
+ for r in mq_rows
159
184
  if r["assignment_id"]
160
- }
185
+ and (r["state"] or "").lower() == _MERGE_QUEUE_MERGED_STATE
186
+ and (r["last_attempt"] or r["enqueued_at"] or 0) < cutoff
187
+ ]
161
188
  open_keys = {
162
189
  (r["repo_name"], r["number"])
163
190
  for r in sql.execute(
@@ -194,7 +221,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
194
221
 
195
222
  result["archived_assignments"] = len(candidates)
196
223
  result["archived_notifications"] = len(notif_ids)
197
- if dry_run or (not candidates and not notif_ids):
224
+ result["archived_merge_queue"] = len(mq_merged_ids)
225
+ if dry_run or (not candidates and not notif_ids and not mq_merged_ids):
198
226
  return result
199
227
 
200
228
  with conn:
@@ -206,4 +234,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
206
234
  _move_rows(
207
235
  conn, _ASSIGNMENTS, _ASSIGNMENTS_ARCHIVE, "assignment_id", candidates
208
236
  )
237
+ if mq_merged_ids:
238
+ _move_rows(
239
+ conn, _MERGE_QUEUE, _MERGE_QUEUE_ARCHIVE, "assignment_id", mq_merged_ids
240
+ )
209
241
  return result
@@ -12,6 +12,7 @@ from __future__ import annotations
12
12
  import inspect
13
13
  import json
14
14
  import logging
15
+ import sqlite3
15
16
  import time
16
17
  from dataclasses import dataclass, field
17
18
  from datetime import datetime, timezone
@@ -3753,6 +3754,58 @@ def save_queue(items: list[QueuedMerge]) -> None:
3753
3754
  retry_on_locked(_write)
3754
3755
 
3755
3756
 
3757
+ # ── Merged-history lookups (#1107 Part 3) ───────────────────────────────────
3758
+ #
3759
+ # `housekeeping.sweep()` archives MERGED merge_queue rows older than the
3760
+ # archive retention window into `merge_queue_archive` (same move-not-delete
3761
+ # pattern as `assignments`/`notifications`) so the live table stays bounded
3762
+ # instead of growing forever. `enqueue_approved_work()` and `staging_items()`
3763
+ # both dedup on "(repo, issue) already merged" to avoid re-surfacing an issue
3764
+ # whose prior work attempt already shipped — once the winning entry ages out
3765
+ # of the live table, that check must still see it, so it consults the
3766
+ # archive too.
3767
+
3768
+ def _archived_merged_issue_keys(conn: sqlite3.Connection) -> set[tuple[str, int]]:
3769
+ """(repo_name, issue_number) pairs recorded MERGED in the archive.
3770
+
3771
+ `merge_queue_archive` only exists once a housekeeping sweep has archived
3772
+ at least one row (or archiving is disabled entirely), so this is
3773
+ defensive against the table being absent.
3774
+ """
3775
+ try:
3776
+ rows = sql.execute(
3777
+ conn,
3778
+ "SELECT repo_name, issue_number FROM merge_queue_archive WHERE state = ?",
3779
+ (MERGED,),
3780
+ ).fetchall()
3781
+ except sql.driver_errors(): # #2784: not just sqlite3.OperationalError
3782
+ # "no such table" surfaces as a *different* driver-named exception
3783
+ # per backend (sqlite3.OperationalError vs psycopg.errors.
3784
+ # UndefinedTable), so this must go through the dialect seam or the
3785
+ # not-yet-archived case becomes an uncaught crash on Postgres.
3786
+ return set()
3787
+ return {(r["repo_name"], r["issue_number"]) for r in rows}
3788
+
3789
+
3790
+ def merged_issue_keys() -> set[tuple[str, int]]:
3791
+ """All ``(repo_name, issue_number)`` pairs ever recorded MERGED.
3792
+
3793
+ Unions the live ``merge_queue`` table with ``merge_queue_archive`` so
3794
+ callers get a correct answer regardless of whether the winning entry has
3795
+ since been archived by ``housekeeping.sweep()``.
3796
+ """
3797
+ conn = get_connection()
3798
+ live = {
3799
+ (r["repo_name"], r["issue_number"])
3800
+ for r in sql.execute(
3801
+ conn,
3802
+ "SELECT repo_name, issue_number FROM merge_queue WHERE state = ?",
3803
+ (MERGED,),
3804
+ ).fetchall()
3805
+ }
3806
+ return live | _archived_merged_issue_keys(conn)
3807
+
3808
+
3756
3809
  # ── Enqueue ──────────────────────────────────────────────────────────────
3757
3810
 
3758
3811
  def enqueue(
@@ -5403,12 +5456,10 @@ def staging_items(board, config, gh_ops: "GhOps | None" = None) -> list[StagingI
5403
5456
  queued_branches: set[str] = {x.branch for x in existing_queue if x.branch}
5404
5457
 
5405
5458
  # Fast-lookup: (repo_name, issue_number) pairs already MERGED so we skip
5406
- # issues whose prior attempt was already shipped.
5407
- already_merged: set[tuple[str, int]] = {
5408
- (x.repo_name, x.issue_number)
5409
- for x in existing_queue
5410
- if x.state == MERGED
5411
- }
5459
+ # issues whose prior attempt was already shipped. Consults the archive
5460
+ # too (#1107 Part 3) since the winning entry may have aged out of the
5461
+ # live table by the time a later duplicate work item shows up here.
5462
+ already_merged = merged_issue_keys()
5412
5463
 
5413
5464
  result: list[StagingItem] = []
5414
5465
  completed = list(getattr(board, "completed", []) or [])
@@ -60,6 +60,7 @@ from typing import TYPE_CHECKING
60
60
 
61
61
  if TYPE_CHECKING:
62
62
  import asyncio
63
+ import logging
63
64
 
64
65
  from starlette.applications import Starlette
65
66
  from starlette.middleware import Middleware
@@ -85,6 +86,84 @@ SERVE_PORT = 7435
85
86
  SERVE_TOKEN_ENV = "COORD_SERVE_TOKEN"
86
87
  SERVE_TOKEN_FILE = Path.home() / ".coord" / "serve_token"
87
88
 
89
+ # #2862: the daemon's own logging configuration. See
90
+ # ``configure_daemon_logging`` for why this exists at all.
91
+ DAEMON_LOG_LEVEL_ENV = "COORD_LOG_LEVEL"
92
+ DEFAULT_DAEMON_LOG_LEVEL = "INFO"
93
+ #: ``logging.Handler.name`` of the handler this module installs, so repeated
94
+ #: calls update it in place instead of stacking duplicates onto the logger.
95
+ DAEMON_LOG_HANDLER_NAME = "coord-daemon"
96
+ #: The logger tree the handler is attached to — every ``coord.*`` logger in
97
+ #: this package (``coord.serve``, ``coord.review``, ``coord.notify``, …).
98
+ DAEMON_LOG_LOGGER = "coord"
99
+
100
+
101
+ def configure_daemon_logging(level: str | None = None) -> "logging.Logger":
102
+ """Make ``coord.*`` log records actually reach the journal (#2862).
103
+
104
+ **This repo configures logging nowhere else, and that is a bug in exactly
105
+ one place: the long-lived daemons.** For a short-lived CLI the default is
106
+ fine — Python's root logger sits at ``WARNING`` with no handler attached,
107
+ so ``log.warning`` reaches :data:`logging.lastResort` (a bare stderr
108
+ ``StreamHandler``) and ``log.info`` is dropped before it is even
109
+ formatted, because ``Logger.isEnabledFor(INFO)`` is ``False``.
110
+
111
+ ``coord serve`` inherits that default, and ``uvicorn.run(...,
112
+ log_level="info")`` does **not** fix it: uvicorn's ``LOGGING_CONFIG``
113
+ configures only the ``uvicorn`` / ``uvicorn.error`` / ``uvicorn.access``
114
+ loggers and leaves the root logger handler-less. The consequence is the
115
+ whole of #2862: every ``log.info`` in ``_tick_loop`` — the passive
116
+ reconcile, the notify drain, auto-drain, milestone-gate and, the one that
117
+ cost two debugging rounds, **Step 3d's portal-sync summary** — was a
118
+ silent no-op on the real daemon. "Zero portal-related lines in the
119
+ journal" was therefore never evidence that the bridge was quiet; it was
120
+ guaranteed by construction whether the bridge ran or not.
121
+
122
+ Called from ``coord serve``'s entry point (``coord.commands.lifecycle``)
123
+ **before** ``uvicorn.run``. uvicorn's own ``dictConfig`` sets
124
+ ``disable_existing_loggers: False``, so the handler installed here
125
+ survives that call untouched.
126
+
127
+ *level* defaults to ``$COORD_LOG_LEVEL`` and then to ``INFO``; an
128
+ unrecognised value degrades to ``INFO`` rather than raising (a typo in a
129
+ systemd ``EnvironmentFile`` must not stop the daemon from booting).
130
+
131
+ ``propagate`` is deliberately left at its default ``True``: the root
132
+ logger has no handlers under uvicorn, and :meth:`logging.Logger.callHandlers`
133
+ only falls back to ``lastResort`` when it found *no* handler anywhere in
134
+ the chain — so records are emitted exactly once, while pytest's ``caplog``
135
+ (which captures at the root) still sees them.
136
+
137
+ Idempotent: repeated calls re-level the existing handler instead of
138
+ stacking a second copy, so a test (or a future second entry point) can
139
+ call it freely. Returns the configured logger.
140
+ """
141
+ import logging # noqa: PLC0415
142
+
143
+ raw = level or os.environ.get(DAEMON_LOG_LEVEL_ENV) or DEFAULT_DAEMON_LOG_LEVEL
144
+ resolved = logging.getLevelName(str(raw).strip().upper())
145
+ if not isinstance(resolved, int):
146
+ # `getLevelName` returns the string "Level FOO" for an unknown name.
147
+ resolved = logging.INFO
148
+
149
+ logger = logging.getLogger(DAEMON_LOG_LOGGER)
150
+ logger.setLevel(resolved)
151
+ for existing in logger.handlers:
152
+ if getattr(existing, "name", None) == DAEMON_LOG_HANDLER_NAME:
153
+ existing.setLevel(resolved)
154
+ return logger
155
+
156
+ handler = logging.StreamHandler(sys.stderr)
157
+ handler.name = DAEMON_LOG_HANDLER_NAME
158
+ handler.setLevel(resolved)
159
+ # No timestamp: journald stamps every line itself, and a second one only
160
+ # makes `journalctl -u coord-serve | grep portal` noisier. The logger
161
+ # name IS the grep handle — `coord.serve`, `coord.portal_sync`, … — which
162
+ # `lastResort` (message only, no name, no level) never gave us.
163
+ handler.setFormatter(logging.Formatter("%(levelname)s %(name)s: %(message)s"))
164
+ logger.addHandler(handler)
165
+ return logger
166
+
88
167
 
89
168
  def resolve_serve_token(flag_token: str | None = None) -> str | None:
90
169
  """Resolve the daemon's bearer token: flag > ``COORD_SERVE_TOKEN`` > file.
@@ -598,7 +677,8 @@ def _audit_housekeeping_sweep(swept: dict) -> None:
598
677
  summary=(
599
678
  f"housekeeping: archived {swept.get('archived_assignments', 0)} "
600
679
  f"assignment(s), {swept.get('archived_notifications', 0)} "
601
- "notification(s)"
680
+ f"notification(s), {swept.get('archived_merge_queue', 0)} "
681
+ "merge_queue entry(ies)"
602
682
  ),
603
683
  details=swept,
604
684
  )
@@ -7804,6 +7884,11 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
7804
7884
  # portal's queue, and the heartbeat the portal uses to decide whether
7805
7885
  # to trust the status it is showing is stale by exactly the downtime.
7806
7886
  last_portal_sync = 0.0
7887
+ # #2862: the last (enabled, interval-positive) gate state Step 3d
7888
+ # logged, so a *change* — including the very first evaluation, from
7889
+ # ``None`` — is announced exactly once instead of either never (a
7890
+ # `False` boolean gate is silent by design) or on every 30 s tick.
7891
+ last_portal_gate_state: tuple[bool, bool] | None = None
7807
7892
 
7808
7893
  # #1220: fleet-wide orphaned-worktree sweep on its own slow cadence
7809
7894
  # (default hourly; 0 disables). Separate timer from housekeeping/
@@ -7973,6 +8058,7 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
7973
8058
  async def _tick_loop() -> None:
7974
8059
  nonlocal last_housekeeping, last_merge_reconcile, last_worktree_clean, last_wal_checkpoint
7975
8060
  nonlocal last_notify_drain, last_notifier, last_portal_sync
8061
+ nonlocal last_portal_gate_state
7976
8062
  from coord.audit import ( # noqa: PLC0415
7977
8063
  flush_lock_contention_summary as _flush_audit_lock_contention_summary,
7978
8064
  )
@@ -8315,29 +8401,92 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
8315
8401
  # `config` actually *is* (`_config_mtime`/`config.path` at the
8316
8402
  # top of `_tick_loop`, and how the daemon was launched) before
8317
8403
  # re-suspecting this expression.
8404
+ #
8405
+ # #2862 — the SECOND time this went quiet, with #2824's root
8406
+ # cause ruled out (no `~/.coord/client.toml` on the daemon
8407
+ # host, the right `--config` on argv, `portal.enabled: true`
8408
+ # in that exact file). The check the note above asks for came
8409
+ # back clean, and the actual answer was that the *question was
8410
+ # unanswerable from the journal*: `coord serve` never
8411
+ # configures logging, and `uvicorn.run(log_level="info")`
8412
+ # configures only the `uvicorn*` loggers — so the root logger
8413
+ # stayed handler-less at WARNING and `log.info(...)` below was
8414
+ # dropped before formatting, on every pass, forever. "Zero
8415
+ # portal lines in the journal" was therefore not evidence of a
8416
+ # quiet bridge; it was true whether Step 3d ran or not. Fixed
8417
+ # at the source by `configure_daemon_logging()` (top of this
8418
+ # module, called from `coord serve`'s entry point). Two
8419
+ # consequences are handled right here:
8420
+ #
8421
+ # 1. The gate's *state* is now announced on change (below),
8422
+ # so "Step 3d is not running, and here is which half of
8423
+ # the guard said no" is greppable instead of inferred
8424
+ # from a frozen DB column three layers down. A `False`
8425
+ # boolean gate is silent by design — that is the shape of
8426
+ # a boolean, so the fix is to log the boolean, not to
8427
+ # keep re-reading the expression.
8428
+ # 2. Every pass now logs exactly one line, and a pass that
8429
+ # failed logs it at WARNING. The old `elif not
8430
+ # portal_result.heartbeat_ok: log.warning(...)` could
8431
+ # never fire for the case it was written for: a heartbeat
8432
+ # that *raises* also appends to `SyncResult.errors` (see
8433
+ # `coord.portal_sync.sync_tick`), so the `if
8434
+ # ... or portal_result.errors` branch above it always won
8435
+ # and downgraded the report to the INFO level that was
8436
+ # being discarded. A failed heartbeat is the single most
8437
+ # important thing this step can say — the portal is
8438
+ # showing a status nothing is refreshing — and it was
8439
+ # structurally unable to say it.
8318
8440
  try:
8319
- portal_due = (
8320
- portal_sync_interval > 0
8321
- and config.portal.enabled
8322
- and _time.monotonic() - last_portal_sync
8323
- >= portal_sync_interval
8324
- )
8441
+ portal_enabled = bool(config.portal.enabled)
8325
8442
  except Exception: # noqa: BLE001
8326
- portal_due = False
8443
+ portal_enabled = False
8327
8444
  log.warning("portal sync guard failed", exc_info=True)
8445
+ portal_gate_state = (portal_enabled, portal_sync_interval > 0)
8446
+ if portal_gate_state != last_portal_gate_state:
8447
+ last_portal_gate_state = portal_gate_state
8448
+ if not portal_enabled:
8449
+ log.warning(
8450
+ "portal sync: Step 3d DISABLED — portal.enabled is "
8451
+ "false in the config this daemon is running on "
8452
+ "(%s); the customer-portal bridge will not run",
8453
+ config.path,
8454
+ )
8455
+ elif portal_sync_interval <= 0:
8456
+ log.warning(
8457
+ "portal sync: Step 3d DISABLED — "
8458
+ "COORD_PORTAL_SYNC_INTERVAL=%s; the "
8459
+ "customer-portal bridge will not run",
8460
+ portal_sync_interval,
8461
+ )
8462
+ else:
8463
+ log.info(
8464
+ "portal sync: Step 3d ENABLED — every %.0fs "
8465
+ "(config=%s)",
8466
+ portal_sync_interval,
8467
+ config.path,
8468
+ )
8469
+ portal_due = (
8470
+ portal_gate_state[0]
8471
+ and portal_gate_state[1]
8472
+ and _time.monotonic() - last_portal_sync >= portal_sync_interval
8473
+ )
8328
8474
  if portal_due:
8329
8475
  last_portal_sync = _time.monotonic()
8330
8476
  try:
8331
8477
  portal_result = await run_in_threadpool(
8332
8478
  _portal_sync_tick, config
8333
8479
  )
8334
- if portal_result.moved or portal_result.errors:
8335
- log.info("%s", portal_result.summary())
8336
- elif not portal_result.heartbeat_ok:
8337
- # A quiet pass that could not even heartbeat is the
8338
- # one thing worth saying out loud: the portal is
8339
- # now showing a status nothing is refreshing.
8480
+ # One line per pass, unconditionally (#2862): a
8481
+ # heartbeat that lands and moves nothing is the
8482
+ # bridge's healthy steady state, and it is exactly
8483
+ # the state whose absence took two issues to notice.
8484
+ # `summary()` already opens with "portal sync: " — do
8485
+ # not prefix it again.
8486
+ if portal_result.errors or not portal_result.heartbeat_ok:
8340
8487
  log.warning("%s", portal_result.summary())
8488
+ else:
8489
+ log.info("%s", portal_result.summary())
8341
8490
  except Exception: # noqa: BLE001
8342
8491
  log.warning("portal sync tick failed", exc_info=True)
8343
8492
  # Step 4: #762 archival sweep on a slow cadence (default hourly).
@@ -8352,14 +8501,17 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
8352
8501
 
8353
8502
  os.environ["COORD_HOUSEKEEPING_ON_DAEMON"] = "1"
8354
8503
  swept = await run_in_threadpool(_hk.sweep)
8355
- if swept.get("archived_assignments") or swept.get(
8356
- "archived_notifications"
8504
+ if (
8505
+ swept.get("archived_assignments")
8506
+ or swept.get("archived_notifications")
8507
+ or swept.get("archived_merge_queue")
8357
8508
  ):
8358
8509
  log.info(
8359
8510
  "housekeeping: archived %d assignment(s), "
8360
- "%d notification(s)",
8511
+ "%d notification(s), %d merge_queue entry(ies)",
8361
8512
  swept["archived_assignments"],
8362
8513
  swept["archived_notifications"],
8514
+ swept.get("archived_merge_queue", 0),
8363
8515
  )
8364
8516
  _audit_housekeeping_sweep(swept)
8365
8517
  except Exception: # noqa: BLE001
@@ -8494,30 +8646,84 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
8494
8646
  except Exception: # noqa: BLE001
8495
8647
  log.warning("wal-checkpoint tick failed", exc_info=True)
8496
8648
 
8649
+ def _watch(task, name: str): # noqa: ANN001,ANN202
8650
+ """Say so — loudly — if a background loop ever stops (#2862).
8651
+
8652
+ These are bare ``asyncio.create_task`` loops with no supervisor:
8653
+ if one raises out of its ``while True``, its entire cadence stops
8654
+ for the rest of the process's life and nothing says a word.
8655
+ ``asyncio``'s own "Task exception was never retrieved" warning
8656
+ only fires when the task object is garbage-collected, and these
8657
+ are held alive by ``_ctx``'s frame until shutdown — so in
8658
+ practice the traceback surfaces at process exit, if ever.
8659
+
8660
+ #2862 listed "the tick loop itself stalled" as suspect 3, to be
8661
+ "ruled out first" and filed separately if confirmed, and there
8662
+ was no way to do either from the journal. Now there is: a dead
8663
+ loop is one ERROR line naming itself.
8664
+
8665
+ Returns *task* so call sites stay one expression.
8666
+ """
8667
+ if task is None:
8668
+ return None
8669
+
8670
+ def _done(t) -> None: # noqa: ANN001
8671
+ if t.cancelled():
8672
+ return # normal shutdown — `_ctx`'s finally cancels these
8673
+ exc = t.exception()
8674
+ log.error(
8675
+ "daemon loop %r STOPPED (%s) — its periodic work will not "
8676
+ "run again until `coord serve` is restarted",
8677
+ name,
8678
+ "raised" if exc is not None else "returned unexpectedly",
8679
+ exc_info=exc,
8680
+ )
8681
+
8682
+ task.add_done_callback(_done)
8683
+ return task
8684
+
8497
8685
  @contextlib.asynccontextmanager
8498
8686
  async def _ctx(_a): # noqa: ANN202
8499
- task = (
8500
- asyncio.create_task(_tick_loop()) if interval > 0 else None
8501
- )
8502
- gate_task = (
8687
+ # #2862: name the config this daemon is actually running on, once,
8688
+ # at startup. Step 3d's debugging note asks whoever hits the next
8689
+ # "the bridge is quiet" to "check what `config` actually *is* ...
8690
+ # and how the daemon was launched" — this is that check, answered
8691
+ # in the journal instead of by reading /proc.
8692
+ log.info(
8693
+ "tick loop starting: config=%s portal.enabled=%s "
8694
+ "reconcile=%.0fs portal_sync=%.0fs",
8695
+ config.path,
8696
+ getattr(getattr(config, "portal", None), "enabled", None),
8697
+ interval,
8698
+ portal_sync_interval,
8699
+ )
8700
+ task = _watch(
8701
+ asyncio.create_task(_tick_loop()) if interval > 0 else None,
8702
+ "tick",
8703
+ )
8704
+ gate_task = _watch(
8503
8705
  asyncio.create_task(_gate_refresh_loop())
8504
8706
  if interval > 0 and gate_refresh_interval > 0
8505
- else None
8707
+ else None,
8708
+ "gate-refresh",
8506
8709
  )
8507
- health_task = (
8710
+ health_task = _watch(
8508
8711
  asyncio.create_task(_health_refresh_loop())
8509
8712
  if interval > 0 and health_poll_interval > 0
8510
- else None
8713
+ else None,
8714
+ "health-refresh",
8511
8715
  )
8512
- phantom_heal_task = (
8716
+ phantom_heal_task = _watch(
8513
8717
  asyncio.create_task(_phantom_heal_loop())
8514
8718
  if interval > 0 and phantom_heal_interval > 0
8515
- else None
8719
+ else None,
8720
+ "phantom-heal",
8516
8721
  )
8517
- auto_revalidate_task = (
8722
+ auto_revalidate_task = _watch(
8518
8723
  asyncio.create_task(_auto_revalidate_loop())
8519
8724
  if interval > 0 and auto_revalidate_interval > 0
8520
- else None
8725
+ else None,
8726
+ "auto-revalidate",
8521
8727
  )
8522
8728
  try:
8523
8729
  yield