code-coordinator 0.5.306__tar.gz → 0.5.308__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 (818) hide show
  1. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/status.py +44 -0
  7. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dispatch.py +9 -4
  8. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/fleet_config_health.py +164 -0
  9. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/models.py +44 -0
  10. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/review.py +58 -0
  11. code_coordinator-0.5.308/tests/test_cli_diagnose_test_coverage.py +153 -0
  12. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dispatch.py +31 -2
  13. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_config_health.py +163 -1
  14. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_models.py +41 -0
  15. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_operational_defaults.py +6 -2
  16. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review.py +110 -0
  17. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/board.md +0 -0
  18. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/complete-session.md +0 -0
  19. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/coordinator.md +0 -0
  20. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/_lib.sh +0 -0
  21. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-checkout +0 -0
  22. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-commit +0 -0
  23. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-merge +0 -0
  24. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/coord-ci-acceptance.yml +0 -0
  26. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/auto-release.yml +0 -0
  27. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/publish.yml +0 -0
  28. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/test.yml +0 -0
  29. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.gitignore +0 -0
  30. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/GOAL.md +0 -0
  32. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/LICENSE +0 -0
  33. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/README.md +0 -0
  35. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/acceptance_drivers.py +0 -0
  43. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent.py +0 -0
  44. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/approved_work.py +0 -0
  50. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/audit.py +0 -0
  51. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/auto_loop.py +0 -0
  52. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_schema.py +0 -0
  54. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/client.py +0 -0
  67. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/gate_a.py +0 -0
  78. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/gates.py +0 -0
  79. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/issues.py +0 -0
  80. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/lifecycle.py +0 -0
  81. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/machine.py +0 -0
  82. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/pr.py +0 -0
  88. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/release.py +0 -0
  89. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/repo.py +0 -0
  90. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/report.py +0 -0
  91. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/review.py +0 -0
  92. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/scorecard.py +0 -0
  93. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/sessions.py +0 -0
  94. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/setup.py +0 -0
  95. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/config.py +0 -0
  101. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/db.py +0 -0
  111. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dead_end.py +0 -0
  112. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/decomposition_chat.py +0 -0
  113. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/README.md +0 -0
  114. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-agent.service +0 -0
  115. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.service +0 -0
  116. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.sh +0 -0
  117. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.timer +0 -0
  118. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-drive-queue.service +0 -0
  119. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-drive-queue.timer +0 -0
  120. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-failure-notify.service +0 -0
  121. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-fleet-watchdog.service +0 -0
  122. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  123. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-notify.service +0 -0
  124. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-notify.timer +0 -0
  125. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-propagate.service +0 -0
  126. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-propagate.timer +0 -0
  127. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-window.service +0 -0
  128. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-window.timer +0 -0
  129. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-serve.service +0 -0
  130. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web-dist-build.service +0 -0
  131. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web-dist-build.timer +0 -0
  132. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web.service +0 -0
  133. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy_manifest.py +0 -0
  134. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy_units.py +0 -0
  135. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deprecation_telemetry.py +0 -0
  136. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deps.py +0 -0
  137. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/diagnose.py +0 -0
  138. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dist_name.py +0 -0
  139. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive.py +0 -0
  140. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive_queue.py +0 -0
  141. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive_state.py +0 -0
  142. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/events.py +0 -0
  143. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/failure_class.py +0 -0
  144. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/filelock.py +0 -0
  145. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/forge_availability.py +0 -0
  146. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/freshness.py +0 -0
  147. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_a.py +0 -0
  148. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_b.py +0 -0
  149. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_snapshot.py +0 -0
  150. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gates.py +0 -0
  151. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/github_ops.py +0 -0
  152. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/github_throttle.py +0 -0
  153. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/goal.py +0 -0
  154. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/graph_health.py +0 -0
  155. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/__init__.py +0 -0
  156. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/aggregate.py +0 -0
  157. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/__init__.py +0 -0
  158. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/_ci_pin.py +0 -0
  159. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/agent_install.py +0 -0
  160. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/cargo_targets.py +0 -0
  161. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/claude_binary.py +0 -0
  162. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  163. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/issues_sync_staleness.py +0 -0
  174. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/plan_usage.py +0 -0
  175. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/release_cordon.py +0 -0
  176. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/repo_state.py +0 -0
  177. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/spawned_coord.py +0 -0
  178. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/stalled_pipeline.py +0 -0
  179. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/timer_active.py +0 -0
  180. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/toolchain.py +0 -0
  181. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/unit_drift.py +0 -0
  182. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/unit_enablement.py +0 -0
  183. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/wedged_drive_queue.py +0 -0
  184. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/worktrees.py +0 -0
  185. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/cli.py +0 -0
  186. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/context.py +0 -0
  187. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/fleet_snapshot.py +0 -0
  188. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/models.py +0 -0
  189. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/pypi.py +0 -0
  190. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/registry.py +0 -0
  191. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/render.py +0 -0
  192. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/units.py +0 -0
  193. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/hooks.py +0 -0
  194. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/housekeeping.py +0 -0
  195. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/interactive.py +0 -0
  196. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/issue_store.py +0 -0
  197. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/issues_sync_status.py +0 -0
  198. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/liveness_auditor.py +0 -0
  199. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/machine_onboard.py +0 -0
  200. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/machine_pause.py +0 -0
  201. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/merge_queue.py +0 -0
  202. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_chat.py +0 -0
  203. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_dispatch.py +0 -0
  204. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_gate.py +0 -0
  205. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_order.py +0 -0
  206. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/mock_author.py +0 -0
  207. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/network.py +0 -0
  208. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/new_issue_chat.py +0 -0
  209. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/__init__.py +0 -0
  210. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/baseline.py +0 -0
  211. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/cli.py +0 -0
  212. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/collect.py +0 -0
  213. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/digest.py +0 -0
  214. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/models.py +0 -0
  215. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/predicate.py +0 -0
  216. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/service.py +0 -0
  217. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/store.py +0 -0
  218. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/transport.py +0 -0
  219. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notify.py +0 -0
  220. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/openapi.py +0 -0
  221. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/overlap_fence.py +0 -0
  222. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/overlap_predict.py +0 -0
  223. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/parentage.py +0 -0
  224. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/parentage_github.py +0 -0
  225. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/pipeline.py +0 -0
  226. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/plan_parser.py +0 -0
  227. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/plans.py +0 -0
  228. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/platform_paths.py +0 -0
  229. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_bridge.py +0 -0
  230. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_store.py +0 -0
  231. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_sync.py +0 -0
  232. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/pr_body_lint.py +0 -0
  233. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/prereqs.py +0 -0
  234. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/progress.py +0 -0
  235. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/__init__.py +0 -0
  236. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/base.py +0 -0
  237. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/claude.py +0 -0
  238. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/claude_pty.py +0 -0
  239. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/opencode.py +0 -0
  240. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/queue_diagnose.py +0 -0
  241. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reconcile.py +0 -0
  242. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reconcile_tick.py +0 -0
  243. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/refine_chat.py +0 -0
  244. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_cordon.py +0 -0
  245. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_propagate.py +0 -0
  246. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_verify.py +0 -0
  247. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_window.py +0 -0
  248. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/repo_edit.py +0 -0
  249. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/repo_onboard.py +0 -0
  250. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reports.py +0 -0
  251. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/rest_schema.py +0 -0
  252. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/revalidate.py +0 -0
  253. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/scorecard.py +0 -0
  254. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/self_health.py +0 -0
  255. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/serve_app.py +0 -0
  256. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  257. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  258. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  259. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  261. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/portal-followup/SKILL.md +0 -0
  262. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/release-now/SKILL.md +0 -0
  263. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  264. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  265. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/update-issue/SKILL.md +0 -0
  266. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/smoke.py +0 -0
  267. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/spend_ceiling.py +0 -0
  268. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/split_work.py +0 -0
  269. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/sql.py +0 -0
  270. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/stage_projection.py +0 -0
  271. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/state.py +0 -0
  272. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/store_migrate.py +0 -0
  273. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_author.py +0 -0
  274. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_chat.py +0 -0
  275. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_orchestrator.py +0 -0
  276. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_report.py +0 -0
  277. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/tui_release.py +0 -0
  278. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage.py +0 -0
  279. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage_limits.py +0 -0
  280. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage_rollup.py +0 -0
  281. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/worker_events.py +0 -0
  282. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coordinator.example.yml +0 -0
  283. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-agent.service +0 -0
  284. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.service +0 -0
  285. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.sh +0 -0
  286. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.timer +0 -0
  287. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-drive-queue.service +0 -0
  288. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-drive-queue.timer +0 -0
  289. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-failure-notify.service +0 -0
  290. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-failure-notify.sh +0 -0
  291. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-fleet-watchdog.service +0 -0
  292. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-fleet-watchdog.timer +0 -0
  293. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-notify.service +0 -0
  294. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-notify.timer +0 -0
  295. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-propagate.service +0 -0
  296. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-propagate.timer +0 -0
  297. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-window.service +0 -0
  298. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-window.timer +0 -0
  299. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-serve.service +0 -0
  300. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.service +0 -0
  301. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.sh +0 -0
  302. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.timer +0 -0
  303. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-rollback.sh +0 -0
  304. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web.service +0 -0
  305. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/node-shim.sh +0 -0
  306. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_TUI_CI.md +0 -0
  307. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  308. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_CI.md +0 -0
  309. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_DIST.md +0 -0
  310. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  311. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/AGENT_OPERATIONS.md +0 -0
  312. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ARCHITECTURE.md +0 -0
  313. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ARCH_SECURITY_GATES.md +0 -0
  314. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/COCKPIT.md +0 -0
  315. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CONTROL_CENTER.md +0 -0
  316. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/COST_DISCIPLINE.md +0 -0
  317. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CROSS_PLATFORM.md +0 -0
  318. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CUSTOMER_FACING_APPS.md +0 -0
  319. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CUSTOMER_PORTAL.md +0 -0
  320. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/DRIVE_QUEUE.md +0 -0
  321. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/EPHEMERAL_WORKERS.md +0 -0
  322. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/FORGE_MIGRATION.md +0 -0
  323. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/GRAPHIFY_SETUP.md +0 -0
  324. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ISSUE_GUIDANCE.md +0 -0
  325. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/MAC_MINI.md +0 -0
  326. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  327. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/NOTIFIER.md +0 -0
  328. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPENCODE_VERIFICATION.md +0 -0
  329. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPERATING_GOTCHAS.md +0 -0
  330. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPERATOR_GUIDES.md +0 -0
  331. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ORACLE_LOOP.md +0 -0
  332. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PHONE_WEBAPP.md +0 -0
  333. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PIPELINE_V2.md +0 -0
  334. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PLATFORM_EVOLUTION.md +0 -0
  335. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/SECOND_BACKEND.md +0 -0
  336. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/STORE_SERVICE.md +0 -0
  337. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  338. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/WEB_CONTROL_CENTER.md +0 -0
  339. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/WSL_WINDOWS_WORKER.md +0 -0
  340. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/README.md +0 -0
  341. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/_tokens.css +0 -0
  342. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/issue-detail.html +0 -0
  343. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/pipeline-narrow.html +0 -0
  344. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/pipeline-wide.html +0 -0
  345. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/graphify-out/.gitignore +0 -0
  346. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/install-agent.sh +0 -0
  347. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/pyproject.toml +0 -0
  348. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/audit_review_verdict_overrides.py +0 -0
  349. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  350. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/build-worker-image.sh +0 -0
  351. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/coordinator-machine.py +0 -0
  352. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/epic-down.sh +0 -0
  353. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/epic-up.sh +0 -0
  354. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/preflight.sh +0 -0
  355. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/provision-worker.sh +0 -0
  356. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  357. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  358. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/verify-github-token.sh +0 -0
  359. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/check_gh_argv_containment.py +0 -0
  360. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/codegen.py +0 -0
  361. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-test-runner.sh +0 -0
  362. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  363. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  364. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  365. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  366. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-venv-rollback.sh +0 -0
  367. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/drive-batch.sh +0 -0
  368. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/extract-coord-tui.sh +0 -0
  369. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/fleet_watchdog.py +0 -0
  370. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/gen_board_fixture.py +0 -0
  371. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/gen_mock_index.py +0 -0
  372. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/next_release_tag.py +0 -0
  373. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/run_tests_in_populated_home.sh +0 -0
  374. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/run_tests_without_gh.sh +0 -0
  375. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/smoke_437_interactive.py +0 -0
  376. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_878_review_capture.py +0 -0
  377. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_release_published.py +0 -0
  378. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_release_wheel.py +0 -0
  379. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/setup.cfg +0 -0
  380. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/SMOKE_SET.md +0 -0
  381. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/__init__.py +0 -0
  382. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/conftest.py +0 -0
  383. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/contract.md +0 -0
  384. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/manifest.yml +0 -0
  385. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  386. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  387. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/contract.md +0 -0
  388. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  389. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  390. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/manifest.yml +0 -0
  391. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/tsconfig.json +0 -0
  393. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  394. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/backends.py +0 -0
  395. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/conftest.py +0 -0
  396. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/board-pipeline-basic.json +0 -0
  397. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  398. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  399. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  400. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  401. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/all_pass.json +0 -0
  402. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  403. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/mixed_fail.json +0 -0
  404. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  405. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  406. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/skip.json +0 -0
  407. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/truncated.json +0 -0
  408. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  409. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  410. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  411. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  412. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  413. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  414. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  415. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  416. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_acceptance.py +0 -0
  417. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_acceptance_drivers.py +0 -0
  418. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent.py +0 -0
  419. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_api_error.py +0 -0
  420. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_app.py +0 -0
  421. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_branch_base.py +0 -0
  422. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_branch_capture.py +0 -0
  423. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_config_free_1712.py +0 -0
  424. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_deploy_units_endpoint.py +0 -0
  425. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_dirty_worktree.py +0 -0
  426. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  427. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_graph_self_heal.py +0 -0
  428. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_health_h3.py +0 -0
  429. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_idle_restart.py +0 -0
  430. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_push_failure.py +0 -0
  431. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_reap.py +0 -0
  432. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_repos_and_pull.py +0 -0
  433. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_restart_services_endpoint.py +0 -0
  434. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_skills_self_heal.py +0 -0
  435. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_startup_diagnostics.py +0 -0
  436. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_update.py +0 -0
  437. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_update_bluegreen.py +0 -0
  438. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_usage_limit.py +0 -0
  439. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_zero_commit.py +0 -0
  440. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ambient_home_isolation.py +0 -0
  441. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_dependency_busy_2804.py +0 -0
  442. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_reject_plan.py +0 -0
  443. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_usage_gate.py +0 -0
  444. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approved_work_2532.py +0 -0
  445. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_assignment_already_recorded_daemon.py +0 -0
  446. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_log.py +0 -0
  447. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_outcome.py +0 -0
  448. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_query.py +0 -0
  449. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_auto_loop.py +0 -0
  450. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_auto_release_publish_2035.py +0 -0
  451. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_backend_selection.py +0 -0
  452. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_base_checkout_restore.py +0 -0
  453. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_block_log.py +0 -0
  454. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_cap_762.py +0 -0
  455. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_fixture.py +0 -0
  456. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_read_path.py +0 -0
  457. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_schema.py +0 -0
  458. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_service.py +0 -0
  459. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_state.py +0 -0
  460. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_wire.py +0 -0
  461. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_brain.py +0 -0
  462. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_branch_model.py +0 -0
  463. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_bug_intake.py +0 -0
  464. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_build_worker_image_env_update.py +0 -0
  465. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cargo_cache.py +0 -0
  466. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_check_gh_argv_containment.py +0 -0
  467. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_acceptance_gate_1950.py +0 -0
  468. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_fix.py +0 -0
  469. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_gitlab.py +0 -0
  470. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_parity_2091.py +0 -0
  471. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_store.py +0 -0
  472. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_claim.py +0 -0
  473. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_claude_md_budget.py +0 -0
  474. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_acceptance.py +0 -0
  475. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign.py +0 -0
  476. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  477. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_interactive_remote.py +0 -0
  478. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_provider.py +0 -0
  479. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  480. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_audit.py +0 -0
  481. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_chat_continue.py +0 -0
  482. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_decide.py +0 -0
  483. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_capability_rules.py +0 -0
  484. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_config_provenance.py +0 -0
  485. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_forge_availability.py +0 -0
  486. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_graph.py +0 -0
  487. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_self.py +0 -0
  488. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor.py +0 -0
  489. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor_config_free_1801.py +0 -0
  490. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  491. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_drive.py +0 -0
  492. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_drive_queue.py +0 -0
  493. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_comment.py +0 -0
  499. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_create_label.py +0 -0
  500. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_reopen.py +0 -0
  501. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_view_list.py +0 -0
  502. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_merge.py +0 -0
  503. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_assign.py +0 -0
  504. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_capture.py +0 -0
  505. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_chat_add_child.py +0 -0
  506. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_dispatch.py +0 -0
  507. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_order.py +0 -0
  510. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  511. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_ship.py +0 -0
  512. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_network.py +0 -0
  513. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_new_issue_chat.py +0 -0
  514. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_plans.py +0 -0
  515. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_portal.py +0 -0
  516. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_pr.py +0 -0
  517. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_pull_artifact.py +0 -0
  518. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_queue.py +0 -0
  519. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_reattach_sessions.py +0 -0
  520. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_refine_board.py +0 -0
  521. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_preflight.py +0 -0
  522. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_propagate.py +0 -0
  523. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_window.py +0 -0
  524. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_repo_2220.py +0 -0
  525. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  526. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_scorecard.py +0 -0
  527. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_set_review_findings.py +0 -0
  528. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_advisory_terminal.py +0 -0
  529. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_contested_tag.py +0 -0
  530. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_merge_queue.py +0 -0
  531. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_provider.py +0 -0
  532. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_review_finalizing.py +0 -0
  533. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_test_failed_tag.py +0 -0
  534. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_usage_limit.py +0 -0
  535. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_sync_comments_873.py +0 -0
  536. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_test_plan.py +0 -0
  537. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_track.py +0 -0
  538. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_tui_update.py +0 -0
  539. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_wait.py +0 -0
  540. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_client_base_install.py +0 -0
  541. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_client_resource_migration_1946.py +0 -0
  542. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_commands_common.py +0 -0
  543. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_comments.py +0 -0
  544. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_completion_summary.py +0 -0
  545. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config.py +0 -0
  546. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_acceptance.py +0 -0
  547. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_audit.py +0 -0
  548. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_pricing.py +0 -0
  549. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  550. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_usage_gate.py +0 -0
  551. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_confirm_test.py +0 -0
  552. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_conflict_fix.py +0 -0
  553. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_conflict_fix_semantic.py +0 -0
  554. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  555. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test.py +0 -0
  556. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  557. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_baseline.py +0 -0
  558. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_populated_home.py +0 -0
  559. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_routing.py +0 -0
  560. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_toolchain.py +0 -0
  561. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_uat.py +0 -0
  562. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_web_sse_restart_live.py +0 -0
  563. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coordinator_machine.py +0 -0
  564. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cross_platform_imports.py +0 -0
  565. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dao.py +0 -0
  566. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard.py +0 -0
  567. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_fixture.py +0 -0
  568. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_terminal.py +0 -0
  569. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_terminal_live.py +0 -0
  570. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_db.py +0 -0
  571. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dead_end.py +0 -0
  572. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_decomposition_chat.py +0 -0
  573. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_db_backup.py +0 -0
  574. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_web_dist.py +0 -0
  575. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_web_rollback.py +0 -0
  576. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_drive_queue_unit.py +0 -0
  577. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_failure_notify_unit.py +0 -0
  578. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_manifest.py +0 -0
  579. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_notify_unit.py +0 -0
  580. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_units_lane.py +0 -0
  581. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_web_unit.py +0 -0
  582. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deprecation_telemetry.py +0 -0
  583. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deps.py +0 -0
  584. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_diagnose.py +0 -0
  585. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dispatch_target_validation.py +0 -0
  586. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dist_name.py +0 -0
  587. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_done_housekeeping.py +0 -0
  588. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive.py +0 -0
  589. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue.py +0 -0
  590. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_blocked_rendering.py +0 -0
  591. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_launch_argv.py +0 -0
  592. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  593. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_roll_pending.py +0 -0
  594. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  595. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_state.py +0 -0
  596. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_tmux.py +0 -0
  597. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_capability_detection.py +0 -0
  598. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  599. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_image_provenance.py +0 -0
  600. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_errors.py +0 -0
  601. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_events.py +0 -0
  602. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_failure_class.py +0 -0
  603. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_filelock.py +0 -0
  604. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  605. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fix_of_force_override.py +0 -0
  606. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_health_probes.py +0 -0
  607. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_health_snapshot.py +0 -0
  608. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_watchdog.py +0 -0
  609. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_forge_availability.py +0 -0
  610. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_freshness.py +0 -0
  611. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_a.py +0 -0
  612. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_b.py +0 -0
  613. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_snapshot_staleness.py +0 -0
  614. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gates.py +0 -0
  615. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  616. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gen_mock_index.py +0 -0
  617. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_rust_fixture.py +0 -0
  618. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_rust_requests.py +0 -0
  619. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_types_fixture.py +0 -0
  620. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_github_ops.py +0 -0
  621. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_github_throttle.py +0 -0
  622. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_graph_selfheal_absent_2237.py +0 -0
  625. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_coord_tui_ci_pin.py +0 -0
  632. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_coord_web_ci_pin.py +0 -0
  633. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_deploy_lane_facts.py +0 -0
  634. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_fix.py +0 -0
  635. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_incident_regression.py +0 -0
  636. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_issues_sync_staleness.py +0 -0
  637. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_pypi.py +0 -0
  638. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_registry.py +0 -0
  639. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_release_cordon_probe.py +0 -0
  640. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_timer_active.py +0 -0
  641. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_toolchain.py +0 -0
  642. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_unit_drift.py +0 -0
  643. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_unit_enablement.py +0 -0
  644. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_wedged_drive_queue.py +0 -0
  645. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_hooks.py +0 -0
  646. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_human_attended_437.py +0 -0
  647. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_init.py +0 -0
  648. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_install_agent_venv_2911.py +0 -0
  649. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_integration.py +0 -0
  650. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_briefing_echo.py +0 -0
  651. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_pane_log_2541.py +0 -0
  652. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_prefill_state.py +0 -0
  653. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_session_relaunch.py +0 -0
  654. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_test_verdict_backstop.py +0 -0
  655. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_token_attribution.py +0 -0
  656. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_worktree.py +0 -0
  657. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_issue_store_seam.py +0 -0
  658. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_issues_sync_status.py +0 -0
  659. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_liveness_auditor.py +0 -0
  660. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_liveness_notify.py +0 -0
  661. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_lock_contention_ratchet.py +0 -0
  662. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_machine_onboard.py +0 -0
  663. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_machine_pause.py +0 -0
  664. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_merge_queue.py +0 -0
  665. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_merge_verify.py +0 -0
  666. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_chat.py +0 -0
  667. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_dispatch.py +0 -0
  668. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_gate.py +0 -0
  669. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_order.py +0 -0
  670. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_seam.py +0 -0
  671. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_mock_author.py +0 -0
  672. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_model_tiering.py +0 -0
  673. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_models_config_labels.py +0 -0
  674. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_needs_attention.py +0 -0
  675. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_network.py +0 -0
  676. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_new_issue_chat.py +0 -0
  677. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_next_release_tag.py +0 -0
  678. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_node_shim.py +0 -0
  679. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_baseline.py +0 -0
  680. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_cli.py +0 -0
  681. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_collect.py +0 -0
  682. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_config.py +0 -0
  683. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_drive_seam.py +0 -0
  684. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_isolation.py +0 -0
  685. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_predicate.py +0 -0
  686. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_quiet_hours.py +0 -0
  687. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_service.py +0 -0
  688. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notify.py +0 -0
  689. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notify_drain.py +0 -0
  690. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_openapi.py +0 -0
  691. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_overlap_fence.py +0 -0
  692. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_overlap_predict.py +0 -0
  693. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_packaged_deploy_units.py +0 -0
  694. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_parentage.py +0 -0
  695. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_paste_landed.py +0 -0
  696. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  697. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_pipeline.py +0 -0
  698. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_approve_plan_command.py +0 -0
  699. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_pr_command.py +0 -0
  700. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_review_command.py +0 -0
  701. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_only.py +0 -0
  702. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_parser.py +0 -0
  703. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_platform_paths.py +0 -0
  704. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_bridge.py +0 -0
  705. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_config.py +0 -0
  706. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_store.py +0 -0
  707. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_sync.py +0 -0
  708. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_pr_body_lint.py +0 -0
  709. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_prereqs.py +0 -0
  710. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_production_db_guard.py +0 -0
  711. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_progress.py +0 -0
  712. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_provider_seam.py +0 -0
  713. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers.py +0 -0
  714. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers_config_labels.py +0 -0
  715. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers_pty.py +0 -0
  716. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_py_rust_mirror_inventory.py +0 -0
  717. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_quiet_hours.py +0 -0
  718. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_quiet_hours_store_2146.py +0 -0
  719. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reap_merged_sessions.py +0 -0
  720. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reap_stale_interactive_tick.py +0 -0
  721. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile.py +0 -0
  722. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_branch.py +0 -0
  723. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_completions.py +0 -0
  724. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  725. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_merges.py +0 -0
  726. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_no_agent_record.py +0 -0
  727. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_tick.py +0 -0
  728. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_usage_limit_done.py +0 -0
  729. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_refine_chat.py +0 -0
  730. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_2101.py +0 -0
  731. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  732. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_deadlock_2240.py +0 -0
  733. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_stuck_2490.py +0 -0
  734. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_propagate.py +0 -0
  735. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_propagate_threshold.py +0 -0
  736. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_roll_between_legs_2854.py +0 -0
  737. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_roll_window_handoff.py +0 -0
  738. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_unified_1242.py +0 -0
  739. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_verify.py +0 -0
  740. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_window.py +0 -0
  741. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_remote_auto_prune.py +0 -0
  742. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_remote_interactive_reaper.py +0 -0
  743. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_add.py +0 -0
  744. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_edit_2220.py +0 -0
  745. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_graph_fleet_2237.py +0 -0
  746. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_onboard_2220.py +0 -0
  747. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_report_result_push.py +0 -0
  748. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reports.py +0 -0
  749. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry.py +0 -0
  750. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry_advisory_1606.py +0 -0
  751. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry_type_1636.py +0 -0
  752. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_revalidate.py +0 -0
  753. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_end_review_without_verdict.py +0 -0
  754. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_parse_failure_diagnostic.py +0 -0
  755. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_reaffirm.py +0 -0
  756. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_state.py +0 -0
  757. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_backstop.py +0 -0
  758. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_override_audit.py +0 -0
  759. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_relay.py +0 -0
  760. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_zero_commits.py +0 -0
  761. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_scoped_review_wiring.py +0 -0
  762. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_scorecard.py +0 -0
  763. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_self_health.py +0 -0
  764. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve.py +0 -0
  765. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve_app_board_trim.py +0 -0
  766. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve_rest_routes.py +0 -0
  767. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_session.py +0 -0
  768. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_slice_issue_attribution.py +0 -0
  769. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke.py +0 -0
  770. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke_live_checkout_restore.py +0 -0
  771. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke_workflow.py +0 -0
  772. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_spend_ceiling.py +0 -0
  773. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_spend_ceiling_coordinator.py +0 -0
  774. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_split.py +0 -0
  775. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_split_work.py +0 -0
  776. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_sql_dialect.py +0 -0
  777. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_sqlite_connect_ratchet.py +0 -0
  778. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stage_projection.py +0 -0
  779. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stale_busy_reviewer_697.py +0 -0
  780. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stalled_pipeline.py +0 -0
  781. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_state.py +0 -0
  782. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_state_review_findings_daemon.py +0 -0
  783. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_status_fleet_footer.py +0 -0
  784. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stop_1567.py +0 -0
  785. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_store_contract.py +0 -0
  786. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_store_migrate.py +0 -0
  787. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stuck.py +0 -0
  788. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  789. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_terminal_command.py +0 -0
  790. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_author.py +0 -0
  791. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_chat.py +0 -0
  792. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_orchestrator.py +0 -0
  793. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_report.py +0 -0
  794. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_verdict_parsing.py +0 -0
  795. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_verdict_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_text_io_encoding_audit.py +0 -0
  797. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_board_audit.py +0 -0
  798. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_config_load_1080.py +0 -0
  799. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_daemon_routing_906.py +0 -0
  800. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_tmux_host.py +0 -0
  801. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_tmux_session.py +0 -0
  802. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_transcript_floor.py +0 -0
  803. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage.py +0 -0
  804. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage_limits.py +0 -0
  805. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage_rollup.py +0 -0
  806. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_venv_live_install_2121.py +0 -0
  807. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_version_single_source.py +0 -0
  808. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_watch.py +0 -0
  809. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  810. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_env_venv_isolation.py +0 -0
  811. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_events.py +0 -0
  812. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_image_pin_sync.py +0 -0
  813. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_safety.py +0 -0
  814. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_test_scoping.py +0 -0
  815. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worktree.py +0 -0
  816. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  817. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_write_parity.py +0 -0
  818. {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.306
3
+ Version: 0.5.308
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.306
3
+ Version: 0.5.308
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
@@ -445,6 +445,7 @@ tests/test_cli_diagnose_config_provenance.py
445
445
  tests/test_cli_diagnose_forge_availability.py
446
446
  tests/test_cli_diagnose_graph.py
447
447
  tests/test_cli_diagnose_self.py
448
+ tests/test_cli_diagnose_test_coverage.py
448
449
  tests/test_cli_doctor.py
449
450
  tests/test_cli_doctor_config_free_1801.py
450
451
  tests/test_cli_doctor_config_mismatch_1712.py
@@ -471,6 +471,7 @@
471
471
  "tests/test_cli_diagnose_forge_availability.py",
472
472
  "tests/test_cli_diagnose_graph.py",
473
473
  "tests/test_cli_diagnose_self.py",
474
+ "tests/test_cli_diagnose_test_coverage.py",
474
475
  "tests/test_cli_doctor.py",
475
476
  "tests/test_cli_doctor_config_free_1801.py",
476
477
  "tests/test_cli_doctor_config_mismatch_1712.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.306",
2
+ "tag": "0.5.308",
3
3
  "distance": 0,
4
- "node": "g3c4702ef295a9bb7fd88162d870354e73e905833",
4
+ "node": "gde30a174fcc1e82cb10b2f750bbe379e349de5e4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-30"
@@ -1921,6 +1921,21 @@ def _diagnose_via_daemon(svc, params: dict) -> None:
1921
1921
  "network required."
1922
1922
  ),
1923
1923
  )
1924
+ @click.option(
1925
+ "--test-coverage",
1926
+ "test_coverage_check",
1927
+ is_flag=True,
1928
+ help=(
1929
+ "#2967: report repos whose effective Test-stage command (same "
1930
+ "ci_command > smoke_tests.default_command > test_command precedence "
1931
+ "the Test gate itself uses) enables fewer cargo `--features` than "
1932
+ "the repo's build_command — e.g. quadraui building "
1933
+ "tui+gtk+terminal but testing only tui, so a `passed` verdict never "
1934
+ "compiled the gtk/terminal code. Repos with no explicit "
1935
+ "`--features` on either side are silently skipped (no signal). "
1936
+ "Read-only, no checkout or network required."
1937
+ ),
1938
+ )
1924
1939
  @click.option(
1925
1940
  "--self",
1926
1941
  "self_check",
@@ -1980,6 +1995,7 @@ def diagnose(
1980
1995
  graph_health: bool = False,
1981
1996
  config_provenance_check: bool = False,
1982
1997
  capability_rules_check: bool = False,
1998
+ test_coverage_check: bool = False,
1983
1999
  self_check: bool = False,
1984
2000
  self_no_fetch: bool = False,
1985
2001
  forge_availability: bool = False,
@@ -2006,6 +2022,11 @@ def diagnose(
2006
2022
  _diagnose_capability_rules(config_path)
2007
2023
  return
2008
2024
 
2025
+ # ── #2967: test_command feature-flag coverage vs build_command ──────────
2026
+ if test_coverage_check:
2027
+ _diagnose_test_coverage(config_path)
2028
+ return
2029
+
2009
2030
  # ── #2436: THIS process's own editable coord install freshness ──────────
2010
2031
  if self_check:
2011
2032
  _diagnose_self(fetch=not self_no_fetch)
@@ -2236,6 +2257,29 @@ def _diagnose_capability_rules(config_path: Path) -> None:
2236
2257
  click.echo(capability_rule_summary_line(findings, unclaimed))
2237
2258
 
2238
2259
 
2260
+ def _diagnose_test_coverage(config_path: Path) -> None:
2261
+ """Report repos whose effective Test-stage command enables fewer cargo
2262
+ ``--features`` than their ``build_command`` (#2967).
2263
+
2264
+ Read-only, local-machine only, same family as ``--capability-rules``.
2265
+ Unlike ``--capability-rules`` this needs no repo checkout at all — it's
2266
+ a pure comparison of two command strings already in ``coordinator.yml``
2267
+ — so it reports identically wherever it's run, including a thin client
2268
+ with no local checkouts (see ``coord/fleet_config_health.py``).
2269
+ """
2270
+ from coord.fleet_config_health import ( # noqa: PLC0415
2271
+ feature_coverage_findings,
2272
+ feature_coverage_summary_line,
2273
+ format_feature_coverage_lines,
2274
+ )
2275
+
2276
+ cfg = _load_config(config_path)
2277
+ findings = feature_coverage_findings(cfg)
2278
+ for line in format_feature_coverage_lines(findings):
2279
+ click.echo(f" {line}")
2280
+ click.echo(feature_coverage_summary_line(findings))
2281
+
2282
+
2239
2283
  def _diagnose_self(*, fetch: bool) -> None:
2240
2284
  """Report whether THIS process's own editable ``coord`` install is
2241
2285
  behind origin (#2436).
@@ -17,7 +17,7 @@ from coord.comments import (
17
17
  format_refused_policy,
18
18
  )
19
19
  from coord.config import Config
20
- from coord.models import Proposal, Repo
20
+ from coord.models import Proposal, Repo, coordinator_owned_docs
21
21
 
22
22
  AGENT_PORT = 7433
23
23
 
@@ -582,9 +582,14 @@ def dispatch(
582
582
  deny_commands = repo.worker_permissions.deny
583
583
 
584
584
  # Resolve coordinator-only files (workers must not read or modify these).
585
- files_forbidden: list[str] = []
586
- if repo is not None and repo.coordinator_only_files:
587
- files_forbidden = list(repo.coordinator_only_files)
585
+ # #2966: coordinator_only_files was set by zero repos fleet-wide, so this
586
+ # started empty for every work dispatch and only ever grew sealed
587
+ # acceptance paths below — never a doc. coordinator_owned_docs() unions
588
+ # in a fleet-wide default (the repo's own CLAUDE.md) regardless of
589
+ # whether coordinator_only_files is configured, so "only the coordinator
590
+ # writes docs" is enforced (advisory, like every non-oracle
591
+ # files_forbidden entry) without depending on 10 repos' worth of config.
592
+ files_forbidden: list[str] = coordinator_owned_docs(repo)
588
593
 
589
594
  # #944 sealing v1 (docs/ORACLE_LOOP.md): the acceptance oracle is
590
595
  # read-only/run-only for the worker — it's authored by an independent
@@ -57,6 +57,7 @@ precedent as :func:`config_provenance` applies per repo.
57
57
  from __future__ import annotations
58
58
 
59
59
  import os
60
+ import shlex
60
61
  import subprocess
61
62
  from dataclasses import dataclass, field
62
63
  from pathlib import Path
@@ -615,3 +616,166 @@ def capability_rule_summary_line(
615
616
  f"prefixes={len(findings)} dead={dead} partial={partial} "
616
617
  f"unclaimed_caps={len(unclaimed)}"
617
618
  )
619
+
620
+
621
+ # ── Test-command feature-flag coverage vs build_command (#2967) ─────────────
622
+ #
623
+ # quadraui is configured `test_command: cargo test --features tui` against
624
+ # `build_command: cargo build --features tui --features gtk --features
625
+ # terminal` — the Test gate never compiles `src/gtk/**` or the terminal
626
+ # backend, so a `passed` verdict on a change confined to either carries no
627
+ # information at all. Nothing previously compared the two commands; this is
628
+ # the same "config looks right in review but silently does less than it
629
+ # claims" shape as #2953's dead capability_rules prefixes, one seam over:
630
+ # there it was a `files` prefix matching nothing, here it's a `--features`
631
+ # flag the build enables that the effective Test-stage command never turns
632
+ # on. Pure string comparison against the already-loaded config — no local
633
+ # checkout required, so (unlike `capability_rule_health`) this runs the same
634
+ # everywhere, including a thin client with no repo checkouts at all.
635
+
636
+
637
+ def _cargo_features(command: str | None) -> set[str]:
638
+ """Every value named by a `--features`/`-F`/`--features=...` token in
639
+ *command*, comma- or space-separated, deduped.
640
+
641
+ Returns the empty set for a falsy, unparseable (unbalanced quoting), or
642
+ feature-less command — treated as "no feature-flag signal to compare",
643
+ never as a gap by itself. That is what keeps a plain `cargo build` /
644
+ `cargo test` pair (vimcode, coord-tui) and non-cargo commands (npm/pnpm
645
+ repos) out of the findings entirely: both sides parse to an empty set,
646
+ which is equal, not missing.
647
+ """
648
+ if not command:
649
+ return set()
650
+ try:
651
+ tokens = shlex.split(command)
652
+ except ValueError:
653
+ return set()
654
+ features: set[str] = set()
655
+ i = 0
656
+ while i < len(tokens):
657
+ tok = tokens[i]
658
+ value: str | None = None
659
+ if tok in ("--features", "-F"):
660
+ if i + 1 < len(tokens):
661
+ value = tokens[i + 1]
662
+ i += 1
663
+ elif tok.startswith("--features="):
664
+ value = tok[len("--features=") :]
665
+ if value is not None:
666
+ features.update(part for part in value.replace(",", " ").split() if part)
667
+ i += 1
668
+ return features
669
+
670
+
671
+ @dataclass
672
+ class FeatureCoverageFinding:
673
+ """Feature-flag coverage of one repo's effective Test-stage command
674
+ against its ``build_command`` (#2967).
675
+
676
+ ``effective_test_command``/``test_command_source``/``ci_equivalent``
677
+ mirror ``coord.smoke.resolve_smoke_command`` — the SAME precedence
678
+ (``ci_command`` > ``smoke_tests.default_command`` > ``test_command``)
679
+ the Test stage itself uses, so this reports on the command that will
680
+ actually gate the repo, not always the raw ``repos[].test_command``.
681
+ """
682
+
683
+ repo: str
684
+ build_command: str
685
+ effective_test_command: str | None
686
+ test_command_source: str
687
+ ci_equivalent: bool
688
+ build_features: tuple[str, ...] = ()
689
+ test_features: tuple[str, ...] = ()
690
+ missing_features: tuple[str, ...] = ()
691
+
692
+ @property
693
+ def gap(self) -> bool:
694
+ """``build_command`` enables a feature the effective test command
695
+ never turns on — a passed verdict didn't compile that code."""
696
+ return bool(self.missing_features)
697
+
698
+ @property
699
+ def healthy(self) -> bool:
700
+ return not self.gap
701
+
702
+
703
+ def feature_coverage_findings(config: "Config") -> list[FeatureCoverageFinding]:
704
+ """Cargo `--features` coverage of every configured repo's effective
705
+ Test-stage command against its ``build_command`` (#2967).
706
+
707
+ Only repos whose ``build_command`` names at least one `--features` value
708
+ are considered — a repo with no explicit features (or a non-cargo build,
709
+ e.g. npm/pnpm) parses to an empty set on both sides and is silently
710
+ omitted, matching :func:`capability_rule_health`'s "no signal, no
711
+ finding" precedent. The effective test command is resolved with
712
+ ``coord.smoke.resolve_smoke_command`` (deferred import: `coord.smoke`
713
+ pulls in ``httpx``/``github_ops``, which this otherwise-light,
714
+ network-free module avoids at import time), so a repo that already
715
+ covers the gap via ``ci_command`` or ``smoke_tests.default_command``
716
+ correctly reports healthy rather than flagging the raw
717
+ ``test_command`` alone.
718
+ """
719
+ from coord.smoke import resolve_smoke_command # noqa: PLC0415
720
+
721
+ findings: list[FeatureCoverageFinding] = []
722
+ for repo_cfg in config.repos:
723
+ build_command = repo_cfg.build_command
724
+ if not build_command:
725
+ continue
726
+ build_features = _cargo_features(build_command)
727
+ if not build_features:
728
+ continue
729
+ smoke_cmd = resolve_smoke_command(repo_cfg, config.smoke_tests)
730
+ test_features = _cargo_features(smoke_cmd.command)
731
+ missing = tuple(sorted(build_features - test_features))
732
+ findings.append(
733
+ FeatureCoverageFinding(
734
+ repo=repo_cfg.name,
735
+ build_command=build_command,
736
+ effective_test_command=smoke_cmd.command,
737
+ test_command_source=smoke_cmd.source,
738
+ ci_equivalent=smoke_cmd.ci_equivalent,
739
+ build_features=tuple(sorted(build_features)),
740
+ test_features=tuple(sorted(test_features)),
741
+ missing_features=missing,
742
+ )
743
+ )
744
+ return findings
745
+
746
+
747
+ def format_feature_coverage_lines(findings: list[FeatureCoverageFinding]) -> list[str]:
748
+ """Human-readable report lines for *findings* (used by ``coord diagnose
749
+ --test-coverage``)."""
750
+ if not findings:
751
+ return [
752
+ "· no repo's build_command names an explicit `--features` value "
753
+ "— nothing to check (this only applies to cargo feature-flagged "
754
+ "builds)"
755
+ ]
756
+
757
+ lines: list[str] = []
758
+ for f in findings:
759
+ if f.gap:
760
+ lines.append(
761
+ f"✗ GAP: {f.repo} — build_command (`{f.build_command}`) enables "
762
+ f"[{', '.join(f.build_features)}], but the effective Test-stage "
763
+ f"command ({f.test_command_source}: "
764
+ f"`{f.effective_test_command or '(unconfigured)'}`) enables "
765
+ f"[{', '.join(f.test_features) or '(none)'}]. Missing: "
766
+ f"{', '.join(f.missing_features)} — a `passed` verdict never "
767
+ "compiled that code (#2967)."
768
+ )
769
+ else:
770
+ lines.append(
771
+ f"✓ {f.repo} — {f.test_command_source} covers every feature "
772
+ f"build_command enables ([{', '.join(f.build_features)}])"
773
+ )
774
+ return lines
775
+
776
+
777
+ def feature_coverage_summary_line(findings: list[FeatureCoverageFinding]) -> str:
778
+ """The machine-readable trailer ``coord diagnose --test-coverage``
779
+ prints, mirroring ``GRAPH_HEALTH:``/``CAPABILITY_RULES:``."""
780
+ gap = sum(1 for f in findings if f.gap)
781
+ return f"TEST_COMMAND_COVERAGE: repos_checked={len(findings)} gap={gap}"
@@ -423,6 +423,50 @@ CLOSES_ISSUE_TYPES: frozenset[str] = frozenset({"work"})
423
423
  # which must also list it since it mutates GitHub via `gh pr create`.
424
424
  PR_HELPER_TYPE = "pr-helper"
425
425
 
426
+ # #2966: "only the coordinator writes docs" (this repo's CLAUDE.md says so
427
+ # for every worker) was text-only enforcement — `Repo.coordinator_only_files`
428
+ # is the config key that was clearly designed to seed a work dispatch's
429
+ # `files_forbidden` with the repo's shared docs (see `coord.dispatch.dispatch`
430
+ # lines around #587), but it was set by ZERO of the fleet's 10 repos, so
431
+ # `files_forbidden` started empty for every work dispatch and only ever
432
+ # gained sealed acceptance paths (#944), never a doc. Two workers in the same
433
+ # repo consequently rewrote the same CLAUDE.md section in the same week,
434
+ # producing a semantic (prose) merge conflict that stalled a five-issue
435
+ # cross-repo chain for ~98 ticks until an operator intervened.
436
+ #
437
+ # Mirror the #944 sealed-paths fix for the same class of problem: don't
438
+ # depend on every operator remembering to configure this per repo. A repo's
439
+ # own rulebook is auto-forbidden unconditionally — `coordinator_owned_docs()`
440
+ # below UNIONS this default in regardless of what `coordinator_only_files`
441
+ # says, the same way sealed acceptance paths are auto-added regardless of
442
+ # `coordinator_only_files` (`coord.dispatch.dispatch`'s #944 comment).
443
+ COORDINATOR_OWNED_DOC_DEFAULTS: tuple[str, ...] = ("CLAUDE.md",)
444
+
445
+
446
+ def coordinator_owned_docs(repo: "Repo | None") -> list[str]:
447
+ """Coordinator-only doc paths for *repo* (#2966).
448
+
449
+ Returns :data:`COORDINATOR_OWNED_DOC_DEFAULTS` UNIONED with *repo*'s own
450
+ ``coordinator_only_files`` (if any), deduped and order-preserving
451
+ (defaults first). Callers use this instead of reading
452
+ ``repo.coordinator_only_files`` directly so the fleet-wide default keeps
453
+ applying even for the common case — today, every repo — where
454
+ ``coordinator_only_files`` is unset.
455
+
456
+ #1388-style fail-open: some ``Repo``-shaped stand-ins (a
457
+ wire-reconstructed object, or a stale install predating this field)
458
+ don't carry ``coordinator_only_files`` at all — ``getattr`` with a
459
+ default treats that the same as "unset" rather than raising, matching
460
+ how ``dispatch_review`` already tolerates a stand-in missing
461
+ ``develop_branch``.
462
+ """
463
+ result: list[str] = list(COORDINATOR_OWNED_DOC_DEFAULTS)
464
+ if repo is not None:
465
+ for f in getattr(repo, "coordinator_only_files", None) or []:
466
+ if f not in result:
467
+ result.append(f)
468
+ return result
469
+
426
470
 
427
471
  def trust_issue_closed_for(assignment_type: str | None) -> bool:
428
472
  """Whether :func:`coord.github_ops.work_is_terminal` may trust
@@ -48,6 +48,7 @@ from coord.models import (
48
48
  Assignment,
49
49
  Board,
50
50
  Machine,
51
+ coordinator_owned_docs,
51
52
  trust_issue_closed_for,
52
53
  )
53
54
  from coord.refine_chat import MAX_CLAUDE_MD_CHARS
@@ -1558,6 +1559,7 @@ def build_review_briefing(
1558
1559
  diff_text: str | None = None,
1559
1560
  sealed_paths: list[str] | None = None,
1560
1561
  sealed_entrypoints: list[str] | None = None,
1562
+ coordinator_doc_paths: list[str] | None = None,
1561
1563
  assignment_type: str = "work",
1562
1564
  provider_same_as_worker: bool = False,
1563
1565
  review_provider: str | None = None,
@@ -1632,6 +1634,18 @@ def build_review_briefing(
1632
1634
  is expected and non-blocking. Every other type (default ``"work"``) keeps
1633
1635
  the original rule unchanged: any touch to *sealed_paths* is mandatory
1634
1636
  ``request-changes``.
1637
+
1638
+ *coordinator_doc_paths* (#2966) is the repo's coordinator-owned doc set —
1639
+ :func:`coord.models.coordinator_owned_docs`, the repo's own CLAUDE.md plus
1640
+ anything it additionally lists under ``coordinator_only_files``. CLAUDE.md
1641
+ already states "only the coordinator writes docs" for every worker, but
1642
+ that was prose-only: nothing structurally backstopped it, and two workers
1643
+ independently rewriting the same CLAUDE.md section produced a semantic
1644
+ merge conflict that stalled a five-issue chain (#2966). Unlike
1645
+ *sealed_paths*, this rule never inverts — no assignment type's job is
1646
+ ever editing the repo's own rulebook, so any diff that touches one of
1647
+ these paths is mandatory ``request-changes`` regardless of
1648
+ *assignment_type*.
1635
1649
  """
1636
1650
 
1637
1651
  lines: list[str] = []
@@ -1829,6 +1843,43 @@ def build_review_briefing(
1829
1843
  "this is a hard rule, not a suggestion (docs/ORACLE_LOOP.md)."
1830
1844
  )
1831
1845
 
1846
+ if coordinator_doc_paths:
1847
+ # #2966: "only the coordinator writes docs" was prose-only — nothing
1848
+ # backstopped it structurally, and two workers independently
1849
+ # rewrote the same CLAUDE.md section in the same week, producing a
1850
+ # semantic (prose) merge conflict that stalled a five-issue chain.
1851
+ # This rule never inverts by assignment_type (unlike sealed_paths
1852
+ # above): no dispatched worker type's job is ever editing the
1853
+ # repo's own rulebook.
1854
+ lines.append("")
1855
+ touched_docs = (
1856
+ _diff_touched_sealed_paths(diff_text, coordinator_doc_paths)
1857
+ if diff_text else []
1858
+ )
1859
+ if touched_docs:
1860
+ lines.append("## \U0001f6a8 COORDINATOR-OWNED DOC EDITED")
1861
+ lines.append("")
1862
+ lines.append(
1863
+ "The diff modifies a coordinator-owned doc: "
1864
+ + ", ".join(f"`{p}`" for p in touched_docs)
1865
+ + ". \"Only the coordinator writes docs\" — a worker must "
1866
+ "never edit the repo's own rulebook or other shared docs; "
1867
+ "parallel doc edits from independent workers collide "
1868
+ "(#2966). **request-changes is mandatory here**, regardless "
1869
+ "of anything else in this diff — even if the edit itself "
1870
+ "looks correct in isolation."
1871
+ )
1872
+ else:
1873
+ lines.append("## Coordinator-owned docs (do not touch)")
1874
+ lines.append("")
1875
+ lines.append(
1876
+ "This repo reserves "
1877
+ + ", ".join(f"`{p}`" for p in coordinator_doc_paths)
1878
+ + " for the coordinator (#2966). If the diff modifies any of "
1879
+ "them, **request-changes** — this is a hard rule, not a "
1880
+ "suggestion, regardless of assignment type."
1881
+ )
1882
+
1832
1883
  lines.append("")
1833
1884
  lines.append("## What to do")
1834
1885
  lines.append("")
@@ -2637,6 +2688,12 @@ def dispatch_review(
2637
2688
  sealed_paths = config.acceptance.sealed_paths(completed.repo_name)
2638
2689
  sealed_entrypoints = config.acceptance.entrypoints(completed.repo_name)
2639
2690
 
2691
+ # #2966: coordinator-owned docs (repo's own CLAUDE.md plus anything it
2692
+ # additionally lists under coordinator_only_files) — see
2693
+ # coordinator_owned_docs' docstring for why this doesn't depend on the
2694
+ # repo actually configuring coordinator_only_files.
2695
+ coordinator_doc_paths = coordinator_owned_docs(repo)
2696
+
2640
2697
  client = http_client or httpx
2641
2698
 
2642
2699
  # Iterate candidates in priority order. On agent rejection (4xx from a
@@ -2706,6 +2763,7 @@ def dispatch_review(
2706
2763
  diff_text=diff_text,
2707
2764
  sealed_paths=sealed_paths,
2708
2765
  sealed_entrypoints=sealed_entrypoints,
2766
+ coordinator_doc_paths=coordinator_doc_paths,
2709
2767
  assignment_type=completed.type,
2710
2768
  )
2711
2769
 
@@ -0,0 +1,153 @@
1
+ """End-to-end tests for `coord diagnose --test-coverage` — driven through the
2
+ real Click command against real ``coordinator.yml`` files, asserting on
3
+ rendered output (CLAUDE.md black-box coverage bar).
4
+
5
+ #2967: quadraui is configured ``test_command: cargo test --features tui``
6
+ against ``build_command: cargo build --features tui --features gtk
7
+ --features terminal`` — the Test gate never compiles ``src/gtk/**`` or the
8
+ terminal backend, so a `passed` verdict on a change confined to either
9
+ carries no information at all. Nothing previously compared the two
10
+ commands; this drives the CLI end to end against that exact live shape, plus
11
+ the healthy/neutral cases that must NOT be flagged.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from pathlib import Path
17
+
18
+ from click.testing import CliRunner
19
+
20
+ from coord.commands.status import diagnose
21
+
22
+
23
+ def _write_config(tmp_path: Path, repos_yaml: str, *, smoke_tests_yaml: str = "") -> Path:
24
+ cfg = tmp_path / "coordinator.yml"
25
+ cfg.write_text(
26
+ "repos:\n"
27
+ f"{repos_yaml}"
28
+ "\n"
29
+ "machines:\n"
30
+ " - name: desktop\n"
31
+ " host: desktop.tailnet\n"
32
+ " capabilities: [rust]\n"
33
+ " repos: [quadraui]\n"
34
+ " repo_paths:\n"
35
+ " quadraui: ~/src/quadraui\n"
36
+ f"{smoke_tests_yaml}",
37
+ encoding="utf-8",
38
+ )
39
+ return cfg
40
+
41
+
42
+ def _run(cfg: Path) -> str:
43
+ result = CliRunner().invoke(
44
+ diagnose, ["--test-coverage", "--config", str(cfg)], catch_exceptions=False
45
+ )
46
+ assert result.exit_code == 0, result.output
47
+ return result.output
48
+
49
+
50
+ def test_reports_gap_for_the_live_quadraui_shape(tmp_path: Path) -> None:
51
+ """The exact live incident (#2967): build_command enables tui+gtk+terminal,
52
+ test_command enables only tui — gtk and terminal are missing and must be
53
+ named explicitly."""
54
+ cfg = _write_config(
55
+ tmp_path,
56
+ " - name: quadraui\n"
57
+ " github: acme/quadraui\n"
58
+ " build_command: \"cargo build --features tui --features gtk --features terminal\"\n"
59
+ " test_command: \"cargo test --features tui\"\n",
60
+ )
61
+
62
+ out = _run(cfg)
63
+
64
+ assert "GAP" in out
65
+ assert "quadraui" in out
66
+ assert "Missing: gtk, terminal" in out
67
+ assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=1" in out
68
+
69
+
70
+ def test_healthy_when_test_command_covers_every_build_feature(tmp_path: Path) -> None:
71
+ cfg = _write_config(
72
+ tmp_path,
73
+ " - name: quadraui\n"
74
+ " github: acme/quadraui\n"
75
+ " build_command: \"cargo build --features tui --features gtk\"\n"
76
+ " test_command: \"cargo test --features tui --features gtk\"\n",
77
+ )
78
+
79
+ out = _run(cfg)
80
+
81
+ assert "GAP" not in out
82
+ assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=0" in out
83
+
84
+
85
+ def test_ci_command_closing_the_gap_reports_healthy_not_the_raw_test_command(
86
+ tmp_path: Path,
87
+ ) -> None:
88
+ """`ci_command` outranks `test_command` for what the Test stage actually
89
+ runs (`coord.smoke.resolve_smoke_command`) — a repo that declares a wider
90
+ `ci_command` must report healthy even though its bare `test_command`
91
+ alone would be a gap."""
92
+ cfg = _write_config(
93
+ tmp_path,
94
+ " - name: quadraui\n"
95
+ " github: acme/quadraui\n"
96
+ " build_command: \"cargo build --features tui --features gtk\"\n"
97
+ " test_command: \"cargo test --features tui\"\n"
98
+ " ci_command: \"cargo test --features tui --features gtk\"\n",
99
+ )
100
+
101
+ out = _run(cfg)
102
+
103
+ assert "GAP" not in out
104
+ assert "ci_command" in out
105
+ assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=0" in out
106
+
107
+
108
+ def test_plain_cargo_build_and_test_with_no_features_is_not_flagged(tmp_path: Path) -> None:
109
+ """vimcode/coord-tui shape: neither command names `--features` at all —
110
+ nothing to compare, so the repo is silently omitted, not reported."""
111
+ cfg = _write_config(
112
+ tmp_path,
113
+ " - name: quadraui\n"
114
+ " github: acme/quadraui\n"
115
+ " build_command: \"cargo build\"\n"
116
+ " test_command: \"cargo test\"\n",
117
+ )
118
+
119
+ out = _run(cfg)
120
+
121
+ assert "GAP" not in out
122
+ assert "nothing to check" in out
123
+ assert "TEST_COMMAND_COVERAGE: repos_checked=0 gap=0" in out
124
+
125
+
126
+ def test_no_build_command_at_all_is_not_flagged(tmp_path: Path) -> None:
127
+ cfg = _write_config(
128
+ tmp_path,
129
+ " - name: quadraui\n"
130
+ " github: acme/quadraui\n"
131
+ " test_command: \"cargo test --features tui\"\n",
132
+ )
133
+
134
+ out = _run(cfg)
135
+
136
+ assert "GAP" not in out
137
+ assert "TEST_COMMAND_COVERAGE: repos_checked=0 gap=0" in out
138
+
139
+
140
+ def test_unconfigured_test_command_reports_every_feature_missing(tmp_path: Path) -> None:
141
+ cfg = _write_config(
142
+ tmp_path,
143
+ " - name: quadraui\n"
144
+ " github: acme/quadraui\n"
145
+ " build_command: \"cargo build --features tui --features gtk\"\n",
146
+ )
147
+
148
+ out = _run(cfg)
149
+
150
+ assert "GAP" in out
151
+ assert "(unconfigured)" in out
152
+ assert "Missing: gtk, tui" in out
153
+ assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=1" in out
@@ -302,7 +302,10 @@ class TestDispatch:
302
302
  )
303
303
  dispatch(proposal, cfg)
304
304
  payload = mock_post.call_args.kwargs["json"]
305
- assert payload["files_forbidden"] == ["README.md", "CHANGELOG.md"]
305
+ # #2966: CLAUDE.md is unioned in as a fleet-wide default ahead of
306
+ # the repo's own configured coordinator_only_files — see
307
+ # coord.models.coordinator_owned_docs.
308
+ assert payload["files_forbidden"] == ["CLAUDE.md", "README.md", "CHANGELOG.md"]
306
309
 
307
310
  @patch("coord.dispatch.httpx.post")
308
311
  def test_payload_auto_seals_acceptance_dir_when_driver_configured(
@@ -404,7 +407,33 @@ class TestDispatch:
404
407
  mock_post.return_value = mock_resp
405
408
  dispatch(proposal, config)
406
409
  payload = mock_post.call_args.kwargs["json"]
407
- assert payload["files_forbidden"] == []
410
+ # #2966: no acceptance driver and no coordinator_only_files configured
411
+ # still carries the fleet-wide doc default (CLAUDE.md) — the source
412
+ # list is never actually empty, unlike pre-#2966.
413
+ assert payload["files_forbidden"] == ["CLAUDE.md"]
414
+
415
+ @patch("coord.dispatch.httpx.post")
416
+ def test_payload_forbids_claude_md_by_default(
417
+ self, mock_post: MagicMock, proposal: Proposal,
418
+ ) -> None:
419
+ """#2966: repo.coordinator_only_files is set by zero repos fleet-wide,
420
+ so files_forbidden must not depend on it to protect the repo's own
421
+ rulebook — CLAUDE.md is auto-forbidden the same way sealed acceptance
422
+ paths are auto-added regardless of config (#944)."""
423
+ mock_resp = MagicMock()
424
+ mock_resp.json.return_value = {"ok": True}
425
+ mock_post.return_value = mock_resp
426
+
427
+ cfg = Config(
428
+ repos=[Repo(name="api", github="acme/api")],
429
+ machines=[Machine(
430
+ name="laptop", host="laptop.tailnet", repos=["api"],
431
+ repo_paths={"api": "/home/user/src/api"},
432
+ )],
433
+ )
434
+ dispatch(proposal, cfg)
435
+ payload = mock_post.call_args.kwargs["json"]
436
+ assert "CLAUDE.md" in payload["files_forbidden"]
408
437
 
409
438
  @patch("coord.dispatch.httpx.post")
410
439
  def test_payload_acceptance_seal_dedupes_with_coordinator_only_files(