code-coordinator 0.5.296__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.296 → code_coordinator-0.5.298}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agent.py +59 -0
  7. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-agent.service +27 -2
  8. {code_coordinator-0.5.296 → code_coordinator-0.5.298/coord}/deploy/coord-serve.service +14 -2
  9. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-web.service +14 -1
  10. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-agent.service +27 -2
  11. {code_coordinator-0.5.296/coord → code_coordinator-0.5.298}/deploy/coord-serve.service +14 -2
  12. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-web.service +14 -1
  13. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/CUSTOMER_FACING_APPS.md +118 -42
  14. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/install-agent.sh +54 -6
  15. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-test-runner.sh +20 -2
  16. code_coordinator-0.5.298/tests/test_coord_test_runner_acceptance_toolchain_2936.py +181 -0
  17. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worker_env_venv_isolation.py +87 -0
  18. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/.gitignore +0 -0
  31. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/GOAL.md +0 -0
  33. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/LICENSE +0 -0
  34. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/README.md +0 -0
  36. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/approved_work.py +0 -0
  50. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/board_schema.py +0 -0
  54. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/client.py +0 -0
  67. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/gate_a.py +0 -0
  78. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/gates.py +0 -0
  79. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/issues.py +0 -0
  80. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/lifecycle.py +0 -0
  81. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/machine.py +0 -0
  82. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/pr.py +0 -0
  88. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/release.py +0 -0
  89. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/repo.py +0 -0
  90. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/report.py +0 -0
  91. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/review.py +0 -0
  92. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/scorecard.py +0 -0
  93. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/sessions.py +0 -0
  94. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/setup.py +0 -0
  95. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/status.py +0 -0
  96. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/store_migrate.py +0 -0
  97. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/terminal.py +0 -0
  98. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/test_gate.py +0 -0
  99. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/commands/tui.py +0 -0
  100. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/comments.py +0 -0
  101. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/config.py +0 -0
  102. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/config_reload.py +0 -0
  103. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/confirm_test.py +0 -0
  104. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/db.py +0 -0
  112. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/decomposition_chat.py +0 -0
  114. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/README.md +0 -0
  115. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.service +0 -0
  116. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.sh +0 -0
  117. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-db-backup.timer +0 -0
  118. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-drive-queue.service +0 -0
  119. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-drive-queue.timer +0 -0
  120. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-failure-notify.service +0 -0
  121. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-fleet-watchdog.service +0 -0
  122. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  123. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-notify.service +0 -0
  124. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-notify.timer +0 -0
  125. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-release-propagate.service +0 -0
  126. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-release-propagate.timer +0 -0
  127. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-release-window.service +0 -0
  128. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-release-window.timer +0 -0
  129. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-web-dist-build.service +0 -0
  130. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy/coord-web-dist-build.timer +0 -0
  131. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy_manifest.py +0 -0
  132. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deploy_units.py +0 -0
  133. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deprecation_telemetry.py +0 -0
  134. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/deps.py +0 -0
  135. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/diagnose.py +0 -0
  136. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dispatch.py +0 -0
  137. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/dist_name.py +0 -0
  138. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/drive.py +0 -0
  139. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/drive_queue.py +0 -0
  140. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/drive_state.py +0 -0
  141. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/events.py +0 -0
  142. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/failure_class.py +0 -0
  143. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/filelock.py +0 -0
  144. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/fleet_config_health.py +0 -0
  145. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/forge_availability.py +0 -0
  146. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/freshness.py +0 -0
  147. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/gate_a.py +0 -0
  148. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/gate_b.py +0 -0
  149. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/gate_snapshot.py +0 -0
  150. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/gates.py +0 -0
  151. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/github_ops.py +0 -0
  152. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/github_throttle.py +0 -0
  153. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/goal.py +0 -0
  154. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/graph_health.py +0 -0
  155. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/__init__.py +0 -0
  156. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/aggregate.py +0 -0
  157. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/__init__.py +0 -0
  158. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/agent_install.py +0 -0
  159. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/cargo_targets.py +0 -0
  160. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/claude_binary.py +0 -0
  161. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/coord_web_ci_pin.py +0 -0
  162. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/deploy_lane_facts.py +0 -0
  163. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/disk.py +0 -0
  164. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/fleet_board.py +0 -0
  165. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  166. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/fleet_phantom.py +0 -0
  167. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/fleet_unit_drift.py +0 -0
  168. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/graph.py +0 -0
  169. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/graphify_cli.py +0 -0
  170. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/index_lock.py +0 -0
  171. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/issues_sync_staleness.py +0 -0
  172. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/plan_usage.py +0 -0
  173. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/release_cordon.py +0 -0
  174. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/stalled_pipeline.py +0 -0
  177. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/timer_active.py +0 -0
  178. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/toolchain.py +0 -0
  179. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/unit_drift.py +0 -0
  180. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/unit_enablement.py +0 -0
  181. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/checks/worktrees.py +0 -0
  182. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/cli.py +0 -0
  183. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/context.py +0 -0
  184. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/fleet_snapshot.py +0 -0
  185. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/models.py +0 -0
  186. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/pypi.py +0 -0
  187. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/registry.py +0 -0
  188. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/render.py +0 -0
  189. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/health/units.py +0 -0
  190. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/hooks.py +0 -0
  191. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/housekeeping.py +0 -0
  192. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/interactive.py +0 -0
  193. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/issue_store.py +0 -0
  194. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/issues_sync_status.py +0 -0
  195. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/liveness_auditor.py +0 -0
  196. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/machine_onboard.py +0 -0
  197. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/machine_pause.py +0 -0
  198. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/merge_queue.py +0 -0
  199. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/milestone_chat.py +0 -0
  200. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/milestone_dispatch.py +0 -0
  201. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/milestone_gate.py +0 -0
  202. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/milestone_order.py +0 -0
  203. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/mock_author.py +0 -0
  204. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/models.py +0 -0
  205. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/network.py +0 -0
  206. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/new_issue_chat.py +0 -0
  207. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/__init__.py +0 -0
  208. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/baseline.py +0 -0
  209. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/cli.py +0 -0
  210. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/collect.py +0 -0
  211. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/digest.py +0 -0
  212. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/models.py +0 -0
  213. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/predicate.py +0 -0
  214. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/service.py +0 -0
  215. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/store.py +0 -0
  216. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notifier/transport.py +0 -0
  217. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/notify.py +0 -0
  218. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/openapi.py +0 -0
  219. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/overlap_fence.py +0 -0
  220. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/overlap_predict.py +0 -0
  221. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/parentage.py +0 -0
  222. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/parentage_github.py +0 -0
  223. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/pipeline.py +0 -0
  224. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/plan_parser.py +0 -0
  225. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/plans.py +0 -0
  226. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/platform_paths.py +0 -0
  227. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/portal_bridge.py +0 -0
  228. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/portal_store.py +0 -0
  229. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/portal_sync.py +0 -0
  230. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/pr_body_lint.py +0 -0
  231. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/prereqs.py +0 -0
  232. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/progress.py +0 -0
  233. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/providers/__init__.py +0 -0
  234. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/providers/base.py +0 -0
  235. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/providers/claude.py +0 -0
  236. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/providers/claude_pty.py +0 -0
  237. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/providers/opencode.py +0 -0
  238. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/queue_diagnose.py +0 -0
  239. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/reconcile.py +0 -0
  240. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/reconcile_tick.py +0 -0
  241. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/refine_chat.py +0 -0
  242. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/release_cordon.py +0 -0
  243. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/release_propagate.py +0 -0
  244. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/release_verify.py +0 -0
  245. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/release_window.py +0 -0
  246. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/repo_edit.py +0 -0
  247. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/repo_onboard.py +0 -0
  248. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/reports.py +0 -0
  249. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/rest_schema.py +0 -0
  250. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/revalidate.py +0 -0
  251. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/review.py +0 -0
  252. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/scorecard.py +0 -0
  253. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/self_health.py +0 -0
  254. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/serve_app.py +0 -0
  255. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  256. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  257. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  258. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/portal-followup/SKILL.md +0 -0
  261. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/release-now/SKILL.md +0 -0
  262. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  263. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  264. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/skills/update-issue/SKILL.md +0 -0
  265. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/smoke.py +0 -0
  266. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/spend_ceiling.py +0 -0
  267. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/split_work.py +0 -0
  268. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/sql.py +0 -0
  269. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/stage_projection.py +0 -0
  270. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/state.py +0 -0
  271. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/store_migrate.py +0 -0
  272. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/test_author.py +0 -0
  273. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/test_chat.py +0 -0
  274. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/test_orchestrator.py +0 -0
  275. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/test_report.py +0 -0
  276. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/tui_release.py +0 -0
  277. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/usage.py +0 -0
  278. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/usage_limits.py +0 -0
  279. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/usage_rollup.py +0 -0
  280. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coord/worker_events.py +0 -0
  281. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/coordinator.example.yml +0 -0
  282. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-db-backup.service +0 -0
  283. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-db-backup.sh +0 -0
  284. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-db-backup.timer +0 -0
  285. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-drive-queue.service +0 -0
  286. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-drive-queue.timer +0 -0
  287. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-failure-notify.service +0 -0
  288. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-failure-notify.sh +0 -0
  289. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-fleet-watchdog.service +0 -0
  290. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-fleet-watchdog.timer +0 -0
  291. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-notify.service +0 -0
  292. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-notify.timer +0 -0
  293. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-release-propagate.service +0 -0
  294. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-release-propagate.timer +0 -0
  295. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-release-window.service +0 -0
  296. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-release-window.timer +0 -0
  297. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.service +0 -0
  298. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.sh +0 -0
  299. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-web-dist-build.timer +0 -0
  300. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/coord-web-rollback.sh +0 -0
  301. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/deploy/node-shim.sh +0 -0
  302. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ADR_COORD_TUI_CI.md +0 -0
  303. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  304. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_CI.md +0 -0
  305. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ADR_COORD_WEB_DIST.md +0 -0
  306. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/AGENT_OPERATIONS.md +0 -0
  307. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ARCHITECTURE.md +0 -0
  308. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ARCH_SECURITY_GATES.md +0 -0
  309. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/COCKPIT.md +0 -0
  310. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/COST_DISCIPLINE.md +0 -0
  312. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/CROSS_PLATFORM.md +0 -0
  313. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/CUSTOMER_PORTAL.md +0 -0
  314. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/DRIVE_QUEUE.md +0 -0
  315. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/EPHEMERAL_WORKERS.md +0 -0
  316. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/FORGE_MIGRATION.md +0 -0
  317. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/GRAPHIFY_SETUP.md +0 -0
  318. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ISSUE_GUIDANCE.md +0 -0
  319. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/MAC_MINI.md +0 -0
  320. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  321. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/NOTIFIER.md +0 -0
  322. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/OPENCODE_VERIFICATION.md +0 -0
  323. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/OPERATING_GOTCHAS.md +0 -0
  324. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/OPERATOR_GUIDES.md +0 -0
  325. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/ORACLE_LOOP.md +0 -0
  326. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/PHONE_WEBAPP.md +0 -0
  327. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/PIPELINE_V2.md +0 -0
  328. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/PLATFORM_EVOLUTION.md +0 -0
  329. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/SECOND_BACKEND.md +0 -0
  330. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/STORE_SERVICE.md +0 -0
  331. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  332. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/WEB_CONTROL_CENTER.md +0 -0
  333. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/WSL_WINDOWS_WORKER.md +0 -0
  334. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/mocks/web/README.md +0 -0
  335. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/mocks/web/_tokens.css +0 -0
  336. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/mocks/web/issue-detail.html +0 -0
  337. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/mocks/web/pipeline-narrow.html +0 -0
  338. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/docs/mocks/web/pipeline-wide.html +0 -0
  339. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/graphify-out/.gitignore +0 -0
  340. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/pyproject.toml +0 -0
  341. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/audit_review_verdict_overrides.py +0 -0
  342. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  343. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/build-worker-image.sh +0 -0
  344. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/coordinator-machine.py +0 -0
  345. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/epic-down.sh +0 -0
  346. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/epic-up.sh +0 -0
  347. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/preflight.sh +0 -0
  348. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/provision-worker.sh +0 -0
  349. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  350. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  351. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/azure-workers/verify-github-token.sh +0 -0
  352. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/check_gh_argv_containment.py +0 -0
  353. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/codegen.py +0 -0
  354. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  355. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  356. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  357. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  358. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/coord-venv-rollback.sh +0 -0
  359. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/drive-batch.sh +0 -0
  360. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/extract-coord-tui.sh +0 -0
  361. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/fleet_watchdog.py +0 -0
  362. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/gen_board_fixture.py +0 -0
  363. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/gen_mock_index.py +0 -0
  364. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/next_release_tag.py +0 -0
  365. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/run_tests_in_populated_home.sh +0 -0
  366. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/run_tests_without_gh.sh +0 -0
  367. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/smoke_437_interactive.py +0 -0
  368. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/verify_878_review_capture.py +0 -0
  369. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/verify_release_published.py +0 -0
  370. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/scripts/verify_release_wheel.py +0 -0
  371. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/setup.cfg +0 -0
  372. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/SMOKE_SET.md +0 -0
  373. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/__init__.py +0 -0
  374. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-37/conftest.py +0 -0
  375. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-37/contract.md +0 -0
  376. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-37/manifest.yml +0 -0
  377. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  378. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  379. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/contract.md +0 -0
  380. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  381. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  382. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/manifest.yml +0 -0
  383. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-51/tsconfig.json +0 -0
  385. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  386. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/backends.py +0 -0
  387. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/conftest.py +0 -0
  388. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/board-pipeline-basic.json +0 -0
  389. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  390. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  391. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  392. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  393. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/all_pass.json +0 -0
  394. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  395. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/mixed_fail.json +0 -0
  396. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  397. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  398. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/skip.json +0 -0
  399. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/playwright/truncated.json +0 -0
  400. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  401. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  402. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  403. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  404. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  405. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  406. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  407. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_acceptance.py +0 -0
  409. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_acceptance_drivers.py +0 -0
  410. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent.py +0 -0
  411. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_api_error.py +0 -0
  412. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_app.py +0 -0
  413. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_branch_base.py +0 -0
  414. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_branch_capture.py +0 -0
  415. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_config_free_1712.py +0 -0
  416. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_deploy_units_endpoint.py +0 -0
  417. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_dirty_worktree.py +0 -0
  418. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  419. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_graph_self_heal.py +0 -0
  420. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_health_h3.py +0 -0
  421. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_idle_restart.py +0 -0
  422. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_push_failure.py +0 -0
  423. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_reap.py +0 -0
  424. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_repos_and_pull.py +0 -0
  425. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_restart_services_endpoint.py +0 -0
  426. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_skills_self_heal.py +0 -0
  427. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_startup_diagnostics.py +0 -0
  428. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_update.py +0 -0
  429. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_update_bluegreen.py +0 -0
  430. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_usage_limit.py +0 -0
  431. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_agent_zero_commit.py +0 -0
  432. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ambient_home_isolation.py +0 -0
  433. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_approve_dependency_busy_2804.py +0 -0
  434. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_approve_reject_plan.py +0 -0
  435. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_approve_usage_gate.py +0 -0
  436. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_approved_work_2532.py +0 -0
  437. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_assignment_already_recorded_daemon.py +0 -0
  438. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_audit_log.py +0 -0
  439. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_audit_outcome.py +0 -0
  440. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_audit_query.py +0 -0
  441. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_auto_loop.py +0 -0
  442. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_auto_release_publish_2035.py +0 -0
  443. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_backend_selection.py +0 -0
  444. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_base_checkout_restore.py +0 -0
  445. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_block_log.py +0 -0
  446. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_cap_762.py +0 -0
  447. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_fixture.py +0 -0
  448. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_read_path.py +0 -0
  449. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_schema.py +0 -0
  450. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_service.py +0 -0
  451. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_state.py +0 -0
  452. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_board_wire.py +0 -0
  453. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_brain.py +0 -0
  454. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_branch_model.py +0 -0
  455. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_bug_intake.py +0 -0
  456. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_build_worker_image_env_update.py +0 -0
  457. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cargo_cache.py +0 -0
  458. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_check_gh_argv_containment.py +0 -0
  459. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ci_acceptance_gate_1950.py +0 -0
  460. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ci_fix.py +0 -0
  461. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ci_gitlab.py +0 -0
  462. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ci_parity_2091.py +0 -0
  463. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_ci_store.py +0 -0
  464. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_claim.py +0 -0
  465. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_claude_md_budget.py +0 -0
  466. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_acceptance.py +0 -0
  467. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_assign.py +0 -0
  468. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  469. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_assign_interactive_remote.py +0 -0
  470. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_assign_provider.py +0 -0
  471. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  472. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_audit.py +0 -0
  473. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_chat_continue.py +0 -0
  474. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_decide.py +0 -0
  475. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_diagnose_config_provenance.py +0 -0
  476. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_diagnose_forge_availability.py +0 -0
  477. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_diagnose_graph.py +0 -0
  478. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_diagnose_self.py +0 -0
  479. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_doctor.py +0 -0
  480. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_doctor_config_free_1801.py +0 -0
  481. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  482. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_drive.py +0 -0
  483. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_drive_queue.py +0 -0
  484. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_escalate.py +0 -0
  485. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_fix_headless_review.py +0 -0
  486. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_gate_a.py +0 -0
  487. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_install_drift.py +0 -0
  488. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_install_skills.py +0 -0
  489. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_issue_comment.py +0 -0
  490. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_issue_create_label.py +0 -0
  491. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_issue_reopen.py +0 -0
  492. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_issue_view_list.py +0 -0
  493. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_merge.py +0 -0
  494. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_assign.py +0 -0
  495. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_capture.py +0 -0
  496. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_chat_add_child.py +0 -0
  497. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_dispatch.py +0 -0
  498. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_gate_b.py +0 -0
  499. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_gate_c.py +0 -0
  500. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_order.py +0 -0
  501. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  502. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_milestone_ship.py +0 -0
  503. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_network.py +0 -0
  504. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_new_issue_chat.py +0 -0
  505. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_plans.py +0 -0
  506. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_portal.py +0 -0
  507. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_pr.py +0 -0
  508. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_pull_artifact.py +0 -0
  509. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_queue.py +0 -0
  510. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_reattach_sessions.py +0 -0
  511. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_refine_board.py +0 -0
  512. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_release_preflight.py +0 -0
  513. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_release_propagate.py +0 -0
  514. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_release_window.py +0 -0
  515. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_repo_2220.py +0 -0
  516. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  517. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_scorecard.py +0 -0
  518. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_set_review_findings.py +0 -0
  519. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_advisory_terminal.py +0 -0
  520. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_contested_tag.py +0 -0
  521. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_merge_queue.py +0 -0
  522. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_provider.py +0 -0
  523. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_review_finalizing.py +0 -0
  524. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_test_failed_tag.py +0 -0
  525. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_status_usage_limit.py +0 -0
  526. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_sync_comments_873.py +0 -0
  527. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_test_plan.py +0 -0
  528. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_track.py +0 -0
  529. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_tui_update.py +0 -0
  530. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cli_wait.py +0 -0
  531. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_client_base_install.py +0 -0
  532. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_client_resource_migration_1946.py +0 -0
  533. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_commands_common.py +0 -0
  534. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_comments.py +0 -0
  535. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_completion_summary.py +0 -0
  536. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config.py +0 -0
  537. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config_acceptance.py +0 -0
  538. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config_audit.py +0 -0
  539. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config_pricing.py +0 -0
  540. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  541. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_config_usage_gate.py +0 -0
  542. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_confirm_test.py +0 -0
  543. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_conflict_fix.py +0 -0
  544. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_conflict_fix_semantic.py +0 -0
  545. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  546. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_test.py +0 -0
  547. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_test_runner_baseline.py +0 -0
  548. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_test_runner_populated_home.py +0 -0
  549. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_test_runner_routing.py +0 -0
  550. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_test_runner_toolchain.py +0 -0
  551. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_uat.py +0 -0
  552. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dao.py +0 -0
  556. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_decomposition_chat.py +0 -0
  563. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_coord_db_backup.py +0 -0
  564. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_coord_web_dist.py +0 -0
  565. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_coord_web_rollback.py +0 -0
  566. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_drive_queue_unit.py +0 -0
  567. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_failure_notify_unit.py +0 -0
  568. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_manifest.py +0 -0
  569. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_notify_unit.py +0 -0
  570. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_units_lane.py +0 -0
  571. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deploy_web_unit.py +0 -0
  572. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deprecation_telemetry.py +0 -0
  573. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_deps.py +0 -0
  574. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_diagnose.py +0 -0
  575. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dispatch.py +0 -0
  576. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dispatch_target_validation.py +0 -0
  577. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_dist_name.py +0 -0
  578. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_done_housekeeping.py +0 -0
  579. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive.py +0 -0
  580. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue.py +0 -0
  581. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue_blocked_rendering.py +0 -0
  582. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue_launch_argv.py +0 -0
  583. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  584. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue_roll_pending.py +0 -0
  585. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  586. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_state.py +0 -0
  587. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_drive_tmux.py +0 -0
  588. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_epic_up_capability_detection.py +0 -0
  589. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  590. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_epic_up_image_provenance.py +0 -0
  591. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_errors.py +0 -0
  592. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_events.py +0 -0
  593. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_failure_class.py +0 -0
  594. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_filelock.py +0 -0
  595. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  596. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_fix_of_force_override.py +0 -0
  597. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_fleet_config_health.py +0 -0
  598. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_fleet_health_probes.py +0 -0
  599. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_fleet_health_snapshot.py +0 -0
  600. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_fleet_watchdog.py +0 -0
  601. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_forge_availability.py +0 -0
  602. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_freshness.py +0 -0
  603. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gate_a.py +0 -0
  604. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gate_b.py +0 -0
  605. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gate_snapshot_staleness.py +0 -0
  606. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gates.py +0 -0
  607. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  608. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_gen_mock_index.py +0 -0
  609. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_generated_rust_fixture.py +0 -0
  610. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_generated_types_fixture.py +0 -0
  611. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_github_ops.py +0 -0
  612. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_github_throttle.py +0 -0
  613. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_goal.py +0 -0
  614. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_graph_health.py +0 -0
  615. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_graph_selfheal_absent_2237.py +0 -0
  616. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_handoff.py +0 -0
  617. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_checks.py +0 -0
  618. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_cli.py +0 -0
  619. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_cli_graph.py +0 -0
  620. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_config.py +0 -0
  621. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_context.py +0 -0
  622. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_coord_web_ci_pin.py +0 -0
  623. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_deploy_lane_facts.py +0 -0
  624. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_fix.py +0 -0
  625. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_incident_regression.py +0 -0
  626. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_issues_sync_staleness.py +0 -0
  627. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_pypi.py +0 -0
  628. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_registry.py +0 -0
  629. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_release_cordon_probe.py +0 -0
  630. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_timer_active.py +0 -0
  631. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_toolchain.py +0 -0
  632. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_unit_drift.py +0 -0
  633. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_health_unit_enablement.py +0 -0
  634. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_hooks.py +0 -0
  635. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_human_attended_437.py +0 -0
  636. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_init.py +0 -0
  637. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_install_agent_venv_2911.py +0 -0
  638. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_integration.py +0 -0
  639. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_briefing_echo.py +0 -0
  640. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_pane_log_2541.py +0 -0
  641. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_prefill_state.py +0 -0
  642. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_session_relaunch.py +0 -0
  643. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_test_verdict_backstop.py +0 -0
  644. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_token_attribution.py +0 -0
  645. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_interactive_worktree.py +0 -0
  646. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_issue_store_seam.py +0 -0
  647. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_issues_sync_status.py +0 -0
  648. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_liveness_auditor.py +0 -0
  649. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_liveness_notify.py +0 -0
  650. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_lock_contention_ratchet.py +0 -0
  651. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_machine_onboard.py +0 -0
  652. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_machine_pause.py +0 -0
  653. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_merge_queue.py +0 -0
  654. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_merge_verify.py +0 -0
  655. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_milestone_chat.py +0 -0
  656. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_milestone_dispatch.py +0 -0
  657. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_milestone_gate.py +0 -0
  658. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_milestone_order.py +0 -0
  659. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_milestone_seam.py +0 -0
  660. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_mock_author.py +0 -0
  661. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_model_tiering.py +0 -0
  662. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_models.py +0 -0
  663. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_models_config_labels.py +0 -0
  664. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_needs_attention.py +0 -0
  665. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_network.py +0 -0
  666. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_new_issue_chat.py +0 -0
  667. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_next_release_tag.py +0 -0
  668. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_node_shim.py +0 -0
  669. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_baseline.py +0 -0
  670. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_cli.py +0 -0
  671. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_collect.py +0 -0
  672. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_config.py +0 -0
  673. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_drive_seam.py +0 -0
  674. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_isolation.py +0 -0
  675. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_predicate.py +0 -0
  676. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_quiet_hours.py +0 -0
  677. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notifier_service.py +0 -0
  678. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notify.py +0 -0
  679. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_notify_drain.py +0 -0
  680. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_openapi.py +0 -0
  681. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_operational_defaults.py +0 -0
  682. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_overlap_fence.py +0 -0
  683. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_overlap_predict.py +0 -0
  684. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_packaged_deploy_units.py +0 -0
  685. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_parentage.py +0 -0
  686. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_paste_landed.py +0 -0
  687. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  688. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_pipeline.py +0 -0
  689. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_plan_followup_approve_plan_command.py +0 -0
  690. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_plan_followup_pr_command.py +0 -0
  691. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_plan_followup_review_command.py +0 -0
  692. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_plan_only.py +0 -0
  693. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_plan_parser.py +0 -0
  694. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_platform_paths.py +0 -0
  695. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_portal_bridge.py +0 -0
  696. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_portal_config.py +0 -0
  697. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_portal_store.py +0 -0
  698. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_portal_sync.py +0 -0
  699. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_pr_body_lint.py +0 -0
  700. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_prereqs.py +0 -0
  701. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_production_db_guard.py +0 -0
  702. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_progress.py +0 -0
  703. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_provider_seam.py +0 -0
  704. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_providers.py +0 -0
  705. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_providers_config_labels.py +0 -0
  706. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_providers_pty.py +0 -0
  707. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_quiet_hours.py +0 -0
  708. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_quiet_hours_store_2146.py +0 -0
  709. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reap_merged_sessions.py +0 -0
  710. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reap_stale_interactive_tick.py +0 -0
  711. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile.py +0 -0
  712. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_branch.py +0 -0
  713. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_completions.py +0 -0
  714. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  715. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_merges.py +0 -0
  716. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_no_agent_record.py +0 -0
  717. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_tick.py +0 -0
  718. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reconcile_usage_limit_done.py +0 -0
  719. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_refine_chat.py +0 -0
  720. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_cordon_2101.py +0 -0
  721. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  722. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_cordon_deadlock_2240.py +0 -0
  723. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_cordon_stuck_2490.py +0 -0
  724. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_propagate.py +0 -0
  725. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_propagate_threshold.py +0 -0
  726. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_roll_between_legs_2854.py +0 -0
  727. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_roll_window_handoff.py +0 -0
  728. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_unified_1242.py +0 -0
  729. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_verify.py +0 -0
  730. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_release_window.py +0 -0
  731. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_remote_auto_prune.py +0 -0
  732. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_remote_interactive_reaper.py +0 -0
  733. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_repo_add.py +0 -0
  734. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_repo_edit_2220.py +0 -0
  735. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_repo_graph_fleet_2237.py +0 -0
  736. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_repo_onboard_2220.py +0 -0
  737. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_report_result_push.py +0 -0
  738. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_reports.py +0 -0
  739. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_retry.py +0 -0
  740. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_retry_advisory_1606.py +0 -0
  741. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_retry_type_1636.py +0 -0
  742. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_revalidate.py +0 -0
  743. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review.py +0 -0
  744. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_end_review_without_verdict.py +0 -0
  745. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_parse_failure_diagnostic.py +0 -0
  746. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_reaffirm.py +0 -0
  747. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_state.py +0 -0
  748. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_verdict_backstop.py +0 -0
  749. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_verdict_override_audit.py +0 -0
  750. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_verdict_relay.py +0 -0
  751. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_review_zero_commits.py +0 -0
  752. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_scoped_review_wiring.py +0 -0
  753. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_scorecard.py +0 -0
  754. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_self_health.py +0 -0
  755. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_serve.py +0 -0
  756. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_serve_app_board_trim.py +0 -0
  757. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_serve_rest_routes.py +0 -0
  758. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_session.py +0 -0
  759. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_slice_issue_attribution.py +0 -0
  760. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_smoke.py +0 -0
  761. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_smoke_live_checkout_restore.py +0 -0
  762. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_smoke_workflow.py +0 -0
  763. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_spend_ceiling.py +0 -0
  764. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_spend_ceiling_coordinator.py +0 -0
  765. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_split.py +0 -0
  766. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_split_work.py +0 -0
  767. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_sql_dialect.py +0 -0
  768. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_sqlite_connect_ratchet.py +0 -0
  769. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stage_projection.py +0 -0
  770. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stale_busy_reviewer_697.py +0 -0
  771. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stalled_pipeline.py +0 -0
  772. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_state.py +0 -0
  773. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_state_review_findings_daemon.py +0 -0
  774. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_status_fleet_footer.py +0 -0
  775. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stop_1567.py +0 -0
  776. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_store_contract.py +0 -0
  777. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_store_migrate.py +0 -0
  778. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stuck.py +0 -0
  779. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  780. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_terminal_command.py +0 -0
  781. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_author.py +0 -0
  782. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_chat.py +0 -0
  783. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_orchestrator.py +0 -0
  784. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_report.py +0 -0
  785. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_verdict_parsing.py +0 -0
  786. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_test_verdict_transcript_floor.py +0 -0
  787. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_text_io_encoding_audit.py +0 -0
  788. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_thin_client_board_audit.py +0 -0
  789. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_thin_client_config_load_1080.py +0 -0
  790. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_thin_client_daemon_routing_906.py +0 -0
  791. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_tmux_host.py +0 -0
  792. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_tmux_session.py +0 -0
  793. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_transcript_floor.py +0 -0
  794. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_usage.py +0 -0
  795. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_usage_limits.py +0 -0
  796. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_usage_rollup.py +0 -0
  797. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_venv_live_install_2121.py +0 -0
  798. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_version_single_source.py +0 -0
  799. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_watch.py +0 -0
  800. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  801. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worker_events.py +0 -0
  802. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worker_image_pin_sync.py +0 -0
  803. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worker_safety.py +0 -0
  804. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worker_test_scoping.py +0 -0
  805. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worktree.py +0 -0
  806. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  807. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/test_write_parity.py +0 -0
  808. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tests/write_parity.py +0 -0
  809. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  810. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/contract.md +0 -0
  811. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  812. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  813. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  814. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  815. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  816. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/contract.md +0 -0
  817. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  818. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  819. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  820. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  821. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  822. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  823. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  824. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  825. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  826. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  827. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  828. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  829. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  830. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  831. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/contract.md +0 -0
  832. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  833. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  834. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  835. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  836. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  837. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  838. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  839. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  840. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  841. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  842. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  843. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  844. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  845. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  846. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/contract.md +0 -0
  847. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  848. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  849. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  850. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  851. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  852. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  853. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  854. {code_coordinator-0.5.296 → code_coordinator-0.5.298}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  855. {code_coordinator-0.5.296 → 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.296
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.296
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
@@ -508,6 +508,7 @@ tests/test_conflict_fix.py
508
508
  tests/test_conflict_fix_semantic.py
509
509
  tests/test_coord_log_daemon_fallback_2547.py
510
510
  tests/test_coord_test.py
511
+ tests/test_coord_test_runner_acceptance_toolchain_2936.py
511
512
  tests/test_coord_test_runner_baseline.py
512
513
  tests/test_coord_test_runner_populated_home.py
513
514
  tests/test_coord_test_runner_routing.py
@@ -534,6 +534,7 @@
534
534
  "tests/test_conflict_fix_semantic.py",
535
535
  "tests/test_coord_log_daemon_fallback_2547.py",
536
536
  "tests/test_coord_test.py",
537
+ "tests/test_coord_test_runner_acceptance_toolchain_2936.py",
537
538
  "tests/test_coord_test_runner_baseline.py",
538
539
  "tests/test_coord_test_runner_populated_home.py",
539
540
  "tests/test_coord_test_runner_routing.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.296",
2
+ "tag": "0.5.298",
3
3
  "distance": 0,
4
- "node": "ga711fc248f5a8207d97fdc8ec5709d04beb8f505",
4
+ "node": "gaa327b0f6d037fbb6df6db3ef4dd15e123624825",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -1742,6 +1742,53 @@ def _worker_subprocess_env(
1742
1742
  return env
1743
1743
 
1744
1744
 
1745
+ def worker_coord_reachable(base_env: dict[str, str] | None = None) -> tuple[bool, str]:
1746
+ """#2936: does ``coord`` resolve on a WORKER's PATH — not this agent
1747
+ process's own?
1748
+
1749
+ Built on the exact env a real worker is spawned into
1750
+ (:func:`_worker_subprocess_env`, whose #402/#2569 strip removes the
1751
+ fleet's pinned ``~/.coord-venv/bin`` from PATH). A worker that cannot
1752
+ resolve ``coord`` can run its entire suite, PASS, and be structurally
1753
+ unable to record that verdict (``coord test <id> --passed``) — the
1754
+ missing verdict then reads as a TEST FAILURE and walks the
1755
+ ``models.escalation`` ladder, re-dispatching already-correct work on a
1756
+ more expensive model for a PATH gap, not a weak one (#2897 cost one
1757
+ instance of this an extra opus rerun on top of an already-passing
1758
+ sonnet leg).
1759
+
1760
+ Before this, the gap was discovered only when a smoke worker's own
1761
+ final-turn transcript happened to mention it (as #2897's did) — this
1762
+ function exists so the agent can say so ITSELF, at startup, in
1763
+ ``journalctl --user -u coord-agent``, mirroring #1671's PATH diagnostics
1764
+ for capability probes.
1765
+
1766
+ Returns ``(ok, message)`` rather than logging directly, so the check is
1767
+ testable with a synthetic *base_env* with no mocking of ``shutil.which``
1768
+ or the logging module required. ``base_env=None`` (the production
1769
+ default) resolves against this process's real ``os.environ``, exactly
1770
+ like :func:`_worker_subprocess_env` itself.
1771
+ """
1772
+ worker_path = _worker_subprocess_env(base_env).get("PATH", "")
1773
+ resolved = shutil.which("coord", path=worker_path)
1774
+ if resolved:
1775
+ return True, (
1776
+ f"coord agent: worker PATH check OK — 'coord' resolves at {resolved} "
1777
+ "(a smoke/test worker on this machine can record its verdict, #2936)"
1778
+ )
1779
+ return False, (
1780
+ "coord agent: WARNING 'coord' does NOT resolve on a WORKER's PATH — "
1781
+ f"searched: {worker_path!r}. A smoke/test worker on this machine can "
1782
+ "run its whole suite, PASS, and be structurally unable to record the "
1783
+ "verdict via `coord test <id> --passed`; the missing verdict then "
1784
+ "reads as a TEST FAILURE and escalates the model for an "
1785
+ "infrastructure gap, not a weak one (#2936). Fix: re-run "
1786
+ "install-agent.sh on this machine so ~/.local/bin/coord exists and "
1787
+ "symlinks to $HOME/.coord-venv/bin/coord (the blue/green symlink "
1788
+ "itself, never a resolved .blue/.green path)."
1789
+ )
1790
+
1791
+
1745
1792
  def _slugify(text: str, max_len: int = 40) -> str:
1746
1793
  """Convert *text* to a URL/branch-safe slug."""
1747
1794
  slug = re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
@@ -5444,6 +5491,18 @@ class AgentServer:
5444
5491
  self.log_dir.mkdir(parents=True, exist_ok=True)
5445
5492
  self._load_state()
5446
5493
 
5494
+ # #2936: verify AT STARTUP — not a suite-run later — that a worker
5495
+ # this agent spawns will be able to resolve `coord` on its own PATH
5496
+ # to record a test/smoke verdict. Only the failure case is logged:
5497
+ # this file configures no logging handler of its own (`coord agent`
5498
+ # never calls `configure_daemon_logging`, unlike `coord serve` —
5499
+ # #2862), so a bare `_log.info` here would be a silent no-op on the
5500
+ # real daemon while `_log.warning` reaches `journalctl` via Python's
5501
+ # stderr handler-of-last-resort with zero configuration needed.
5502
+ _coord_reachable, _coord_reachable_msg = worker_coord_reachable()
5503
+ if not _coord_reachable:
5504
+ _log.warning(_coord_reachable_msg)
5505
+
5447
5506
  # ── #2299: hot config reload ────────────────────────────────────────────
5448
5507
 
5449
5508
  #: Config-derived state that a reload refreshes, versus the state it must
@@ -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).
@@ -109,14 +109,52 @@ echo "Installed: $("$VENV_DIR/bin/coord" version)"
109
109
 
110
110
  # The venv is now fully installed and verified working (coord version printed
111
111
  # above). Disarm the cleanup trap here: everything from this point on
112
- # (machine-name detection, the systemd unit, node shims, systemctl,
113
- # loginctl) is unrelated to venv creation, and a failure in any of it must
114
- # NOT delete a venv that already works — that would poison the retry with a
115
- # from-scratch pip re-install just to get back to the same later failure
116
- # (#2911 review).
112
+ # (machine-name detection, the systemd unit, the coord CLI shim, node shims,
113
+ # systemctl, loginctl) is unrelated to venv creation, and a failure in any of
114
+ # it must NOT delete a venv that already works — that would poison the retry
115
+ # with a from-scratch pip re-install just to get back to the same later
116
+ # failure (#2911 review).
117
117
  trap - EXIT
118
118
  CREATED_VENV=0
119
119
 
120
+ # --- coord CLI shim (#2936) --------------------------------------------------
121
+ # Workers are spawned with THIS agent's own venv stripped from PATH (#402,
122
+ # hardened by #2569's PIP_REQUIRE_VIRTUALENV after an 11h fleet outage — see
123
+ # coord/agent.py's `_worker_subprocess_env`). That strip is correct and must
124
+ # stay: a worker's bare `pip install -e .` must never land in the fleet's
125
+ # live $VENV_DIR. But nothing else guarantees a worker's PATH resolves
126
+ # `coord` itself — and when it doesn't, a smoke/test worker can run its
127
+ # whole suite, pass, and be structurally unable to record the verdict via
128
+ # `coord test <id> --passed`. The missing verdict then reads as a TEST
129
+ # FAILURE and walks the model-escalation ladder for an infrastructure gap,
130
+ # never a weak model (#2936; one instance cost an extra opus rerun of an
131
+ # already-passing sonnet leg).
132
+ #
133
+ # $HOME/.local/bin is (a) already put on the coord-agent unit's PATH below
134
+ # and (b) NOT stripped from a worker's PATH — #2569's strip matches
135
+ # $VENV_DIR/bin by name/realpath only, never $HOME/.local/bin. A plain
136
+ # symlink there closes the gap for every worker this agent spawns.
137
+ #
138
+ # MUST point at $VENV_DIR itself — the blue/green symlink `coord agent
139
+ # update` repoints atomically on every release (docs/AGENT_OPERATIONS.md) —
140
+ # NOT at a `readlink -f`-resolved `.blue`/`.green` path. Resolving it here
141
+ # would freeze the shim on whichever side happens to be live at install
142
+ # time and silently go stale on the very next blue/green swap.
143
+ COORD_SHIM_DIR="$HOME/.local/bin"
144
+ COORD_SHIM_TARGET="$VENV_DIR/bin/coord"
145
+ COORD_SHIM_LINK="$COORD_SHIM_DIR/coord"
146
+ mkdir -p "$COORD_SHIM_DIR"
147
+ if [ -L "$COORD_SHIM_LINK" ] && [ "$(readlink "$COORD_SHIM_LINK")" = "$COORD_SHIM_TARGET" ]; then
148
+ : # already ours, and already pointed at the unresolved blue/green symlink
149
+ elif [ -e "$COORD_SHIM_LINK" ] || [ -L "$COORD_SHIM_LINK" ]; then
150
+ echo "warning: $COORD_SHIM_LINK exists and is not the coord shim — left as-is"
151
+ echo " A smoke/test worker on this machine cannot record its verdict via"
152
+ echo " 'coord test <id> --passed' unless 'coord' resolves on ITS PATH (#2936)."
153
+ else
154
+ ln -s "$COORD_SHIM_TARGET" "$COORD_SHIM_LINK"
155
+ echo "Installed coord shim: $COORD_SHIM_LINK -> $COORD_SHIM_TARGET"
156
+ fi
157
+
120
158
  # Detect machine name if not provided
121
159
  if [ -z "$MACHINE_NAME" ]; then
122
160
  MACHINE_NAME=$(hostname -s)
@@ -131,11 +169,21 @@ cat > "$UNIT_DIR/coord-agent.service" << UNIT
131
169
  [Unit]
132
170
  Description=Coordinator agent server (port $PORT)
133
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
134
177
 
135
178
  [Service]
136
179
  Type=simple
137
180
  ExecStart=$VENV_DIR/bin/coord agent --machine $MACHINE_NAME --port $PORT
138
- 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
139
187
  RestartSec=5
140
188
  # #1671: include ~/.cargo/bin so a rustup-installed toolchain resolves to
141
189
  # both this agent process (the "rust" capability probe, coord/prereqs.py)