code-coordinator 0.5.240__tar.gz → 0.5.241__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 (817) hide show
  1. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/drive_queue.py +147 -6
  5. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/milestone.py +12 -2
  6. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/overlap_predict.py +51 -0
  7. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_drive_queue.py +99 -0
  8. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_overlap_predict.py +50 -0
  9. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/.gitignore +0 -0
  24. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/GOAL.md +0 -0
  26. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/LICENSE +0 -0
  27. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/README.md +0 -0
  29. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/approved_work.py +0 -0
  46. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/block_log.py +0 -0
  49. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/board_bool_guard.py +0 -0
  50. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/client.py +0 -0
  63. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/plan_followup.py +0 -0
  78. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/plans.py +0 -0
  79. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/portal.py +0 -0
  80. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/release.py +0 -0
  81. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/repo.py +0 -0
  82. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/report.py +0 -0
  83. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/review.py +0 -0
  84. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/scorecard.py +0 -0
  85. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/sessions.py +0 -0
  86. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/setup.py +0 -0
  87. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/status.py +0 -0
  88. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/terminal.py +0 -0
  89. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/test_gate.py +0 -0
  90. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/commands/tui.py +0 -0
  91. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/comments.py +0 -0
  92. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/config.py +0 -0
  93. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/config_reload.py +0 -0
  94. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/confirm_test.py +0 -0
  95. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/conflict_fix.py +0 -0
  96. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dao.py +0 -0
  97. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dashboard/__init__.py +0 -0
  98. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dashboard/fixture.py +0 -0
  99. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dashboard/index.html +0 -0
  100. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dashboard/server.py +0 -0
  101. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dashboard/terminal.py +0 -0
  102. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/db.py +0 -0
  103. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dead_end.py +0 -0
  104. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/decomposition_chat.py +0 -0
  105. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/README.md +0 -0
  106. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-agent.service +0 -0
  107. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-db-backup.service +0 -0
  108. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-db-backup.sh +0 -0
  109. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-db-backup.timer +0 -0
  110. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-drive-queue.service +0 -0
  111. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-drive-queue.timer +0 -0
  112. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-notify.service +0 -0
  113. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-notify.timer +0 -0
  114. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-release-propagate.service +0 -0
  115. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-release-propagate.timer +0 -0
  116. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-release-window.service +0 -0
  117. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-release-window.timer +0 -0
  118. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-serve.service +0 -0
  119. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-web-dist-build.service +0 -0
  120. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-web-dist-build.timer +0 -0
  121. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy/coord-web.service +0 -0
  122. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy_manifest.py +0 -0
  123. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deploy_units.py +0 -0
  124. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/deps.py +0 -0
  125. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/diagnose.py +0 -0
  126. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dispatch.py +0 -0
  127. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/dist_name.py +0 -0
  128. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/drive.py +0 -0
  129. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/drive_queue.py +0 -0
  130. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/drive_state.py +0 -0
  131. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/events.py +0 -0
  132. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/failure_class.py +0 -0
  133. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/filelock.py +0 -0
  134. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/fleet_config_health.py +0 -0
  135. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/forge_availability.py +0 -0
  136. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/freshness.py +0 -0
  137. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/gate_a.py +0 -0
  138. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/gate_b.py +0 -0
  139. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/gate_snapshot.py +0 -0
  140. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/gates.py +0 -0
  141. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/github_ops.py +0 -0
  142. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/goal.py +0 -0
  143. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/graph_health.py +0 -0
  144. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/__init__.py +0 -0
  145. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/aggregate.py +0 -0
  146. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/__init__.py +0 -0
  147. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/agent_install.py +0 -0
  148. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/cargo_targets.py +0 -0
  149. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/claude_binary.py +0 -0
  150. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/coord_web_ci_pin.py +0 -0
  151. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/deploy_lane_facts.py +0 -0
  152. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/disk.py +0 -0
  153. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/fleet_board.py +0 -0
  154. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  155. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/fleet_phantom.py +0 -0
  156. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/fleet_unit_drift.py +0 -0
  157. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/graph.py +0 -0
  158. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/graphify_cli.py +0 -0
  159. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/index_lock.py +0 -0
  160. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/plan_usage.py +0 -0
  161. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/repo_state.py +0 -0
  162. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/spawned_coord.py +0 -0
  163. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/timer_active.py +0 -0
  164. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/toolchain.py +0 -0
  165. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/unit_drift.py +0 -0
  166. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/unit_enablement.py +0 -0
  167. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/checks/worktrees.py +0 -0
  168. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/cli.py +0 -0
  169. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/context.py +0 -0
  170. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/fleet_snapshot.py +0 -0
  171. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/models.py +0 -0
  172. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/pypi.py +0 -0
  173. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/registry.py +0 -0
  174. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/render.py +0 -0
  175. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/health/units.py +0 -0
  176. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/hooks.py +0 -0
  177. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/housekeeping.py +0 -0
  178. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/interactive.py +0 -0
  179. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/issue_store.py +0 -0
  180. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/liveness_auditor.py +0 -0
  181. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/machine_pause.py +0 -0
  182. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/merge_queue.py +0 -0
  183. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/milestone_chat.py +0 -0
  184. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/milestone_dispatch.py +0 -0
  185. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/milestone_gate.py +0 -0
  186. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/milestone_order.py +0 -0
  187. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/mock_author.py +0 -0
  188. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/models.py +0 -0
  189. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/network.py +0 -0
  190. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/new_issue_chat.py +0 -0
  191. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/__init__.py +0 -0
  192. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/baseline.py +0 -0
  193. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/cli.py +0 -0
  194. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/collect.py +0 -0
  195. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/digest.py +0 -0
  196. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/models.py +0 -0
  197. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/predicate.py +0 -0
  198. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/service.py +0 -0
  199. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/store.py +0 -0
  200. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notifier/transport.py +0 -0
  201. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/notify.py +0 -0
  202. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/openapi.py +0 -0
  203. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/overlap_fence.py +0 -0
  204. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/parentage.py +0 -0
  205. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/parentage_github.py +0 -0
  206. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/pipeline.py +0 -0
  207. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/plan_parser.py +0 -0
  208. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/plans.py +0 -0
  209. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/platform_paths.py +0 -0
  210. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/portal_bridge.py +0 -0
  211. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/portal_store.py +0 -0
  212. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/portal_sync.py +0 -0
  213. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/pr_body_lint.py +0 -0
  214. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/prereqs.py +0 -0
  215. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/progress.py +0 -0
  216. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/providers/__init__.py +0 -0
  217. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/providers/base.py +0 -0
  218. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/providers/claude.py +0 -0
  219. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/providers/claude_pty.py +0 -0
  220. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/providers/opencode.py +0 -0
  221. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/queue_diagnose.py +0 -0
  222. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/reconcile.py +0 -0
  223. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/reconcile_tick.py +0 -0
  224. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/refine_chat.py +0 -0
  225. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/release_cordon.py +0 -0
  226. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/release_propagate.py +0 -0
  227. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/release_verify.py +0 -0
  228. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/release_window.py +0 -0
  229. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/repo_edit.py +0 -0
  230. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/repo_onboard.py +0 -0
  231. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/reports.py +0 -0
  232. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/revalidate.py +0 -0
  233. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/review.py +0 -0
  234. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/scorecard.py +0 -0
  235. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/self_health.py +0 -0
  236. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/serve_app.py +0 -0
  237. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  238. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  239. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  240. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  241. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  242. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/portal-followup/SKILL.md +0 -0
  243. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  244. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  245. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/skills/update-issue/SKILL.md +0 -0
  246. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/smoke.py +0 -0
  247. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/spend_ceiling.py +0 -0
  248. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/split_work.py +0 -0
  249. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/stage_projection.py +0 -0
  250. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/state.py +0 -0
  251. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/test_author.py +0 -0
  252. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/test_chat.py +0 -0
  253. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/test_orchestrator.py +0 -0
  254. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/test_report.py +0 -0
  255. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/tui_release.py +0 -0
  256. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/usage.py +0 -0
  257. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/usage_limits.py +0 -0
  258. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/usage_rollup.py +0 -0
  259. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coord/worker_events.py +0 -0
  260. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/coordinator.example.yml +0 -0
  261. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-agent.service +0 -0
  262. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-db-backup.service +0 -0
  263. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-db-backup.sh +0 -0
  264. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-db-backup.timer +0 -0
  265. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-drive-queue.service +0 -0
  266. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-drive-queue.timer +0 -0
  267. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-notify.service +0 -0
  268. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-notify.timer +0 -0
  269. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-release-propagate.service +0 -0
  270. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-release-propagate.timer +0 -0
  271. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-release-window.service +0 -0
  272. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-release-window.timer +0 -0
  273. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-serve.service +0 -0
  274. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-web-dist-build.service +0 -0
  275. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-web-dist-build.sh +0 -0
  276. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-web-dist-build.timer +0 -0
  277. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-web-rollback.sh +0 -0
  278. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/coord-web.service +0 -0
  279. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/deploy/node-shim.sh +0 -0
  280. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  281. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ADR_COORD_WEB_CI.md +0 -0
  282. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ADR_COORD_WEB_DIST.md +0 -0
  283. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/AGENT_OPERATIONS.md +0 -0
  284. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ARCHITECTURE.md +0 -0
  285. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ARCH_SECURITY_GATES.md +0 -0
  286. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/COCKPIT.md +0 -0
  287. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/CONTROL_CENTER.md +0 -0
  288. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/COST_DISCIPLINE.md +0 -0
  289. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/CROSS_PLATFORM.md +0 -0
  290. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/CUSTOMER_PORTAL.md +0 -0
  291. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/DRIVE_QUEUE.md +0 -0
  292. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/EPHEMERAL_WORKERS.md +0 -0
  293. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/FORGE_MIGRATION.md +0 -0
  294. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/GRAPHIFY_SETUP.md +0 -0
  295. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ISSUE_GUIDANCE.md +0 -0
  296. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/MAC_MINI.md +0 -0
  297. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  298. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/NOTIFIER.md +0 -0
  299. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/OPENCODE_VERIFICATION.md +0 -0
  300. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/OPERATING_GOTCHAS.md +0 -0
  301. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/ORACLE_LOOP.md +0 -0
  302. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/PHONE_WEBAPP.md +0 -0
  303. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/PIPELINE_V2.md +0 -0
  304. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/PLATFORM_EVOLUTION.md +0 -0
  305. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/SECOND_BACKEND.md +0 -0
  306. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/STORE_SERVICE.md +0 -0
  307. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  308. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/WEB_CONTROL_CENTER.md +0 -0
  309. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/WSL_WINDOWS_WORKER.md +0 -0
  310. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/mocks/web/README.md +0 -0
  311. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/mocks/web/_tokens.css +0 -0
  312. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/mocks/web/issue-detail.html +0 -0
  313. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/mocks/web/pipeline-narrow.html +0 -0
  314. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/docs/mocks/web/pipeline-wide.html +0 -0
  315. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/graphify-out/.gitignore +0 -0
  316. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/install-agent.sh +0 -0
  317. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/pyproject.toml +0 -0
  318. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/audit_review_verdict_overrides.py +0 -0
  319. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  320. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/build-worker-image.sh +0 -0
  321. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/coordinator-machine.py +0 -0
  322. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/epic-down.sh +0 -0
  323. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/epic-up.sh +0 -0
  324. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/preflight.sh +0 -0
  325. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/provision-worker.sh +0 -0
  326. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  327. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  328. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/azure-workers/verify-github-token.sh +0 -0
  329. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/check_gh_argv_containment.py +0 -0
  330. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/codegen.py +0 -0
  331. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/coord-test-runner.sh +0 -0
  332. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/drive-batch.sh +0 -0
  333. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/gen_board_fixture.py +0 -0
  334. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/gen_mock_index.py +0 -0
  335. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/next_release_tag.py +0 -0
  336. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/run_tests_in_populated_home.sh +0 -0
  337. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/run_tests_without_gh.sh +0 -0
  338. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/smoke_437_interactive.py +0 -0
  339. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/verify_878_review_capture.py +0 -0
  340. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/verify_release_published.py +0 -0
  341. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/scripts/verify_release_wheel.py +0 -0
  342. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/setup.cfg +0 -0
  343. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/SMOKE_SET.md +0 -0
  344. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/__init__.py +0 -0
  345. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  346. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/contract.md +0 -0
  347. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/manifest.yml +0 -0
  348. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  349. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  350. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  351. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  352. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-37/conftest.py +0 -0
  353. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-37/contract.md +0 -0
  354. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-37/manifest.yml +0 -0
  355. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  356. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  357. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/contract.md +0 -0
  358. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/manifest.yml +0 -0
  359. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  360. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  361. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  362. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  363. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  364. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  365. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  366. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  367. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  368. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  369. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/contract.md +0 -0
  370. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  371. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  372. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/manifest.yml +0 -0
  373. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  374. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-51/tsconfig.json +0 -0
  375. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  376. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  377. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  378. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/contract.md +0 -0
  379. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  380. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/manifest.yml +0 -0
  381. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  382. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  383. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  384. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  385. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  386. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  387. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  388. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  389. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  390. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  391. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  392. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  393. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/contract.md +0 -0
  394. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  395. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/manifest.yml +0 -0
  396. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  402. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  403. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/conftest.py +0 -0
  404. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/board-pipeline-basic.json +0 -0
  405. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  406. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  407. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  408. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  409. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/all_pass.json +0 -0
  410. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  411. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/mixed_fail.json +0 -0
  412. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  413. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  414. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/skip.json +0 -0
  415. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/playwright/truncated.json +0 -0
  416. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  417. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  418. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  419. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  420. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  421. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  422. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  423. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  424. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_acceptance.py +0 -0
  425. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_acceptance_drivers.py +0 -0
  426. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent.py +0 -0
  427. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_api_error.py +0 -0
  428. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_app.py +0 -0
  429. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_branch_base.py +0 -0
  430. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_branch_capture.py +0 -0
  431. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_config_free_1712.py +0 -0
  432. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_deploy_units_endpoint.py +0 -0
  433. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_dirty_worktree.py +0 -0
  434. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  435. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_graph_self_heal.py +0 -0
  436. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_health_h3.py +0 -0
  437. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_idle_restart.py +0 -0
  438. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_push_failure.py +0 -0
  439. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_reap.py +0 -0
  440. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_repos_and_pull.py +0 -0
  441. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_restart_services_endpoint.py +0 -0
  442. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_skills_self_heal.py +0 -0
  443. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_startup_diagnostics.py +0 -0
  444. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_update.py +0 -0
  445. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_update_bluegreen.py +0 -0
  446. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_usage_limit.py +0 -0
  447. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_agent_zero_commit.py +0 -0
  448. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ambient_home_isolation.py +0 -0
  449. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_approve_reject_plan.py +0 -0
  450. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_approve_usage_gate.py +0 -0
  451. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_approved_work_2532.py +0 -0
  452. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_assignment_already_recorded_daemon.py +0 -0
  453. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_audit_log.py +0 -0
  454. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_audit_outcome.py +0 -0
  455. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_audit_query.py +0 -0
  456. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_auto_loop.py +0 -0
  457. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_auto_release_publish_2035.py +0 -0
  458. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_base_checkout_restore.py +0 -0
  459. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_block_log.py +0 -0
  460. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_cap_762.py +0 -0
  461. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_fixture.py +0 -0
  462. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_read_path.py +0 -0
  463. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_service.py +0 -0
  464. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_state.py +0 -0
  465. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_board_wire.py +0 -0
  466. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_brain.py +0 -0
  467. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_branch_model.py +0 -0
  468. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_bug_intake.py +0 -0
  469. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_build_worker_image_env_update.py +0 -0
  470. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cargo_cache.py +0 -0
  471. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_check_gh_argv_containment.py +0 -0
  472. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ci_acceptance_gate_1950.py +0 -0
  473. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ci_fix.py +0 -0
  474. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ci_gitlab.py +0 -0
  475. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ci_parity_2091.py +0 -0
  476. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_ci_store.py +0 -0
  477. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_claim.py +0 -0
  478. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_acceptance.py +0 -0
  479. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_assign.py +0 -0
  480. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  481. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_assign_interactive_remote.py +0 -0
  482. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_assign_provider.py +0 -0
  483. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  484. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_audit.py +0 -0
  485. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_chat_continue.py +0 -0
  486. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_decide.py +0 -0
  487. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_diagnose_config_provenance.py +0 -0
  488. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_diagnose_forge_availability.py +0 -0
  489. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_diagnose_graph.py +0 -0
  490. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_diagnose_self.py +0 -0
  491. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_doctor.py +0 -0
  492. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_doctor_config_free_1801.py +0 -0
  493. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  494. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_drive.py +0 -0
  495. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_escalate.py +0 -0
  496. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_fix_headless_review.py +0 -0
  497. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_gate_a.py +0 -0
  498. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_install_drift.py +0 -0
  499. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_install_skills.py +0 -0
  500. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_issue_create_label.py +0 -0
  501. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_issue_reopen.py +0 -0
  502. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_merge.py +0 -0
  503. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_assign.py +0 -0
  504. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_capture.py +0 -0
  505. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_chat_add_child.py +0 -0
  506. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_dispatch.py +0 -0
  507. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_order.py +0 -0
  510. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  511. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_milestone_ship.py +0 -0
  512. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_network.py +0 -0
  513. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_new_issue_chat.py +0 -0
  514. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_plans.py +0 -0
  515. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_portal.py +0 -0
  516. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_pull_artifact.py +0 -0
  517. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_queue.py +0 -0
  518. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_reattach_sessions.py +0 -0
  519. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_refine_board.py +0 -0
  520. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_release_preflight.py +0 -0
  521. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_release_propagate.py +0 -0
  522. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_release_window.py +0 -0
  523. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_repo_2220.py +0 -0
  524. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_merge_queue.py +0 -0
  528. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_provider.py +0 -0
  529. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_review_finalizing.py +0 -0
  530. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_test_failed_tag.py +0 -0
  531. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_status_usage_limit.py +0 -0
  532. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_sync_comments_873.py +0 -0
  533. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_test_plan.py +0 -0
  534. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_track.py +0 -0
  535. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_tui_update.py +0 -0
  536. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cli_wait.py +0 -0
  537. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_client_base_install.py +0 -0
  538. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_comments.py +0 -0
  539. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_completion_summary.py +0 -0
  540. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config.py +0 -0
  541. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config_acceptance.py +0 -0
  542. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config_audit.py +0 -0
  543. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config_pricing.py +0 -0
  544. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  545. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_config_usage_gate.py +0 -0
  546. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_confirm_test.py +0 -0
  547. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_conflict_fix.py +0 -0
  548. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_conflict_fix_semantic.py +0 -0
  549. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_test.py +0 -0
  550. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_test_runner_baseline.py +0 -0
  551. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_test_runner_populated_home.py +0 -0
  552. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_test_runner_routing.py +0 -0
  553. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_test_runner_toolchain.py +0 -0
  554. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coord_web_sse_restart_live.py +0 -0
  555. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_coordinator_machine.py +0 -0
  556. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_cross_platform_imports.py +0 -0
  557. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dashboard.py +0 -0
  558. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dashboard_fixture.py +0 -0
  559. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dashboard_terminal.py +0 -0
  560. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dashboard_terminal_live.py +0 -0
  561. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_db.py +0 -0
  562. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dead_end.py +0 -0
  563. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_decomposition_chat.py +0 -0
  564. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_coord_db_backup.py +0 -0
  565. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_coord_web_dist.py +0 -0
  566. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_coord_web_rollback.py +0 -0
  567. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_drive_queue_unit.py +0 -0
  568. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_manifest.py +0 -0
  569. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_notify_unit.py +0 -0
  570. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_units_lane.py +0 -0
  571. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deploy_web_unit.py +0 -0
  572. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_deps.py +0 -0
  573. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_diagnose.py +0 -0
  574. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dispatch.py +0 -0
  575. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dispatch_target_validation.py +0 -0
  576. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_dist_name.py +0 -0
  577. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_done_housekeeping.py +0 -0
  578. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_drive.py +0 -0
  579. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_drive_queue.py +0 -0
  580. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_drive_queue_roll_pending.py +0 -0
  581. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_drive_state.py +0 -0
  582. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_drive_tmux.py +0 -0
  583. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_epic_up_capability_detection.py +0 -0
  584. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  585. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_epic_up_image_provenance.py +0 -0
  586. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_errors.py +0 -0
  587. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_events.py +0 -0
  588. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_failure_class.py +0 -0
  589. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_filelock.py +0 -0
  590. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  591. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_fix_of_force_override.py +0 -0
  592. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_fleet_config_health.py +0 -0
  593. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_fleet_health_probes.py +0 -0
  594. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_fleet_health_snapshot.py +0 -0
  595. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_forge_availability.py +0 -0
  596. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_freshness.py +0 -0
  597. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gate_a.py +0 -0
  598. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gate_b.py +0 -0
  599. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gate_snapshot_staleness.py +0 -0
  600. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gates.py +0 -0
  601. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  602. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_gen_mock_index.py +0 -0
  603. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_generated_types_fixture.py +0 -0
  604. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_github_ops.py +0 -0
  605. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_goal.py +0 -0
  606. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_graph_health.py +0 -0
  607. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_graph_selfheal_absent_2237.py +0 -0
  608. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_handoff.py +0 -0
  609. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_checks.py +0 -0
  610. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_cli.py +0 -0
  611. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_cli_graph.py +0 -0
  612. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_config.py +0 -0
  613. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_context.py +0 -0
  614. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_coord_web_ci_pin.py +0 -0
  615. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_deploy_lane_facts.py +0 -0
  616. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_incident_regression.py +0 -0
  617. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_pypi.py +0 -0
  618. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_registry.py +0 -0
  619. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_timer_active.py +0 -0
  620. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_toolchain.py +0 -0
  621. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_unit_drift.py +0 -0
  622. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_health_unit_enablement.py +0 -0
  623. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_hooks.py +0 -0
  624. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_human_attended_437.py +0 -0
  625. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_init.py +0 -0
  626. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_integration.py +0 -0
  627. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_briefing_echo.py +0 -0
  628. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_pane_log_2541.py +0 -0
  629. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_prefill_state.py +0 -0
  630. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_session_relaunch.py +0 -0
  631. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_test_verdict_backstop.py +0 -0
  632. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_token_attribution.py +0 -0
  633. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_interactive_worktree.py +0 -0
  634. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_issue_store_seam.py +0 -0
  635. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_liveness_auditor.py +0 -0
  636. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_liveness_notify.py +0 -0
  637. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_machine_pause.py +0 -0
  638. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_merge_queue.py +0 -0
  639. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_merge_verify.py +0 -0
  640. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_milestone_chat.py +0 -0
  641. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_milestone_dispatch.py +0 -0
  642. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_milestone_gate.py +0 -0
  643. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_milestone_order.py +0 -0
  644. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_milestone_seam.py +0 -0
  645. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_mock_author.py +0 -0
  646. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_model_tiering.py +0 -0
  647. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_models.py +0 -0
  648. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_models_config_labels.py +0 -0
  649. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_needs_attention.py +0 -0
  650. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_network.py +0 -0
  651. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_new_issue_chat.py +0 -0
  652. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_next_release_tag.py +0 -0
  653. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_node_shim.py +0 -0
  654. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_baseline.py +0 -0
  655. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_cli.py +0 -0
  656. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_collect.py +0 -0
  657. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_config.py +0 -0
  658. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_drive_seam.py +0 -0
  659. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_isolation.py +0 -0
  660. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_predicate.py +0 -0
  661. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_quiet_hours.py +0 -0
  662. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notifier_service.py +0 -0
  663. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notify.py +0 -0
  664. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_notify_drain.py +0 -0
  665. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_openapi.py +0 -0
  666. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_operational_defaults.py +0 -0
  667. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_overlap_fence.py +0 -0
  668. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_packaged_deploy_units.py +0 -0
  669. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_parentage.py +0 -0
  670. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_paste_landed.py +0 -0
  671. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_pipeline.py +0 -0
  672. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_plan_followup_approve_plan_command.py +0 -0
  673. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_plan_followup_pr_command.py +0 -0
  674. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_plan_followup_review_command.py +0 -0
  675. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_plan_only.py +0 -0
  676. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_plan_parser.py +0 -0
  677. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_platform_paths.py +0 -0
  678. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_portal_bridge.py +0 -0
  679. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_portal_config.py +0 -0
  680. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_portal_store.py +0 -0
  681. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_portal_sync.py +0 -0
  682. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_pr_body_lint.py +0 -0
  683. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_prereqs.py +0 -0
  684. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_production_db_guard.py +0 -0
  685. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_progress.py +0 -0
  686. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_provider_seam.py +0 -0
  687. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_providers.py +0 -0
  688. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_providers_config_labels.py +0 -0
  689. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_providers_pty.py +0 -0
  690. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_quiet_hours.py +0 -0
  691. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_quiet_hours_store_2146.py +0 -0
  692. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reap_merged_sessions.py +0 -0
  693. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reap_stale_interactive_tick.py +0 -0
  694. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile.py +0 -0
  695. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_branch.py +0 -0
  696. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_completions.py +0 -0
  697. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_merges.py +0 -0
  698. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_no_agent_record.py +0 -0
  699. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_tick.py +0 -0
  700. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reconcile_usage_limit_done.py +0 -0
  701. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_refine_chat.py +0 -0
  702. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_cordon_2101.py +0 -0
  703. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  704. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_cordon_deadlock_2240.py +0 -0
  705. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_cordon_stuck_2490.py +0 -0
  706. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_propagate.py +0 -0
  707. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_roll_window_handoff.py +0 -0
  708. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_unified_1242.py +0 -0
  709. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_verify.py +0 -0
  710. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_release_window.py +0 -0
  711. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_remote_auto_prune.py +0 -0
  712. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_remote_interactive_reaper.py +0 -0
  713. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_repo_edit_2220.py +0 -0
  714. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_repo_graph_fleet_2237.py +0 -0
  715. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_repo_onboard_2220.py +0 -0
  716. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_report_result_push.py +0 -0
  717. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_reports.py +0 -0
  718. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_retry.py +0 -0
  719. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_retry_advisory_1606.py +0 -0
  720. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_retry_type_1636.py +0 -0
  721. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_revalidate.py +0 -0
  722. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review.py +0 -0
  723. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_end_review_without_verdict.py +0 -0
  724. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_parse_failure_diagnostic.py +0 -0
  725. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_reaffirm.py +0 -0
  726. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_state.py +0 -0
  727. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_verdict_backstop.py +0 -0
  728. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_verdict_override_audit.py +0 -0
  729. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_verdict_relay.py +0 -0
  730. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_review_zero_commits.py +0 -0
  731. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_scoped_review_wiring.py +0 -0
  732. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_scorecard.py +0 -0
  733. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_self_health.py +0 -0
  734. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_serve.py +0 -0
  735. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_serve_app_board_trim.py +0 -0
  736. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_session.py +0 -0
  737. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_slice_issue_attribution.py +0 -0
  738. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_smoke.py +0 -0
  739. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_smoke_live_checkout_restore.py +0 -0
  740. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_smoke_workflow.py +0 -0
  741. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_spend_ceiling.py +0 -0
  742. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_spend_ceiling_coordinator.py +0 -0
  743. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_split.py +0 -0
  744. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_split_work.py +0 -0
  745. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_stage_projection.py +0 -0
  746. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_stalled_pipeline.py +0 -0
  747. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_state.py +0 -0
  748. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_state_review_findings_daemon.py +0 -0
  749. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_status_fleet_footer.py +0 -0
  750. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_stop_1567.py +0 -0
  751. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_stuck.py +0 -0
  752. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_terminal_command.py +0 -0
  753. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_author.py +0 -0
  754. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_chat.py +0 -0
  755. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_orchestrator.py +0 -0
  756. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_report.py +0 -0
  757. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_verdict_parsing.py +0 -0
  758. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_test_verdict_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_thin_client_board_audit.py +0 -0
  760. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_thin_client_config_load_1080.py +0 -0
  761. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_thin_client_daemon_routing_906.py +0 -0
  762. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_tmux_host.py +0 -0
  763. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_tmux_session.py +0 -0
  764. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_transcript_floor.py +0 -0
  765. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_usage.py +0 -0
  766. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_usage_limits.py +0 -0
  767. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_usage_rollup.py +0 -0
  768. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_venv_live_install_2121.py +0 -0
  769. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_version_single_source.py +0 -0
  770. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_watch.py +0 -0
  771. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  772. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worker_events.py +0 -0
  773. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worker_image_pin_sync.py +0 -0
  774. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worker_safety.py +0 -0
  775. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worker_test_scoping.py +0 -0
  776. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worktree.py +0 -0
  777. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  778. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/Cargo.lock +0 -0
  779. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/Cargo.toml +0 -0
  780. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/cargo-config-local-quadraui.toml.example +0 -0
  781. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/approved.rs +0 -0
  782. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/audit.rs +0 -0
  783. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/chat.rs +0 -0
  784. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/data.rs +0 -0
  785. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/dialogs.rs +0 -0
  786. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/doc_tabs.rs +0 -0
  787. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.240 → code_coordinator-0.5.241}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.240
3
+ Version: 0.5.241
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.240
3
+ Version: 0.5.241
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.240",
2
+ "tag": "0.5.241",
3
3
  "distance": 0,
4
- "node": "gbfdc750bff3b8352eace6d4ce6ab5dde9b39771a",
4
+ "node": "gf7a7056ba9c9f723298a0b5f62a8949e5c01bd1f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-23"
@@ -91,7 +91,9 @@ from coord.overlap_predict import (
91
91
  classify_outcome,
92
92
  collect_candidate_files,
93
93
  declared_footprints,
94
+ fanout_warnings,
94
95
  inflight_footprints,
96
+ parse_declared_files,
95
97
  predict_overlap,
96
98
  predictions_from_audit,
97
99
  tally,
@@ -296,9 +298,12 @@ def drive_queue_add(
296
298
  # yields an empty prediction and this add behaves exactly as it did before
297
299
  # the feature existed.
298
300
  prediction = Prediction()
301
+ staleness_note = ""
299
302
  auto_after: list[str] = []
300
303
  if not no_predict_overlap:
301
- prediction = _predict_overlap(config_path, repo, issue, existing_entries)
304
+ prediction, staleness_note = _predict_overlap(
305
+ config_path, repo, issue, existing_entries
306
+ )
302
307
  auto_after = _applicable_auto_after(
303
308
  existing_entries, repo, issue, after, prediction
304
309
  )
@@ -326,7 +331,17 @@ def drive_queue_add(
326
331
  gate += " (fleet-wide — nothing anywhere launches)"
327
332
  if resume_when:
328
333
  gate += f" (auto-resume when `{resume_when}` passes)"
329
- overlap_note = f"\n{prediction.reason}" if auto_after else ""
334
+ # #2601: the reason (if an edge was actually applied), any high-fanout
335
+ # directory-token warning (independent of whether the edge stuck — a
336
+ # cycle-dropped edge's token is just as worth narrowing), and a staleness
337
+ # note when the candidate's own body could only be read from cache.
338
+ overlap_notes: list[str] = []
339
+ if auto_after:
340
+ overlap_notes.append(prediction.reason)
341
+ overlap_notes.extend(fanout_warnings(prediction))
342
+ if staleness_note:
343
+ overlap_notes.append(staleness_note)
344
+ overlap_note = ("\n" + "\n".join(overlap_notes)) if overlap_notes else ""
330
345
  click.echo(
331
346
  f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}"
332
347
  f"{scope_downgrade_warning}{overlap_note}"
@@ -372,6 +387,121 @@ def _issue_body(repo_name: str, issue_number: int) -> str:
372
387
  return ""
373
388
 
374
389
 
390
+ def _live_issue_body(repo_github: str, issue_number: int) -> str | None:
391
+ """A live ``gh issue view`` body for the ONE entry actually being enqueued.
392
+
393
+ #2601: `_issue_body` above is a cache read by design — cheap, and correct
394
+ for the overwhelmingly common case (no ``## Files`` block at all) and for
395
+ every OTHER issue's declaration this module consults for a footprint. But
396
+ that same design let a `gh issue edit` made directly against the
397
+ tracker — bypassing `coord.state.edit_issue_content`'s cache mirror — go
398
+ unnoticed: the predictor kept citing the removed line forever, because
399
+ nothing had ever told the cache the edit happened.
400
+
401
+ Called ONLY for the candidate (see `_candidate_body`), and only when its
402
+ cached body already parses to a declaration — never on the common
403
+ empty-declaration path, so this does not reintroduce the per-``add``
404
+ GitHub round-trip the module was built to avoid.
405
+
406
+ Fails open like every other fetch here: ``None`` on any error, and the
407
+ caller falls back to the cached body.
408
+ """
409
+ if not repo_github:
410
+ return None
411
+ try:
412
+ from coord import github_ops # noqa: PLC0415
413
+
414
+ data = github_ops.get_issue(repo_github, int(issue_number))
415
+ except Exception: # noqa: BLE001 — see docstring
416
+ return None
417
+ if not data:
418
+ return None
419
+ return str(data.get("body") or "")
420
+
421
+
422
+ def _mirror_issue_body(repo_name: str, issue_number: int, body: str) -> None:
423
+ """Write a freshly live-fetched body back into the local cache (#2601).
424
+
425
+ Best-effort, mirroring `_edit_issue_content_local`'s own cache write: the
426
+ live fetch above is authoritative, this only makes the freshness outlive
427
+ the one predict call it was fetched for — a later `add` for a DIFFERENT
428
+ issue that compares declaration-to-declaration against this one, or
429
+ `overlap-report`, should see the same answer without a second round-trip.
430
+ """
431
+ try:
432
+ from coord.db import get_connection # noqa: PLC0415
433
+
434
+ conn = get_connection()
435
+ conn.execute(
436
+ "UPDATE issues SET body = ?, synced_at = ? "
437
+ "WHERE repo_name = ? AND number = ?",
438
+ (body, time.time(), repo_name, int(issue_number)),
439
+ )
440
+ conn.commit()
441
+ except Exception: # noqa: BLE001 — the cache write is advisory
442
+ pass
443
+
444
+
445
+ def _cached_body_age_note(repo_name: str, issue_number: int) -> str:
446
+ """#2601 point 1's fallback: when a live re-read wasn't possible, say how
447
+ old the cached body actually is, so a stale prediction is at least
448
+ visible instead of silently trusted.
449
+ """
450
+ row = None
451
+ try:
452
+ from coord.db import get_connection # noqa: PLC0415
453
+
454
+ row = get_connection().execute(
455
+ "SELECT synced_at FROM issues WHERE repo_name = ? AND number = ?",
456
+ (repo_name, int(issue_number)),
457
+ ).fetchone()
458
+ except Exception: # noqa: BLE001 — an unreadable age is still worth flagging
459
+ pass
460
+ synced_at = row["synced_at"] if row is not None else None
461
+ if not synced_at:
462
+ return (
463
+ "note: predicted from a cached issue body of unknown age "
464
+ "(live refresh failed) — the declaration may be stale"
465
+ )
466
+ age = _age_str(max(0.0, time.time() - float(synced_at)))
467
+ return (
468
+ f"note: predicted from a cached issue body synced {age} ago "
469
+ "(live refresh failed) — the declaration may be stale"
470
+ )
471
+
472
+
473
+ def _candidate_body(
474
+ repo_name: str, issue_number: int, repo_github: str,
475
+ ) -> tuple[str, str]:
476
+ """This entry's OWN body — refreshed live when staleness could matter (#2601).
477
+
478
+ The natural correction to a bad prediction is editing the issue's ``##
479
+ Files`` block and re-adding. That did nothing (#2601) because the
480
+ predictor always read `_issue_body`'s cache, which a direct
481
+ ``gh issue edit`` never invalidates.
482
+
483
+ So the candidate gets one extra check the rest of the module does not:
484
+ if its cached body already parses to a declaration, re-read it live and
485
+ mirror the answer back into the cache. A body with NO cached declaration
486
+ skips the live round-trip entirely — there is nothing to have gone
487
+ stale, and a declaration ADDED since the last sync just falls back to
488
+ today's "no prediction" (rule 3), exactly as an unreadable body would.
489
+
490
+ Returns ``(body, staleness_note)``: *body* is what prediction runs
491
+ against; *staleness_note* is non-empty only when a live re-read was
492
+ warranted but failed.
493
+ """
494
+ cached = _issue_body(repo_name, issue_number)
495
+ if not parse_declared_files(cached):
496
+ return cached, ""
497
+ fresh = _live_issue_body(repo_github, issue_number)
498
+ if fresh is None:
499
+ return cached, _cached_body_age_note(repo_name, issue_number)
500
+ if fresh != cached:
501
+ _mirror_issue_body(repo_name, issue_number, fresh)
502
+ return fresh, ""
503
+
504
+
375
505
  def _repo_coordinates(config_path: Path, repo: str) -> tuple[str, str] | None:
376
506
  """``(github slug, default branch)`` for *repo*, or ``None``."""
377
507
  try:
@@ -387,27 +517,38 @@ def _repo_coordinates(config_path: Path, repo: str) -> tuple[str, str] | None:
387
517
 
388
518
  def _predict_overlap(
389
519
  config_path: Path, repo: str, issue: int, existing_entries: list[QueueEntry],
390
- ) -> Prediction:
520
+ ) -> tuple[Prediction, str]:
391
521
  """Compare this issue's declared files against work already in flight.
392
522
 
393
523
  Same-repo only: two repos' paths cannot collide, and comparing them would
394
524
  manufacture overlaps out of a shared filename. In-flight branches are
395
525
  checked first (ground truth); a queued entry with no branch yet is
396
526
  compared declaration-to-declaration, and only when it has one.
527
+
528
+ Returns ``(prediction, staleness_note)`` — see `_candidate_body` for when
529
+ the note is non-empty. Every OTHER body this consults (an in-flight
530
+ branch's own declaration, an unrelated queued entry's) still comes from
531
+ the plain cache: re-reading fifteen bodies live on every `add` is exactly
532
+ the cost the module's docstring rejects, and #2601's own report is about
533
+ correcting THIS entry's declaration, not anyone else's.
397
534
  """
398
535
  coordinates = _repo_coordinates(config_path, repo)
399
536
  if coordinates is None:
400
- return Prediction()
537
+ return Prediction(), ""
401
538
  repo_github, base_branch = coordinates
402
539
 
540
+ candidate_body, staleness_note = _candidate_body(repo, issue, repo_github)
541
+
403
542
  def body_fetcher(repo_name: str, number: int) -> str:
543
+ if repo_name == repo and number == issue:
544
+ return candidate_body
404
545
  return _issue_body(repo_name, number)
405
546
 
406
547
  candidate = collect_candidate_files(repo, issue, body_fetcher)
407
548
  if not candidate:
408
549
  # Rule 3: no prediction is a valid answer. Nothing is fetched, nothing
409
550
  # is compared, and the add is byte-identical to the pre-#2247 one.
410
- return Prediction()
551
+ return Prediction(), ""
411
552
 
412
553
  key = entry_key(repo, issue)
413
554
  footprints = inflight_footprints(
@@ -422,7 +563,7 @@ def _predict_overlap(
422
563
  and e.state not in TERMINAL_QUEUE_STATES
423
564
  ]
424
565
  footprints.extend(declared_footprints(queued, body_fetcher, exclude_keys=covered))
425
- return predict_overlap(candidate, footprints, exclude_keys={key})
566
+ return predict_overlap(candidate, footprints, exclude_keys={key}), staleness_note
426
567
 
427
568
 
428
569
  def _applicable_auto_after(
@@ -1127,6 +1127,7 @@ def milestone_dispatch_cmd(
1127
1127
  _predict_overlap,
1128
1128
  _record_overlap_prediction,
1129
1129
  )
1130
+ from coord.overlap_predict import fanout_warnings # noqa: PLC0415
1130
1131
  from coord.drive_queue import ( # noqa: PLC0415
1131
1132
  QueueError,
1132
1133
  entries_from_rows,
@@ -1150,7 +1151,7 @@ def milestone_dispatch_cmd(
1150
1151
  click.echo(f" {key}: not queued: {exc}", err=True)
1151
1152
  failures += 1
1152
1153
  continue
1153
- prediction = _predict_overlap(
1154
+ prediction, staleness_note = _predict_overlap(
1154
1155
  config_path, repo_entry.name, qe.issue_number, existing
1155
1156
  )
1156
1157
  auto_after = _applicable_auto_after(
@@ -1163,7 +1164,16 @@ def milestone_dispatch_cmd(
1163
1164
  repo_entry.name, qe.issue_number, prediction, auto_after
1164
1165
  )
1165
1166
  suffix = f" after {', '.join(after)}" if after else ""
1166
- overlap_note = f"\n {prediction.reason}" if auto_after else ""
1167
+ # #2601: same notes `drive-queue add` surfaces — the applied reason,
1168
+ # any high-fanout directory-token warning, and a staleness note when
1169
+ # this entry's own body could only be read from cache.
1170
+ notes = []
1171
+ if auto_after:
1172
+ notes.append(prediction.reason)
1173
+ notes.extend(fanout_warnings(prediction))
1174
+ if staleness_note:
1175
+ notes.append(staleness_note)
1176
+ overlap_note = ("\n " + "\n ".join(notes)) if notes else ""
1167
1177
  click.echo(f" queued {key}{suffix}{overlap_note}")
1168
1178
  queued += 1
1169
1179
 
@@ -45,6 +45,16 @@ author's own declaration. The seam for it is
45
45
  one up yet, because rule 3 says a missing prediction is fine and a *bad* one
46
46
  is not. Ship the cheap, exact source first and let the recorded accuracy
47
47
  (see :func:`classify_outcome`) justify adding a fuzzier one.
48
+
49
+ DELIBERATELY NOT IMPLEMENTED (#2601): a hardcoded exclusion list for
50
+ "universal" directory tokens (``tests/``, ``docs/``) that every issue touches.
51
+ It was considered — #2601 found that a single bare ``tests/`` declaration
52
+ chained one issue behind fourteen others that each named a specific,
53
+ disjoint file — but excluding it outright would make rule 1 lie: those
54
+ fourteen ARE what :func:`paths_overlap`'s directory rule says they are, a
55
+ match. The chosen fix is :func:`fanout_warnings`, which leaves the ORDER
56
+ alone and instead tells the author their token was too broad to carry much
57
+ signal, so they can narrow it on the next ``add``.
48
58
  """
49
59
 
50
60
  from __future__ import annotations
@@ -345,6 +355,47 @@ def predict_overlap(
345
355
  return Prediction(predicted_files=files, overlaps=tuple(overlaps))
346
356
 
347
357
 
358
+ # Above this many DISTINCT entries hit by one declared directory token, the
359
+ # match is far more likely a token that happens to be common across the whole
360
+ # repo (``tests/``, ``docs/``) than a deliberate "this covers one feature's
361
+ # tests" declaration. #2601's incident was 14 against a threshold this
362
+ # conservative; two or three files genuinely clustered under one directory is
363
+ # unremarkable and must not warn.
364
+ FANOUT_WARN_THRESHOLD = 3
365
+
366
+
367
+ def fanout_warnings(
368
+ prediction: Prediction, *, threshold: int = FANOUT_WARN_THRESHOLD,
369
+ ) -> list[str]:
370
+ """Declared directory tokens that matched implausibly many entries (#2601).
371
+
372
+ :func:`paths_overlap`'s directory rule — a trailing-slash declaration
373
+ covers everything beneath it — is deliberate: it is the one
374
+ generalisation an author can write down unambiguously. But a token that
375
+ is common across the whole repo (``tests/``, ``docs/``) satisfies that
376
+ rule while carrying almost no signal: #2601 watched one bare ``tests/``
377
+ declaration chain an issue behind fourteen others it never actually
378
+ conflicted with.
379
+
380
+ This does NOT change the ORDER — rule 1 ("order, never refuse") holds
381
+ regardless of fanout; every one of those fourteen edges is still applied.
382
+ It only surfaces the count, so an author can tell a token was too broad
383
+ and narrow it to a specific file on the next ``add``.
384
+ """
385
+ counts: dict[str, int] = {}
386
+ for overlap in prediction.overlaps:
387
+ for path in overlap.files:
388
+ if path.endswith("/"):
389
+ counts[path] = counts.get(path, 0) + 1
390
+ return [
391
+ f"warning: `{path}` matched {count} entries — did you mean a "
392
+ "specific file? (#2247 orders against all of them regardless — this "
393
+ "changes nothing, it only flags the token)"
394
+ for path, count in sorted(counts.items())
395
+ if count > threshold
396
+ ]
397
+
398
+
348
399
  # ── gathering the two sides ──────────────────────────────────────────────────
349
400
 
350
401
  # ``(repo_github, base, head) -> changed paths or None`` — same shape as
@@ -398,6 +398,105 @@ def test_an_inferred_edge_never_fails_an_add_it_would_cycle(cli, declare):
398
398
  assert queued(306)["after_json"] == []
399
399
 
400
400
 
401
+ # ── #2601: fanout warning + fresh-body re-read ───────────────────────────────
402
+
403
+
404
+ def test_a_bare_directory_declaration_warns_about_high_fanout(cli, declare):
405
+ # `tests/` matches every one of these disjoint, precisely-declared files —
406
+ # a real match under #2247's directory rule (still ORDERED, never
407
+ # refused), but a signal-free one that deserves a warning, not silence.
408
+ for i, number in enumerate((401, 402, 403, 404)):
409
+ declare(number, f"tests/test_worker_{i}.py")
410
+ assert cli("add", REPO, str(number)).exit_code == 0
411
+
412
+ declare(405, "tests/")
413
+ result = cli("add", REPO, "405")
414
+
415
+ assert result.exit_code == 0, result.output
416
+ assert "warning:" in result.output
417
+ assert "`tests/`" in result.output
418
+ assert "4 entries" in result.output
419
+ # ORDER, never REFUSE — every one of the four is still applied.
420
+ assert len(queued(405)["after_json"]) == 4
421
+
422
+
423
+ def test_a_directory_declaration_under_the_fanout_threshold_does_not_warn(cli, declare):
424
+ declare(410, "tests/test_a.py")
425
+ declare(411, "tests/test_b.py")
426
+ assert cli("add", REPO, "410").exit_code == 0
427
+ assert cli("add", REPO, "411").exit_code == 0
428
+
429
+ declare(412, "tests/")
430
+ result = cli("add", REPO, "412")
431
+
432
+ assert result.exit_code == 0, result.output
433
+ assert "warning:" not in result.output
434
+
435
+
436
+ def test_editing_the_issue_live_narrows_a_stale_bare_directory_declaration(
437
+ cli, declare, monkeypatch,
438
+ ):
439
+ # #2601: the cache still holds the old, bare `tests/` declaration — but
440
+ # the author has since edited the issue directly on the tracker (`gh
441
+ # issue edit`, which never mirrors into coord's cache) to a specific file
442
+ # that touches neither #510 nor #511. A re-`add` must predict from the
443
+ # LIVE body, not the stale cached one that would otherwise chain it
444
+ # behind both.
445
+ declare(510, "tests/test_a.py")
446
+ declare(511, "tests/test_b.py")
447
+ assert cli("add", REPO, "510").exit_code == 0
448
+ assert cli("add", REPO, "511").exit_code == 0
449
+
450
+ declare(512, "tests/")
451
+ monkeypatch.setattr(
452
+ "coord.github_ops.get_issue",
453
+ lambda repo, number: {"body": "## Files\n- `coord/only_mine.py`\n"},
454
+ )
455
+
456
+ result = cli("add", REPO, "512")
457
+
458
+ assert result.exit_code == 0, result.output
459
+ assert queued(512)["after_json"] == []
460
+ assert "predicted file overlap" not in result.output
461
+ assert "warning:" not in result.output
462
+ # The live body is mirrored into the cache, not just used for this call.
463
+ from coord.db import get_connection
464
+
465
+ row = get_connection().execute(
466
+ "SELECT body FROM issues WHERE repo_name = ? AND number = ?", (REPO, 512),
467
+ ).fetchone()
468
+ assert "only_mine.py" in row["body"]
469
+
470
+
471
+ def test_a_live_refresh_failure_falls_back_to_cache_with_a_staleness_note(
472
+ cli, declare, monkeypatch,
473
+ ):
474
+ declare(520, "coord/only_mine.py")
475
+ monkeypatch.setattr(
476
+ "coord.github_ops.get_issue",
477
+ lambda repo, number: (_ for _ in ()).throw(RuntimeError("gh unreachable")),
478
+ )
479
+
480
+ result = cli("add", REPO, "520")
481
+
482
+ assert result.exit_code == 0, result.output
483
+ assert "note: predicted from a cached issue body" in result.output
484
+
485
+
486
+ def test_an_issue_with_no_cached_declaration_never_triggers_a_live_fetch(
487
+ cli, monkeypatch,
488
+ ):
489
+ calls: list[int] = []
490
+ monkeypatch.setattr(
491
+ "coord.github_ops.get_issue",
492
+ lambda repo, number: calls.append(number) or {"body": ""},
493
+ )
494
+ # No `## Files` block at all — the common case #2247's docstring is
495
+ # built around; this must stay a pure cache read with zero GitHub calls.
496
+ assert cli("add", REPO, "521").exit_code == 0
497
+ assert calls == []
498
+
499
+
401
500
  def test_overlap_report_scores_a_prediction_against_the_real_diffs(
402
501
  cli, declare, seed, branch_diff,
403
502
  ):
@@ -11,6 +11,7 @@ from __future__ import annotations
11
11
  from types import SimpleNamespace
12
12
 
13
13
  from coord.overlap_predict import (
14
+ FANOUT_WARN_THRESHOLD,
14
15
  OUTCOME_CONFIRMED,
15
16
  OUTCOME_FALSE_POSITIVE,
16
17
  OUTCOME_UNKNOWN,
@@ -22,6 +23,7 @@ from coord.overlap_predict import (
22
23
  classify_outcome,
23
24
  collect_candidate_files,
24
25
  declared_footprints,
26
+ fanout_warnings,
25
27
  inflight_assignments,
26
28
  inflight_footprints,
27
29
  parse_declared_files,
@@ -144,6 +146,54 @@ def test_excluded_keys_never_become_pre_reqs():
144
146
  assert not prediction
145
147
 
146
148
 
149
+ # ── fanout_warnings (#2601) ──────────────────────────────────────────────────
150
+
151
+
152
+ def _footprints_declaring_specific_files(count: int) -> list[Footprint]:
153
+ return [
154
+ Footprint(
155
+ key=f"{REPO}#{100 + i}",
156
+ issue_number=100 + i,
157
+ files=(f"tests/test_{i}.py",),
158
+ source=SOURCE_DECLARED,
159
+ )
160
+ for i in range(count)
161
+ ]
162
+
163
+
164
+ def test_a_bare_directory_declaration_matching_many_entries_warns():
165
+ footprints = _footprints_declaring_specific_files(FANOUT_WARN_THRESHOLD + 1)
166
+ prediction = predict_overlap(["tests/"], footprints)
167
+ assert len(prediction.overlaps) == FANOUT_WARN_THRESHOLD + 1
168
+
169
+ warnings = fanout_warnings(prediction)
170
+ assert len(warnings) == 1
171
+ assert "`tests/`" in warnings[0]
172
+ assert str(FANOUT_WARN_THRESHOLD + 1) in warnings[0]
173
+ # The order is NOT touched by the warning — every edge is still applied.
174
+ assert len(prediction.after_keys) == FANOUT_WARN_THRESHOLD + 1
175
+
176
+
177
+ def test_a_directory_declaration_at_or_under_the_threshold_does_not_warn():
178
+ footprints = _footprints_declaring_specific_files(FANOUT_WARN_THRESHOLD)
179
+ prediction = predict_overlap(["tests/"], footprints)
180
+ assert fanout_warnings(prediction) == []
181
+
182
+
183
+ def test_a_specific_file_match_never_warns_regardless_of_count():
184
+ footprints = [
185
+ Footprint(
186
+ key=f"{REPO}#{200 + i}",
187
+ issue_number=200 + i,
188
+ files=("coord/drive_queue.py",),
189
+ source=SOURCE_DECLARED,
190
+ )
191
+ for i in range(FANOUT_WARN_THRESHOLD + 5)
192
+ ]
193
+ prediction = predict_overlap(["coord/drive_queue.py"], footprints)
194
+ assert fanout_warnings(prediction) == []
195
+
196
+
147
197
  def test_audit_details_carry_both_sides_of_the_claim():
148
198
  prediction = Prediction(
149
199
  predicted_files=("coord/a.py",),