code-coordinator 0.5.297__tar.gz → 0.5.298__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 (855) hide show
  1. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-agent.service +27 -2
  5. {code_coordinator-0.5.297 → code_coordinator-0.5.298/coord}/deploy/coord-serve.service +14 -2
  6. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-web.service +14 -1
  7. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-agent.service +27 -2
  8. {code_coordinator-0.5.297/coord → code_coordinator-0.5.298}/deploy/coord-serve.service +14 -2
  9. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-web.service +14 -1
  10. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/CUSTOMER_FACING_APPS.md +118 -42
  11. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/install-agent.sh +11 -1
  12. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/.gitignore +0 -0
  25. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/GOAL.md +0 -0
  27. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/LICENSE +0 -0
  28. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/README.md +0 -0
  30. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/client.py +0 -0
  64. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/machine.py +0 -0
  79. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/pr.py +0 -0
  85. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/release.py +0 -0
  86. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/repo.py +0 -0
  87. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/report.py +0 -0
  88. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/review.py +0 -0
  89. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/scorecard.py +0 -0
  90. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/sessions.py +0 -0
  91. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/setup.py +0 -0
  92. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/status.py +0 -0
  93. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/store_migrate.py +0 -0
  94. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/terminal.py +0 -0
  95. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/test_gate.py +0 -0
  96. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/commands/tui.py +0 -0
  97. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/comments.py +0 -0
  98. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/config.py +0 -0
  99. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/confirm_test.py +0 -0
  101. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/db.py +0 -0
  109. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dead_end.py +0 -0
  110. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/decomposition_chat.py +0 -0
  111. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/README.md +0 -0
  112. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.service +0 -0
  113. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.sh +0 -0
  114. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.timer +0 -0
  115. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-drive-queue.service +0 -0
  116. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-drive-queue.timer +0 -0
  117. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-failure-notify.service +0 -0
  118. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-fleet-watchdog.service +0 -0
  119. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  120. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-notify.service +0 -0
  121. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-notify.timer +0 -0
  122. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-release-propagate.service +0 -0
  123. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-release-propagate.timer +0 -0
  124. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-release-window.service +0 -0
  125. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-release-window.timer +0 -0
  126. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-web-dist-build.service +0 -0
  127. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy/coord-web-dist-build.timer +0 -0
  128. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deprecation_telemetry.py +0 -0
  131. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/deps.py +0 -0
  132. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/diagnose.py +0 -0
  133. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dispatch.py +0 -0
  134. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/dist_name.py +0 -0
  135. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/drive.py +0 -0
  136. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/drive_queue.py +0 -0
  137. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/events.py +0 -0
  139. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/github_ops.py +0 -0
  149. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/github_throttle.py +0 -0
  150. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/goal.py +0 -0
  151. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/graph_health.py +0 -0
  152. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/__init__.py +0 -0
  153. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/aggregate.py +0 -0
  154. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/__init__.py +0 -0
  155. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/agent_install.py +0 -0
  156. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/cargo_targets.py +0 -0
  157. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/claude_binary.py +0 -0
  158. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/coord_web_ci_pin.py +0 -0
  159. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/deploy_lane_facts.py +0 -0
  160. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/disk.py +0 -0
  161. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/fleet_board.py +0 -0
  162. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  163. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/fleet_phantom.py +0 -0
  164. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/fleet_unit_drift.py +0 -0
  165. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/graph.py +0 -0
  166. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/graphify_cli.py +0 -0
  167. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/index_lock.py +0 -0
  168. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/issues_sync_staleness.py +0 -0
  169. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/plan_usage.py +0 -0
  170. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/release_cordon.py +0 -0
  171. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/stalled_pipeline.py +0 -0
  174. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/checks/worktrees.py +0 -0
  179. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/cli.py +0 -0
  180. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/context.py +0 -0
  181. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/fleet_snapshot.py +0 -0
  182. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/models.py +0 -0
  183. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/pypi.py +0 -0
  184. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/registry.py +0 -0
  185. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/render.py +0 -0
  186. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/health/units.py +0 -0
  187. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/hooks.py +0 -0
  188. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/housekeeping.py +0 -0
  189. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/interactive.py +0 -0
  190. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/issue_store.py +0 -0
  191. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/issues_sync_status.py +0 -0
  192. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/liveness_auditor.py +0 -0
  193. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/machine_onboard.py +0 -0
  194. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/machine_pause.py +0 -0
  195. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/merge_queue.py +0 -0
  196. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/milestone_chat.py +0 -0
  197. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/milestone_dispatch.py +0 -0
  198. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/milestone_gate.py +0 -0
  199. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/milestone_order.py +0 -0
  200. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/mock_author.py +0 -0
  201. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/models.py +0 -0
  202. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/network.py +0 -0
  203. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/new_issue_chat.py +0 -0
  204. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/__init__.py +0 -0
  205. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/baseline.py +0 -0
  206. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/cli.py +0 -0
  207. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/collect.py +0 -0
  208. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/digest.py +0 -0
  209. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/models.py +0 -0
  210. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/predicate.py +0 -0
  211. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/service.py +0 -0
  212. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/store.py +0 -0
  213. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notifier/transport.py +0 -0
  214. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/notify.py +0 -0
  215. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/openapi.py +0 -0
  216. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/overlap_fence.py +0 -0
  217. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/overlap_predict.py +0 -0
  218. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/parentage.py +0 -0
  219. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/parentage_github.py +0 -0
  220. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/pipeline.py +0 -0
  221. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/plan_parser.py +0 -0
  222. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/plans.py +0 -0
  223. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/platform_paths.py +0 -0
  224. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/portal_bridge.py +0 -0
  225. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/portal_store.py +0 -0
  226. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/portal_sync.py +0 -0
  227. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/pr_body_lint.py +0 -0
  228. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/prereqs.py +0 -0
  229. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/progress.py +0 -0
  230. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/providers/__init__.py +0 -0
  231. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/providers/base.py +0 -0
  232. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/providers/claude.py +0 -0
  233. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/providers/claude_pty.py +0 -0
  234. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/providers/opencode.py +0 -0
  235. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/queue_diagnose.py +0 -0
  236. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/reconcile.py +0 -0
  237. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/reconcile_tick.py +0 -0
  238. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/refine_chat.py +0 -0
  239. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/release_cordon.py +0 -0
  240. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/release_propagate.py +0 -0
  241. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/release_verify.py +0 -0
  242. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/release_window.py +0 -0
  243. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/repo_edit.py +0 -0
  244. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/repo_onboard.py +0 -0
  245. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/reports.py +0 -0
  246. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/rest_schema.py +0 -0
  247. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/revalidate.py +0 -0
  248. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/review.py +0 -0
  249. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/scorecard.py +0 -0
  250. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/self_health.py +0 -0
  251. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/serve_app.py +0 -0
  252. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/release-now/SKILL.md +0 -0
  259. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/state.py +0 -0
  268. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/store_migrate.py +0 -0
  269. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/test_author.py +0 -0
  270. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/test_chat.py +0 -0
  271. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/test_orchestrator.py +0 -0
  272. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/test_report.py +0 -0
  273. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/tui_release.py +0 -0
  274. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/usage.py +0 -0
  275. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/usage_limits.py +0 -0
  276. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/usage_rollup.py +0 -0
  277. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coord/worker_events.py +0 -0
  278. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/coordinator.example.yml +0 -0
  279. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-db-backup.service +0 -0
  280. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-db-backup.sh +0 -0
  281. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-db-backup.timer +0 -0
  282. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-drive-queue.service +0 -0
  283. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-drive-queue.timer +0 -0
  284. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-failure-notify.service +0 -0
  285. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-failure-notify.sh +0 -0
  286. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-fleet-watchdog.service +0 -0
  287. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-fleet-watchdog.timer +0 -0
  288. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-notify.service +0 -0
  289. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-notify.timer +0 -0
  290. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-release-propagate.service +0 -0
  291. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-release-propagate.timer +0 -0
  292. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-release-window.service +0 -0
  293. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-release-window.timer +0 -0
  294. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.service +0 -0
  295. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.sh +0 -0
  296. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.timer +0 -0
  297. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/coord-web-rollback.sh +0 -0
  298. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/deploy/node-shim.sh +0 -0
  299. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ADR_COORD_TUI_CI.md +0 -0
  300. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  301. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_CI.md +0 -0
  302. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_DIST.md +0 -0
  303. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/AGENT_OPERATIONS.md +0 -0
  304. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ARCHITECTURE.md +0 -0
  305. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ARCH_SECURITY_GATES.md +0 -0
  306. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/COCKPIT.md +0 -0
  307. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/CONTROL_CENTER.md +0 -0
  308. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/COST_DISCIPLINE.md +0 -0
  309. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/CROSS_PLATFORM.md +0 -0
  310. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/CUSTOMER_PORTAL.md +0 -0
  311. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/DRIVE_QUEUE.md +0 -0
  312. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/EPHEMERAL_WORKERS.md +0 -0
  313. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/FORGE_MIGRATION.md +0 -0
  314. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/GRAPHIFY_SETUP.md +0 -0
  315. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ISSUE_GUIDANCE.md +0 -0
  316. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/MAC_MINI.md +0 -0
  317. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  318. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/NOTIFIER.md +0 -0
  319. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/OPENCODE_VERIFICATION.md +0 -0
  320. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/OPERATING_GOTCHAS.md +0 -0
  321. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/OPERATOR_GUIDES.md +0 -0
  322. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/ORACLE_LOOP.md +0 -0
  323. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/PHONE_WEBAPP.md +0 -0
  324. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/PIPELINE_V2.md +0 -0
  325. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/PLATFORM_EVOLUTION.md +0 -0
  326. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/SECOND_BACKEND.md +0 -0
  327. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/STORE_SERVICE.md +0 -0
  328. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  329. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/WEB_CONTROL_CENTER.md +0 -0
  330. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/WSL_WINDOWS_WORKER.md +0 -0
  331. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/mocks/web/README.md +0 -0
  332. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/mocks/web/_tokens.css +0 -0
  333. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/mocks/web/issue-detail.html +0 -0
  334. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/mocks/web/pipeline-narrow.html +0 -0
  335. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/docs/mocks/web/pipeline-wide.html +0 -0
  336. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/graphify-out/.gitignore +0 -0
  337. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/pyproject.toml +0 -0
  338. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/audit_review_verdict_overrides.py +0 -0
  339. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  340. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/build-worker-image.sh +0 -0
  341. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/coordinator-machine.py +0 -0
  342. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/epic-down.sh +0 -0
  343. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/epic-up.sh +0 -0
  344. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/preflight.sh +0 -0
  345. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/provision-worker.sh +0 -0
  346. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  347. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  348. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/azure-workers/verify-github-token.sh +0 -0
  349. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/check_gh_argv_containment.py +0 -0
  350. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/codegen.py +0 -0
  351. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-test-runner.sh +0 -0
  352. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  353. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  354. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  355. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  356. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/coord-venv-rollback.sh +0 -0
  357. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/drive-batch.sh +0 -0
  358. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/extract-coord-tui.sh +0 -0
  359. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/fleet_watchdog.py +0 -0
  360. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/gen_board_fixture.py +0 -0
  361. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/gen_mock_index.py +0 -0
  362. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/next_release_tag.py +0 -0
  363. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/run_tests_in_populated_home.sh +0 -0
  364. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/run_tests_without_gh.sh +0 -0
  365. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/smoke_437_interactive.py +0 -0
  366. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/verify_878_review_capture.py +0 -0
  367. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/verify_release_published.py +0 -0
  368. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/scripts/verify_release_wheel.py +0 -0
  369. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/setup.cfg +0 -0
  370. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/SMOKE_SET.md +0 -0
  371. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/__init__.py +0 -0
  372. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-37/conftest.py +0 -0
  373. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-37/contract.md +0 -0
  374. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-37/manifest.yml +0 -0
  375. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  376. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  377. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/contract.md +0 -0
  378. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  379. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  380. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/manifest.yml +0 -0
  381. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  382. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-51/tsconfig.json +0 -0
  383. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/backends.py +0 -0
  385. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/conftest.py +0 -0
  386. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/board-pipeline-basic.json +0 -0
  387. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  388. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  389. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  390. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  391. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/all_pass.json +0 -0
  392. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  393. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/mixed_fail.json +0 -0
  394. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  395. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  396. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/skip.json +0 -0
  397. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/playwright/truncated.json +0 -0
  398. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  399. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  400. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  401. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  402. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  403. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  404. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  405. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  406. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_acceptance.py +0 -0
  407. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_acceptance_drivers.py +0 -0
  408. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent.py +0 -0
  409. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_api_error.py +0 -0
  410. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_app.py +0 -0
  411. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_branch_base.py +0 -0
  412. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_branch_capture.py +0 -0
  413. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_config_free_1712.py +0 -0
  414. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_deploy_units_endpoint.py +0 -0
  415. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_dirty_worktree.py +0 -0
  416. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  417. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_graph_self_heal.py +0 -0
  418. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_health_h3.py +0 -0
  419. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_idle_restart.py +0 -0
  420. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_push_failure.py +0 -0
  421. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_reap.py +0 -0
  422. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_repos_and_pull.py +0 -0
  423. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_restart_services_endpoint.py +0 -0
  424. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_skills_self_heal.py +0 -0
  425. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_startup_diagnostics.py +0 -0
  426. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_update.py +0 -0
  427. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_update_bluegreen.py +0 -0
  428. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_usage_limit.py +0 -0
  429. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_agent_zero_commit.py +0 -0
  430. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ambient_home_isolation.py +0 -0
  431. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_approve_dependency_busy_2804.py +0 -0
  432. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_approve_reject_plan.py +0 -0
  433. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_approve_usage_gate.py +0 -0
  434. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_approved_work_2532.py +0 -0
  435. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_assignment_already_recorded_daemon.py +0 -0
  436. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_audit_log.py +0 -0
  437. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_audit_outcome.py +0 -0
  438. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_audit_query.py +0 -0
  439. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_auto_loop.py +0 -0
  440. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_auto_release_publish_2035.py +0 -0
  441. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_backend_selection.py +0 -0
  442. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_base_checkout_restore.py +0 -0
  443. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_block_log.py +0 -0
  444. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_cap_762.py +0 -0
  445. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_fixture.py +0 -0
  446. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_read_path.py +0 -0
  447. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_schema.py +0 -0
  448. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_service.py +0 -0
  449. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_state.py +0 -0
  450. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_board_wire.py +0 -0
  451. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_brain.py +0 -0
  452. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_branch_model.py +0 -0
  453. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_bug_intake.py +0 -0
  454. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_build_worker_image_env_update.py +0 -0
  455. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cargo_cache.py +0 -0
  456. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_check_gh_argv_containment.py +0 -0
  457. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ci_acceptance_gate_1950.py +0 -0
  458. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ci_fix.py +0 -0
  459. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ci_gitlab.py +0 -0
  460. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ci_parity_2091.py +0 -0
  461. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_ci_store.py +0 -0
  462. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_claim.py +0 -0
  463. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_claude_md_budget.py +0 -0
  464. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_acceptance.py +0 -0
  465. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_assign.py +0 -0
  466. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  467. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_assign_interactive_remote.py +0 -0
  468. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_assign_provider.py +0 -0
  469. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  470. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_audit.py +0 -0
  471. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_chat_continue.py +0 -0
  472. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_decide.py +0 -0
  473. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_diagnose_config_provenance.py +0 -0
  474. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_diagnose_forge_availability.py +0 -0
  475. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_diagnose_graph.py +0 -0
  476. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_diagnose_self.py +0 -0
  477. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_doctor.py +0 -0
  478. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_doctor_config_free_1801.py +0 -0
  479. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  480. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_drive.py +0 -0
  481. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_drive_queue.py +0 -0
  482. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_escalate.py +0 -0
  483. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_fix_headless_review.py +0 -0
  484. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_gate_a.py +0 -0
  485. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_install_drift.py +0 -0
  486. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_install_skills.py +0 -0
  487. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_issue_comment.py +0 -0
  488. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_issue_create_label.py +0 -0
  489. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_issue_reopen.py +0 -0
  490. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_issue_view_list.py +0 -0
  491. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_merge.py +0 -0
  492. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_assign.py +0 -0
  493. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_capture.py +0 -0
  494. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_chat_add_child.py +0 -0
  495. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_dispatch.py +0 -0
  496. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_gate_b.py +0 -0
  497. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_gate_c.py +0 -0
  498. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_order.py +0 -0
  499. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  500. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_milestone_ship.py +0 -0
  501. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_network.py +0 -0
  502. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_new_issue_chat.py +0 -0
  503. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_plans.py +0 -0
  504. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_portal.py +0 -0
  505. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_pr.py +0 -0
  506. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_pull_artifact.py +0 -0
  507. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_queue.py +0 -0
  508. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_reattach_sessions.py +0 -0
  509. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_refine_board.py +0 -0
  510. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_release_preflight.py +0 -0
  511. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_release_propagate.py +0 -0
  512. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_release_window.py +0 -0
  513. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_repo_2220.py +0 -0
  514. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  515. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_scorecard.py +0 -0
  516. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_set_review_findings.py +0 -0
  517. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_advisory_terminal.py +0 -0
  518. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_contested_tag.py +0 -0
  519. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_merge_queue.py +0 -0
  520. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_provider.py +0 -0
  521. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_review_finalizing.py +0 -0
  522. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_test_failed_tag.py +0 -0
  523. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_status_usage_limit.py +0 -0
  524. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_sync_comments_873.py +0 -0
  525. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_test_plan.py +0 -0
  526. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_track.py +0 -0
  527. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_tui_update.py +0 -0
  528. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cli_wait.py +0 -0
  529. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_client_base_install.py +0 -0
  530. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_client_resource_migration_1946.py +0 -0
  531. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_commands_common.py +0 -0
  532. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_comments.py +0 -0
  533. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_completion_summary.py +0 -0
  534. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config.py +0 -0
  535. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config_acceptance.py +0 -0
  536. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config_audit.py +0 -0
  537. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config_pricing.py +0 -0
  538. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  539. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_config_usage_gate.py +0 -0
  540. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_confirm_test.py +0 -0
  541. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_conflict_fix.py +0 -0
  542. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_conflict_fix_semantic.py +0 -0
  543. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  544. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test.py +0 -0
  545. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  546. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test_runner_baseline.py +0 -0
  547. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test_runner_populated_home.py +0 -0
  548. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test_runner_routing.py +0 -0
  549. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_test_runner_toolchain.py +0 -0
  550. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_uat.py +0 -0
  551. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coord_web_sse_restart_live.py +0 -0
  552. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_coordinator_machine.py +0 -0
  553. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_cross_platform_imports.py +0 -0
  554. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dao.py +0 -0
  555. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dashboard.py +0 -0
  556. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dashboard_fixture.py +0 -0
  557. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dashboard_terminal.py +0 -0
  558. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dashboard_terminal_live.py +0 -0
  559. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_db.py +0 -0
  560. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dead_end.py +0 -0
  561. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_decomposition_chat.py +0 -0
  562. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_failure_notify_unit.py +0 -0
  567. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_manifest.py +0 -0
  568. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_notify_unit.py +0 -0
  569. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_units_lane.py +0 -0
  570. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deploy_web_unit.py +0 -0
  571. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deprecation_telemetry.py +0 -0
  572. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_deps.py +0 -0
  573. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_diagnose.py +0 -0
  574. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dispatch.py +0 -0
  575. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dispatch_target_validation.py +0 -0
  576. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_dist_name.py +0 -0
  577. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_done_housekeeping.py +0 -0
  578. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive.py +0 -0
  579. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue.py +0 -0
  580. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue_blocked_rendering.py +0 -0
  581. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue_launch_argv.py +0 -0
  582. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  583. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue_roll_pending.py +0 -0
  584. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  585. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_state.py +0 -0
  586. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_drive_tmux.py +0 -0
  587. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_epic_up_capability_detection.py +0 -0
  588. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  589. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_epic_up_image_provenance.py +0 -0
  590. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_errors.py +0 -0
  591. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_events.py +0 -0
  592. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_failure_class.py +0 -0
  593. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_filelock.py +0 -0
  594. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  595. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_fix_of_force_override.py +0 -0
  596. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_fleet_config_health.py +0 -0
  597. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_fleet_health_probes.py +0 -0
  598. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_fleet_health_snapshot.py +0 -0
  599. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_fleet_watchdog.py +0 -0
  600. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_forge_availability.py +0 -0
  601. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_freshness.py +0 -0
  602. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gate_a.py +0 -0
  603. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gate_b.py +0 -0
  604. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gate_snapshot_staleness.py +0 -0
  605. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gates.py +0 -0
  606. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  607. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_gen_mock_index.py +0 -0
  608. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_generated_rust_fixture.py +0 -0
  609. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_generated_types_fixture.py +0 -0
  610. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_github_ops.py +0 -0
  611. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_github_throttle.py +0 -0
  612. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_goal.py +0 -0
  613. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_graph_health.py +0 -0
  614. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_graph_selfheal_absent_2237.py +0 -0
  615. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_handoff.py +0 -0
  616. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_checks.py +0 -0
  617. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_cli.py +0 -0
  618. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_cli_graph.py +0 -0
  619. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_config.py +0 -0
  620. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_context.py +0 -0
  621. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_coord_web_ci_pin.py +0 -0
  622. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_deploy_lane_facts.py +0 -0
  623. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_fix.py +0 -0
  624. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_incident_regression.py +0 -0
  625. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_issues_sync_staleness.py +0 -0
  626. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_pypi.py +0 -0
  627. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_registry.py +0 -0
  628. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_release_cordon_probe.py +0 -0
  629. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_timer_active.py +0 -0
  630. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_toolchain.py +0 -0
  631. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_unit_drift.py +0 -0
  632. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_health_unit_enablement.py +0 -0
  633. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_hooks.py +0 -0
  634. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_human_attended_437.py +0 -0
  635. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_init.py +0 -0
  636. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_install_agent_venv_2911.py +0 -0
  637. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_integration.py +0 -0
  638. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_briefing_echo.py +0 -0
  639. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_pane_log_2541.py +0 -0
  640. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_prefill_state.py +0 -0
  641. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_session_relaunch.py +0 -0
  642. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_test_verdict_backstop.py +0 -0
  643. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_token_attribution.py +0 -0
  644. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_interactive_worktree.py +0 -0
  645. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_issue_store_seam.py +0 -0
  646. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_issues_sync_status.py +0 -0
  647. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_liveness_auditor.py +0 -0
  648. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_liveness_notify.py +0 -0
  649. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_lock_contention_ratchet.py +0 -0
  650. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_machine_onboard.py +0 -0
  651. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_machine_pause.py +0 -0
  652. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_merge_queue.py +0 -0
  653. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_merge_verify.py +0 -0
  654. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_milestone_chat.py +0 -0
  655. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_milestone_dispatch.py +0 -0
  656. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_milestone_gate.py +0 -0
  657. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_milestone_order.py +0 -0
  658. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_milestone_seam.py +0 -0
  659. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_mock_author.py +0 -0
  660. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_model_tiering.py +0 -0
  661. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_models.py +0 -0
  662. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_models_config_labels.py +0 -0
  663. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_needs_attention.py +0 -0
  664. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_network.py +0 -0
  665. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_new_issue_chat.py +0 -0
  666. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_next_release_tag.py +0 -0
  667. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_node_shim.py +0 -0
  668. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_baseline.py +0 -0
  669. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_cli.py +0 -0
  670. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_collect.py +0 -0
  671. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_config.py +0 -0
  672. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_drive_seam.py +0 -0
  673. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_isolation.py +0 -0
  674. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_predicate.py +0 -0
  675. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_quiet_hours.py +0 -0
  676. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notifier_service.py +0 -0
  677. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notify.py +0 -0
  678. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_notify_drain.py +0 -0
  679. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_openapi.py +0 -0
  680. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_operational_defaults.py +0 -0
  681. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_overlap_fence.py +0 -0
  682. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_overlap_predict.py +0 -0
  683. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_packaged_deploy_units.py +0 -0
  684. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_parentage.py +0 -0
  685. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_paste_landed.py +0 -0
  686. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  687. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_pipeline.py +0 -0
  688. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_plan_followup_approve_plan_command.py +0 -0
  689. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_plan_followup_pr_command.py +0 -0
  690. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_plan_followup_review_command.py +0 -0
  691. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_plan_only.py +0 -0
  692. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_plan_parser.py +0 -0
  693. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_platform_paths.py +0 -0
  694. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_portal_bridge.py +0 -0
  695. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_portal_config.py +0 -0
  696. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_portal_store.py +0 -0
  697. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_portal_sync.py +0 -0
  698. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_pr_body_lint.py +0 -0
  699. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_prereqs.py +0 -0
  700. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_production_db_guard.py +0 -0
  701. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_progress.py +0 -0
  702. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_provider_seam.py +0 -0
  703. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_providers.py +0 -0
  704. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_providers_config_labels.py +0 -0
  705. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_providers_pty.py +0 -0
  706. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_quiet_hours.py +0 -0
  707. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_quiet_hours_store_2146.py +0 -0
  708. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reap_merged_sessions.py +0 -0
  709. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reap_stale_interactive_tick.py +0 -0
  710. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile.py +0 -0
  711. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_branch.py +0 -0
  712. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_completions.py +0 -0
  713. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  714. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_merges.py +0 -0
  715. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_no_agent_record.py +0 -0
  716. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_tick.py +0 -0
  717. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reconcile_usage_limit_done.py +0 -0
  718. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_refine_chat.py +0 -0
  719. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_cordon_2101.py +0 -0
  720. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  721. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_cordon_deadlock_2240.py +0 -0
  722. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_cordon_stuck_2490.py +0 -0
  723. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_propagate.py +0 -0
  724. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_propagate_threshold.py +0 -0
  725. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_roll_between_legs_2854.py +0 -0
  726. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_roll_window_handoff.py +0 -0
  727. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_unified_1242.py +0 -0
  728. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_verify.py +0 -0
  729. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_release_window.py +0 -0
  730. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_remote_auto_prune.py +0 -0
  731. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_remote_interactive_reaper.py +0 -0
  732. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_repo_add.py +0 -0
  733. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_repo_edit_2220.py +0 -0
  734. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_repo_graph_fleet_2237.py +0 -0
  735. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_repo_onboard_2220.py +0 -0
  736. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_report_result_push.py +0 -0
  737. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_reports.py +0 -0
  738. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_retry.py +0 -0
  739. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_retry_advisory_1606.py +0 -0
  740. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_retry_type_1636.py +0 -0
  741. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_revalidate.py +0 -0
  742. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review.py +0 -0
  743. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_end_review_without_verdict.py +0 -0
  744. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_parse_failure_diagnostic.py +0 -0
  745. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_reaffirm.py +0 -0
  746. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_state.py +0 -0
  747. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_verdict_backstop.py +0 -0
  748. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_verdict_override_audit.py +0 -0
  749. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_verdict_relay.py +0 -0
  750. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_review_zero_commits.py +0 -0
  751. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_scoped_review_wiring.py +0 -0
  752. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_scorecard.py +0 -0
  753. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_self_health.py +0 -0
  754. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_serve.py +0 -0
  755. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_serve_app_board_trim.py +0 -0
  756. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_serve_rest_routes.py +0 -0
  757. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_session.py +0 -0
  758. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_slice_issue_attribution.py +0 -0
  759. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_smoke.py +0 -0
  760. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_smoke_live_checkout_restore.py +0 -0
  761. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_smoke_workflow.py +0 -0
  762. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_spend_ceiling.py +0 -0
  763. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_spend_ceiling_coordinator.py +0 -0
  764. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_split.py +0 -0
  765. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_split_work.py +0 -0
  766. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_sql_dialect.py +0 -0
  767. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_sqlite_connect_ratchet.py +0 -0
  768. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stage_projection.py +0 -0
  769. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stale_busy_reviewer_697.py +0 -0
  770. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stalled_pipeline.py +0 -0
  771. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_state.py +0 -0
  772. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_state_review_findings_daemon.py +0 -0
  773. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_status_fleet_footer.py +0 -0
  774. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stop_1567.py +0 -0
  775. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_store_contract.py +0 -0
  776. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_store_migrate.py +0 -0
  777. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stuck.py +0 -0
  778. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  779. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_terminal_command.py +0 -0
  780. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_author.py +0 -0
  781. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_chat.py +0 -0
  782. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_orchestrator.py +0 -0
  783. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_report.py +0 -0
  784. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_verdict_parsing.py +0 -0
  785. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_test_verdict_transcript_floor.py +0 -0
  786. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_text_io_encoding_audit.py +0 -0
  787. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_thin_client_board_audit.py +0 -0
  788. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_thin_client_config_load_1080.py +0 -0
  789. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_thin_client_daemon_routing_906.py +0 -0
  790. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_tmux_host.py +0 -0
  791. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_tmux_session.py +0 -0
  792. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_transcript_floor.py +0 -0
  793. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_usage.py +0 -0
  794. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_usage_limits.py +0 -0
  795. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_usage_rollup.py +0 -0
  796. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_venv_live_install_2121.py +0 -0
  797. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_version_single_source.py +0 -0
  798. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_watch.py +0 -0
  799. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  800. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worker_env_venv_isolation.py +0 -0
  801. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worker_events.py +0 -0
  802. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worker_image_pin_sync.py +0 -0
  803. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worker_safety.py +0 -0
  804. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worker_test_scoping.py +0 -0
  805. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worktree.py +0 -0
  806. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  807. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/test_write_parity.py +0 -0
  808. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tests/write_parity.py +0 -0
  809. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  810. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/contract.md +0 -0
  811. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  812. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  813. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  814. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  815. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  816. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/contract.md +0 -0
  817. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  818. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  819. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  820. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  821. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  822. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  823. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  824. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  825. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  826. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  827. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  828. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  829. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  830. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  831. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/contract.md +0 -0
  832. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  833. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  834. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  835. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  836. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  837. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  838. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  839. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  840. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  841. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  842. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  843. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  844. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  845. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  846. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/contract.md +0 -0
  847. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  848. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  849. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  850. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  851. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  852. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  853. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  854. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  855. {code_coordinator-0.5.297 → code_coordinator-0.5.298}/tui/tests/acceptance.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.297
3
+ Version: 0.5.298
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.297
3
+ Version: 0.5.298
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.297",
2
+ "tag": "0.5.298",
3
3
  "distance": 0,
4
- "node": "g47fe3ff98db0a0f6549b080e1a59c60423ff2df8",
4
+ "node": "gaa327b0f6d037fbb6df6db3ef4dd15e123624825",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -74,15 +74,40 @@
74
74
  # systemctl --user restart coord-agent
75
75
  #
76
76
  # See docs/AGENT_OPERATIONS.md → "Install a new agent (first time)".
77
-
77
+ #
78
+ # #2938: Restart=always, not on-failure. `POST /update` stops this unit's
79
+ # own process so it can come back on the swapped venv — the agent IS its own
80
+ # recovery channel here, via an explicit `systemctl --user restart` the
81
+ # process fires at itself just before exiting (coord/agent_app.py's
82
+ # `_default_exec_restart`). When that explicit restart lands, this process
83
+ # exits 0 either way (a clean stop) and `Restart=on-failure` — correctly, by
84
+ # its own definition — declines to act on a clean exit. If the explicit
85
+ # restart request is ever lost (a dropped systemd/D-Bus call, a race with
86
+ # the process's own exit, anything), NOTHING brings the unit back: it sits
87
+ # `enabled`/`inactive` forever, port 7433 refused, and the fleet has lost
88
+ # its only remote-control channel to that host. `Restart=always` makes
89
+ # systemd itself the backstop for a clean exit, independent of whether the
90
+ # self-restart call landed — dell64, 2026-08-29, ~23 minutes of that exact
91
+ # outage, recovered only because someone could walk to the machine.
92
+ #
93
+ # StartLimitIntervalSec/StartLimitBurst (#2938) bound it: 5 restarts inside
94
+ # 5 minutes and systemd stops trying, landing the unit in `failed` with
95
+ # `Result: start-limit-hit` — visible in `systemctl --user status` and the
96
+ # journal — rather than crash-looping forever. A binary that is genuinely
97
+ # broken (not just "the explicit restart didn't land") must fail loud, not
98
+ # spin silently; `Restart=always` without a limit would trade one silent
99
+ # failure (never restarts) for another (restarts forever with no signal
100
+ # anything is wrong).
78
101
  [Unit]
79
102
  Description=Coordinator agent server (port <PORT>)
80
103
  After=network-online.target
104
+ StartLimitIntervalSec=300
105
+ StartLimitBurst=5
81
106
 
82
107
  [Service]
83
108
  Type=simple
84
109
  ExecStart=%h/.coord-venv/bin/coord agent --machine <MACHINE_NAME> --port <PORT>
85
- Restart=on-failure
110
+ Restart=always
86
111
  RestartSec=5
87
112
  Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/bin:/usr/bin:/bin
88
113
 
@@ -36,11 +36,23 @@
36
36
  # put --token on ExecStart — it would leak via `ps`).
37
37
  #
38
38
  # See docs/AGENT_OPERATIONS.md → "Control-center daemon (coord serve)".
39
-
39
+ #
40
+ # #2938: Restart=always (was on-failure), + a StartLimitIntervalSec/
41
+ # StartLimitBurst backstop — see deploy/coord-agent.service's header for the
42
+ # full incident this closes (a clean stop that Restart=on-failure correctly
43
+ # declines to act on, with no other recovery path, leaving the unit
44
+ # `enabled`/`inactive` forever). coord-serve restarts through the same
45
+ # `_restart_sibling_unit` caller as coord-agent's own self-restart
46
+ # (coord/agent_app.py, #2069), so it is exposed to the identical failure
47
+ # shape if that restart request is ever lost. 5 restarts / 5 minutes before
48
+ # systemd gives up and lands the unit in `failed` (`start-limit-hit`) —
49
+ # visible, not a silent crash-loop.
40
50
  [Unit]
41
51
  Description=coord serve — portable control-center daemon (#584)
42
52
  After=network-online.target
43
53
  Wants=network-online.target
54
+ StartLimitIntervalSec=300
55
+ StartLimitBurst=5
44
56
 
45
57
  [Service]
46
58
  Type=simple
@@ -78,7 +90,7 @@ Type=simple
78
90
  # ahead of ~/.local/bin or ~/.coord-venv/bin.
79
91
  Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
80
92
  ExecStart=%h/.coord-venv/bin/coord serve --config %h/.coord/coordinator.yml --host 0.0.0.0 --port 7435
81
- Restart=on-failure
93
+ Restart=always
82
94
  RestartSec=3
83
95
  # #2095: coord-web (its sibling on the same host, restarted through the same
84
96
  # `_restart_sibling_unit` caller) went down for the length of a fleet roll
@@ -92,11 +92,24 @@
92
92
  # (#1830), even though the underlying reason differs (that one protects a
93
93
  # spawned tmux server from this unit's own cgroup teardown; this one avoids
94
94
  # ever having to signal a nonexistent auxiliary process group at all).
95
+ #
96
+ # #2938: Restart=always (was on-failure), + a StartLimitIntervalSec/
97
+ # StartLimitBurst backstop — see deploy/coord-agent.service's header for the
98
+ # full incident this closes (a clean stop that Restart=on-failure correctly
99
+ # declines to act on, with no other recovery path, leaving the unit
100
+ # `enabled`/`inactive` forever). coord-web restarts through the same
101
+ # `_restart_sibling_unit` caller as coord-agent's own self-restart
102
+ # (coord/agent_app.py, #2069), so it is exposed to the identical failure
103
+ # shape if that restart request is ever lost. 5 restarts / 5 minutes before
104
+ # systemd gives up and lands the unit in `failed` (`start-limit-hit`) —
105
+ # visible, not a silent crash-loop.
95
106
 
96
107
  [Unit]
97
108
  Description=coord web — phone/web control-center dashboard (#700)
98
109
  After=network-online.target
99
110
  Wants=network-online.target
111
+ StartLimitIntervalSec=300
112
+ StartLimitBurst=5
100
113
 
101
114
  [Service]
102
115
  Type=simple
@@ -118,7 +131,7 @@ ExecStart=%h/.coord-venv/bin/coord web --config %h/.coord/coordinator.yml --host
118
131
  # setting it here too ensures any other subprocess spawned by coord web also
119
132
  # has a sane terminal type without requiring a code fix for each callsite.
120
133
  Environment=TERM=xterm-256color
121
- Restart=on-failure
134
+ Restart=always
122
135
  RestartSec=3
123
136
  # #2095 — see the header comment above. Bounds the SSE-drain hang that took
124
137
  # the dashboard down during the 2026-08-10 fleet roll.
@@ -74,15 +74,40 @@
74
74
  # systemctl --user restart coord-agent
75
75
  #
76
76
  # See docs/AGENT_OPERATIONS.md → "Install a new agent (first time)".
77
-
77
+ #
78
+ # #2938: Restart=always, not on-failure. `POST /update` stops this unit's
79
+ # own process so it can come back on the swapped venv — the agent IS its own
80
+ # recovery channel here, via an explicit `systemctl --user restart` the
81
+ # process fires at itself just before exiting (coord/agent_app.py's
82
+ # `_default_exec_restart`). When that explicit restart lands, this process
83
+ # exits 0 either way (a clean stop) and `Restart=on-failure` — correctly, by
84
+ # its own definition — declines to act on a clean exit. If the explicit
85
+ # restart request is ever lost (a dropped systemd/D-Bus call, a race with
86
+ # the process's own exit, anything), NOTHING brings the unit back: it sits
87
+ # `enabled`/`inactive` forever, port 7433 refused, and the fleet has lost
88
+ # its only remote-control channel to that host. `Restart=always` makes
89
+ # systemd itself the backstop for a clean exit, independent of whether the
90
+ # self-restart call landed — dell64, 2026-08-29, ~23 minutes of that exact
91
+ # outage, recovered only because someone could walk to the machine.
92
+ #
93
+ # StartLimitIntervalSec/StartLimitBurst (#2938) bound it: 5 restarts inside
94
+ # 5 minutes and systemd stops trying, landing the unit in `failed` with
95
+ # `Result: start-limit-hit` — visible in `systemctl --user status` and the
96
+ # journal — rather than crash-looping forever. A binary that is genuinely
97
+ # broken (not just "the explicit restart didn't land") must fail loud, not
98
+ # spin silently; `Restart=always` without a limit would trade one silent
99
+ # failure (never restarts) for another (restarts forever with no signal
100
+ # anything is wrong).
78
101
  [Unit]
79
102
  Description=Coordinator agent server (port <PORT>)
80
103
  After=network-online.target
104
+ StartLimitIntervalSec=300
105
+ StartLimitBurst=5
81
106
 
82
107
  [Service]
83
108
  Type=simple
84
109
  ExecStart=%h/.coord-venv/bin/coord agent --machine <MACHINE_NAME> --port <PORT>
85
- Restart=on-failure
110
+ Restart=always
86
111
  RestartSec=5
87
112
  Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/bin:/usr/bin:/bin
88
113
 
@@ -36,11 +36,23 @@
36
36
  # put --token on ExecStart — it would leak via `ps`).
37
37
  #
38
38
  # See docs/AGENT_OPERATIONS.md → "Control-center daemon (coord serve)".
39
-
39
+ #
40
+ # #2938: Restart=always (was on-failure), + a StartLimitIntervalSec/
41
+ # StartLimitBurst backstop — see deploy/coord-agent.service's header for the
42
+ # full incident this closes (a clean stop that Restart=on-failure correctly
43
+ # declines to act on, with no other recovery path, leaving the unit
44
+ # `enabled`/`inactive` forever). coord-serve restarts through the same
45
+ # `_restart_sibling_unit` caller as coord-agent's own self-restart
46
+ # (coord/agent_app.py, #2069), so it is exposed to the identical failure
47
+ # shape if that restart request is ever lost. 5 restarts / 5 minutes before
48
+ # systemd gives up and lands the unit in `failed` (`start-limit-hit`) —
49
+ # visible, not a silent crash-loop.
40
50
  [Unit]
41
51
  Description=coord serve — portable control-center daemon (#584)
42
52
  After=network-online.target
43
53
  Wants=network-online.target
54
+ StartLimitIntervalSec=300
55
+ StartLimitBurst=5
44
56
 
45
57
  [Service]
46
58
  Type=simple
@@ -78,7 +90,7 @@ Type=simple
78
90
  # ahead of ~/.local/bin or ~/.coord-venv/bin.
79
91
  Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
80
92
  ExecStart=%h/.coord-venv/bin/coord serve --config %h/.coord/coordinator.yml --host 0.0.0.0 --port 7435
81
- Restart=on-failure
93
+ Restart=always
82
94
  RestartSec=3
83
95
  # #2095: coord-web (its sibling on the same host, restarted through the same
84
96
  # `_restart_sibling_unit` caller) went down for the length of a fleet roll
@@ -92,11 +92,24 @@
92
92
  # (#1830), even though the underlying reason differs (that one protects a
93
93
  # spawned tmux server from this unit's own cgroup teardown; this one avoids
94
94
  # ever having to signal a nonexistent auxiliary process group at all).
95
+ #
96
+ # #2938: Restart=always (was on-failure), + a StartLimitIntervalSec/
97
+ # StartLimitBurst backstop — see deploy/coord-agent.service's header for the
98
+ # full incident this closes (a clean stop that Restart=on-failure correctly
99
+ # declines to act on, with no other recovery path, leaving the unit
100
+ # `enabled`/`inactive` forever). coord-web restarts through the same
101
+ # `_restart_sibling_unit` caller as coord-agent's own self-restart
102
+ # (coord/agent_app.py, #2069), so it is exposed to the identical failure
103
+ # shape if that restart request is ever lost. 5 restarts / 5 minutes before
104
+ # systemd gives up and lands the unit in `failed` (`start-limit-hit`) —
105
+ # visible, not a silent crash-loop.
95
106
 
96
107
  [Unit]
97
108
  Description=coord web — phone/web control-center dashboard (#700)
98
109
  After=network-online.target
99
110
  Wants=network-online.target
111
+ StartLimitIntervalSec=300
112
+ StartLimitBurst=5
100
113
 
101
114
  [Service]
102
115
  Type=simple
@@ -118,7 +131,7 @@ ExecStart=%h/.coord-venv/bin/coord web --config %h/.coord/coordinator.yml --host
118
131
  # setting it here too ensures any other subprocess spawned by coord web also
119
132
  # has a sane terminal type without requiring a code fix for each callsite.
120
133
  Environment=TERM=xterm-256color
121
- Restart=on-failure
134
+ Restart=always
122
135
  RestartSec=3
123
136
  # #2095 — see the header comment above. Bounds the SSE-drain hang that took
124
137
  # the dashboard down during the 2026-08-10 fleet roll.
@@ -109,10 +109,23 @@ natal-chart (Preview) ref=issue-39-transit-page-annual-profections-mock-up
109
109
  https://ed9f21ad.natal-chart-3ew.pages.dev
110
110
  ```
111
111
 
112
- The hash is not derivable from the branch name, and the branch-alias URL
113
- Cloudflare also publishes truncates at 28 characters, which these branch names
114
- exceed. Read it from the forge instead — `cloudflare/pages-action` creates a
115
- GitHub Deployment per PR whose latest status carries the real URL:
112
+ The hash is not derivable from the branch name, and **there is no branch-alias
113
+ URL to fall back on** — measured 2026-08-29 against this project, aliasing is off
114
+ entirely, `main` included:
115
+
116
+ ```
117
+ 404 https://issue-56-transit-chart-add-a.natal-chart-3ew.pages.dev
118
+ 404 https://main.natal-chart-3ew.pages.dev
119
+ 200 https://f432dd47.natal-chart-3ew.pages.dev
120
+ ```
121
+
122
+ Note the domain too: it is `natal-chart-3ew.pages.dev`, while
123
+ `deploy-cloudflare.yml` says `projectName: natal-chart`. Cloudflare's `-3ew`
124
+ suffix is not derivable from anything coord holds, so a repo's preview host has
125
+ to be *read*, never *constructed* — see #2948, which is this exact assumption
126
+ shipped as a config template. Read it from the forge instead —
127
+ `cloudflare/pages-action` creates a GitHub Deployment per PR whose latest status
128
+ carries the real URL:
116
129
 
117
130
  ```bash
118
131
  gh api "repos/{owner}/{repo}/deployments?ref={branch}" --jq '.[0].id'
@@ -122,21 +135,58 @@ gh api "repos/{owner}/{repo}/deployments/{id}/statuses" --jq '.[0].environment_u
122
135
  Match on the **environment name** (`"<project> (Preview)"`), not on recency —
123
136
  production deploys are hash URLs too and interleave with previews in that list.
124
137
 
125
- ### 2. A `uat` gate between Review and Merge · **NOT BUILT — claude-coordinator#2687**
138
+ ### 2. A `uat` gate between Review and Merge · **shipped (#2687) · ON for natal-chart since 2026-08-29**
126
139
 
127
- The gap that lets everything else fail. Today `merge.auto_drain: true` with
128
- `max_per_tick: 1` means the daemon merges the moment Test + Review + CI go
129
- green, and the push to `main` fires production. **There is no per-repo,
130
- pre-merge operator hold anywhere in coord**: `coord pause` only stops agent
131
- routing, and drive-queue's `--hold-after` (#1757) fires *after* the merge, which
132
- for an auto-deploying repo is after the customer can already see it.
140
+ This was the gap that let everything else fail, and it is closed. Before it,
141
+ `merge.auto_drain: true` with `max_per_tick: 1` meant the daemon merged the
142
+ moment Test + Review + CI went green and the push to `main` fired production,
143
+ with **no per-repo, pre-merge operator hold anywhere in coord** — `coord pause`
144
+ only stops agent routing, and drive-queue's `--hold-after` (#1757) fires *after*
145
+ the merge, which for an auto-deploying repo is after the customer can already
146
+ see it.
133
147
 
134
- #2687 adds a `uat` gate ordered before `merge`, a
135
- `coord uat <id> --passed|--failed` verdict modelled on `coord test`, and — the
136
- part that decides whether it gets used or bypassed — **the preview URL surfaced
137
- in `coord status` and the TUI**, next to the command that clears the gate. A
138
- gate that makes the operator go hunting for the link will be routed around
139
- inside a week.
148
+ `coord merge` now refuses a PR whose UAT verdict is missing or failed, printing
149
+ the preview URL and the exact command to clear it:
150
+
151
+ ```
152
+ uat verdict missing — preview: <url> — run: coord uat <assignment-id> --passed
153
+ ```
154
+
155
+ **Enabling it is a two-part opt-in, and one half alone does nothing:**
156
+
157
+ ```yaml
158
+ pipeline:
159
+ default_gates: [test, review, uat, merge] # fleet-wide half — inert on its own
160
+ repos:
161
+ - name: natal-chart
162
+ uat_preview: "https://github.com/JDonaghy/natal-chart/pull/{pr_number}"
163
+ ```
164
+
165
+ `coord.merge_queue.requires_uat` demands **both**, so listing `uat` fleet-wide is
166
+ safe: a repo without `uat_preview` never blocks, no matter what `default_gates`
167
+ says. Clear the gate with `coord uat <assignment-id> --passed|--failed` (an
168
+ assignment id, not repo/issue) — modelled on `coord test`.
169
+
170
+ **Two follow-ups are open, and both matter before you enable this for a second
171
+ repo:**
172
+
173
+ - **#2948 — `uat_preview` cannot build a working Cloudflare URL.** The
174
+ `{pr_branch_slug}` placeholder assumes branch aliases that this project does
175
+ not publish (see §1). It renders a plausible dead link and
176
+ `resolve_uat_preview_url` never raises, so the failure is silent. natal-chart's
177
+ template therefore points at the **PR page**, whose timeline carries the live
178
+ `natal-chart (Preview)` deployment — one click from the real build, and it
179
+ cannot 404.
180
+ - **#2947 — `coord drive` does not classify the gate.** `_merge_gate_kind`
181
+ knows `smoke`/`review`/`unknown_head` and returns `None` for a uat block, so an
182
+ unattended drive spends its merge attempts blind and lands the drive-queue
183
+ entry in terminal `blocked` rather than parking. Until it lands, expect to
184
+ `remove` + `add` the queue entry after recording the verdict.
185
+
186
+ The part #2687 called the deciding one — **the preview URL surfaced in `coord
187
+ status` and the TUI**, next to the command that clears the gate — is what #2947
188
+ and #2948 between them still owe. A gate that makes the operator go hunting for
189
+ the link will be routed around inside a week.
140
190
 
141
191
  ### 3. Sign-off reaches the customer without you relaying it · **partially built**
142
192
 
@@ -148,12 +198,27 @@ explicitly out of scope for #2588 and never filed.
148
198
  Until it exists, step 3 is you, by hand, in the runbook below. That is fine at
149
199
  one customer and does not survive two.
150
200
 
151
- ### 4. Visual regression baselines · **NOT BUILT — natal-chart#47**
201
+ ### 4. Visual regression baselines · **shipped (natal-chart#47)**
152
202
 
153
203
  So the human is the *second* line of defence, not the first. Screenshot the
154
204
  core screens against a **fixed fixture** — one hardcoded chart, a frozen clock —
155
205
  and diff them in CI.
156
206
 
207
+ Built as Playwright screenshot specs in `packages/web/e2e/`, with committed
208
+ baselines beside each spec:
209
+
210
+ ```
211
+ packages/web/playwright.config.ts
212
+ packages/web/e2e/chart-wheel.spec.ts + chart-wheel.spec.ts-snapshots/chart-wheel-chromium-linux.png
213
+ packages/web/e2e/positions.spec.ts + positions.spec.ts-snapshots/positions-chromium-linux.png
214
+ packages/web/e2e/zr-tab.spec.ts + zr-tab.spec.ts-snapshots/zr-tab-chromium-linux.png
215
+ ```
216
+
217
+ **A deliberate restyle of a covered screen therefore fails CI until its baseline
218
+ is re-recorded, and that is the harness working.** Say so in the issue when you
219
+ file one — a worker that reads a red baseline diff as a defect will spend fix
220
+ rounds trying to restore the look you asked it to change.
221
+
157
222
  The honest caveat, worth stating because it is the trap: pixel diffing is flaky
158
223
  across font rendering and browser versions, and **font fallback is exactly the
159
224
  defect this is meant to catch**, so a tolerance loose enough to ignore font
@@ -206,33 +271,41 @@ the preview" is the control that already failed on 2026-08-23. This file
206
271
  documents a *mechanism*; where the mechanism does not exist yet it says so, in
207
272
  bold, with the issue number.
208
273
 
209
- ## The manual runbook — what to do until #2687 lands
210
-
211
- For a customer-facing repo, right now, with no gate to help you:
274
+ ## The runbook — a repo with the gate on
212
275
 
213
276
  1. **Queue the work as normal** (`coord drive-queue add`). Nothing special.
214
- 2. **Watch for the PR.** The work leg completing is your cue — the branch is
215
- pushed and the PR opens shortly after.
216
- 3. **Get the preview URL** with the two `gh api` calls in step 1 above. The URL
217
- does not exist the instant the PR opens; the preview build has to finish.
277
+ 2. **Wait for `coord merge` to refuse.** That refusal *is* the notification —
278
+ it names the gate, the preview link and the command. You are no longer racing
279
+ `auto_drain`; the merge cannot happen without your verdict.
280
+ 3. **Get the real preview URL** with the two `gh api` calls in §1. Until #2948
281
+ lands the gate's own link points at the PR, so in practice: open the PR and
282
+ click the `natal-chart (Preview)` deployment in its timeline. The URL does not
283
+ exist the instant the PR opens; the preview build has to finish.
218
284
  4. **Look at it yourself first.** Walk the screens the change touched. You will
219
285
  catch most of it here, and it costs a minute.
220
- 5. **Send the customer the URL** and wait for a yes.
221
- 6. **Then let it merge.**
222
-
223
- Step 6 is the weak one and you should know why: **you cannot reliably hold a
224
- merge today.** `auto_drain` will take the PR as soon as its gates are green,
225
- whether or not you have heard back. The available holds are all bad in
226
- different ways — draft the PR on GitHub (targeted, but strands the merge-queue
227
- entry in `NEEDS_ATTENTION`), or flip `merge.auto_drain: false` in
228
- `~/.coord/coordinator.remote.yml` (a hard guarantee that stalls auto-merge for
229
- every other repo in flight, and is easy to forget to switch back).
230
-
231
- **This is exactly why #2687 exists.** Until it lands, on a change where the
232
- customer's opinion genuinely gates the release, the honest options are to pick
233
- one of those two holds consciously, or to accept that the merge may win the
234
- race — as it did on 2026-08-24, when natal-chart#42 merged and deployed to
235
- production during the conversation about how to review it before it shipped.
286
+ 5. **Send the customer the URL** and wait for a yes. Through the portal, that is
287
+ `coord portal enqueue-preview <SUB-ID> <url>` then `coord portal
288
+ enqueue-status <SUB-ID> quality-check`, both on the daemon host, and her
289
+ answer arrives as a `preview.approved` / `preview.changes_requested` event
290
+ (`docs/CUSTOMER_PORTAL.md`).
291
+ 6. **Record the verdict and let it merge:** `coord uat <assignment-id> --passed`.
292
+
293
+ **What is still weak, and why.** Nothing auto-fires off `preview.approved` — it
294
+ is not wired into `coord merge` or the merge queue, so step 6 remains a
295
+ deliberate human act. And per #2947 an unattended drive will have burned its
296
+ merge attempts against the block and parked the queue entry in terminal
297
+ `blocked` by the time you get here, so expect a `remove` + `add` after recording
298
+ the verdict.
299
+
300
+ **For a repo with the gate off, you cannot reliably hold a merge at all.**
301
+ `auto_drain` takes the PR as soon as its gates are green, whether or not you
302
+ have heard back. The available holds are all bad in different ways — draft the
303
+ PR on GitHub (targeted, but strands the merge-queue entry in
304
+ `NEEDS_ATTENTION`), or flip `merge.auto_drain: false` (a hard guarantee that
305
+ stalls auto-merge for every other repo in flight, and is easy to forget to
306
+ switch back). That is what the gate replaces, and it is not hypothetical: on
307
+ 2026-08-24 natal-chart#42 merged and deployed to production *during the
308
+ conversation about how to review it before it shipped*.
236
309
 
237
310
  ## Adopting this for a new repo
238
311
 
@@ -242,7 +315,10 @@ production during the conversation about how to review it before it shipped.
242
315
  per-deploy hashes.
243
316
  3. Add the repo's visual-regression harness *before* the first customer-visible
244
317
  feature, not after the first complaint. Fixed fixture, frozen clock.
245
- 4. Turn on the `uat` gate for the repo once #2687 ships.
318
+ 4. Turn on the `uat` gate for the repo — the two-part opt-in in §2. Resolve its
319
+ `uat_preview` against a **real** deployment before you trust it (§1): a
320
+ template that renders a dead link is worse than no gate, because the operator
321
+ learns to waive it.
246
322
  5. Point the repo's own `CLAUDE.md` at this file, and make sure its deployment
247
323
  section is **true** — natal-chart's said "GitHub Pages" for a week after
248
324
  production moved to Cloudflare (fixed in #47).
@@ -169,11 +169,21 @@ cat > "$UNIT_DIR/coord-agent.service" << UNIT
169
169
  [Unit]
170
170
  Description=Coordinator agent server (port $PORT)
171
171
  After=network-online.target
172
+ # #2938: bound Restart=always below so a genuinely broken binary fails loud
173
+ # (systemd 'failed'/start-limit-hit) instead of crash-looping silently
174
+ # forever — see deploy/coord-agent.service's header for the full incident.
175
+ StartLimitIntervalSec=300
176
+ StartLimitBurst=5
172
177
 
173
178
  [Service]
174
179
  Type=simple
175
180
  ExecStart=$VENV_DIR/bin/coord agent --machine $MACHINE_NAME --port $PORT
176
- Restart=on-failure
181
+ # #2938: was Restart=on-failure. POST /update stops this process cleanly so
182
+ # it can come back on the swapped venv via an explicit self-restart
183
+ # (coord/agent_app.py); if that explicit restart is ever lost, on-failure
184
+ # never fires for a clean exit and the unit is gone for good, port 7433
185
+ # refused, no remote-control channel left. Restart=always is the backstop.
186
+ Restart=always
177
187
  RestartSec=5
178
188
  # #1671: include ~/.cargo/bin so a rustup-installed toolchain resolves to
179
189
  # both this agent process (the "rust" capability probe, coord/prereqs.py)