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