code-coordinator 0.5.315__tar.gz → 0.5.316__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (818) hide show
  1. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/github_ops.py +24 -2
  5. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reconcile.py +150 -16
  6. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/serve_app.py +6 -1
  7. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/state.py +135 -0
  8. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_merges.py +353 -4
  9. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/test.yml +0 -0
  21. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.gitignore +0 -0
  22. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/CLAUDE.md +0 -0
  23. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/GOAL.md +0 -0
  24. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/LICENSE +0 -0
  25. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/MANIFEST.in +0 -0
  26. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/README.md +0 -0
  27. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/SOURCES.txt +0 -0
  28. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/scm_file_list.json +0 -0
  32. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent.py +0 -0
  38. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent_app.py +0 -0
  39. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent_update.py +0 -0
  40. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/.gitignore +0 -0
  41. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/agents/work.md +0 -0
  42. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/approved_work.py +0 -0
  44. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_fix.py +0 -0
  55. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/cli.py +0 -0
  60. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/client.py +0 -0
  61. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/__init__.py +0 -0
  62. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/_common.py +0 -0
  63. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/acceptance.py +0 -0
  64. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/agent_ops.py +0 -0
  65. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/audit.py +0 -0
  66. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/chat.py +0 -0
  67. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/dispatch.py +0 -0
  68. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/dispatch_workers.py +0 -0
  69. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/drive.py +0 -0
  70. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/drive_queue.py +0 -0
  71. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/gate_a.py +0 -0
  72. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/gates.py +0 -0
  73. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/issues.py +0 -0
  74. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/lifecycle.py +0 -0
  75. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/machine.py +0 -0
  76. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/milestone.py +0 -0
  78. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/plan_followup.py +0 -0
  79. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/plans.py +0 -0
  80. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/portal.py +0 -0
  81. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/pr.py +0 -0
  82. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/store_migrate.py +0 -0
  91. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/config.py +0 -0
  96. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/config_reload.py +0 -0
  97. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/confirm_test.py +0 -0
  98. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/conflict_fix.py +0 -0
  99. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dao.py +0 -0
  100. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/__init__.py +0 -0
  101. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/fixture.py +0 -0
  102. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/index.html +0 -0
  103. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/server.py +0 -0
  104. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/terminal.py +0 -0
  105. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/db.py +0 -0
  106. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dead_end.py +0 -0
  107. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/decomposition_chat.py +0 -0
  108. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/README.md +0 -0
  109. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-agent.service +0 -0
  110. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.service +0 -0
  111. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.sh +0 -0
  112. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.timer +0 -0
  113. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-drive-queue.service +0 -0
  114. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-drive-queue.timer +0 -0
  115. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-failure-notify.service +0 -0
  116. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-fleet-watchdog.service +0 -0
  117. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  118. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-notify.service +0 -0
  119. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-notify.timer +0 -0
  120. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-propagate.service +0 -0
  121. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-propagate.timer +0 -0
  122. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-window.service +0 -0
  123. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-window.timer +0 -0
  124. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-serve.service +0 -0
  125. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web-dist-build.service +0 -0
  126. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web-dist-build.timer +0 -0
  127. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web.service +0 -0
  128. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deprecation_telemetry.py +0 -0
  131. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deps.py +0 -0
  132. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/diagnose.py +0 -0
  133. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dispatch.py +0 -0
  134. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dist_name.py +0 -0
  135. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive.py +0 -0
  136. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive_queue.py +0 -0
  137. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/events.py +0 -0
  139. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/github_throttle.py +0 -0
  149. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/goal.py +0 -0
  150. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/graph_health.py +0 -0
  151. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/__init__.py +0 -0
  152. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/aggregate.py +0 -0
  153. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/__init__.py +0 -0
  154. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/_ci_pin.py +0 -0
  155. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/agent_install.py +0 -0
  156. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/cargo_targets.py +0 -0
  157. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/claude_binary.py +0 -0
  158. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  159. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/coord_web_ci_pin.py +0 -0
  160. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/deploy_lane_facts.py +0 -0
  161. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/disk.py +0 -0
  162. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_board.py +0 -0
  163. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  164. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_phantom.py +0 -0
  165. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_unit_drift.py +0 -0
  166. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/graph.py +0 -0
  167. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/graphify_cli.py +0 -0
  168. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/index_lock.py +0 -0
  169. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/issues_sync_staleness.py +0 -0
  170. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/plan_usage.py +0 -0
  171. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/release_cordon.py +0 -0
  172. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/repo_state.py +0 -0
  173. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/spawned_coord.py +0 -0
  174. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/stalled_pipeline.py +0 -0
  175. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/timer_active.py +0 -0
  176. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/toolchain.py +0 -0
  177. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/unit_drift.py +0 -0
  178. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/unit_enablement.py +0 -0
  179. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/wedged_drive_queue.py +0 -0
  180. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/issues_sync_status.py +0 -0
  194. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/liveness_auditor.py +0 -0
  195. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/machine_onboard.py +0 -0
  196. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/machine_pause.py +0 -0
  197. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/merge_queue.py +0 -0
  198. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_chat.py +0 -0
  199. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_dispatch.py +0 -0
  200. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_gate.py +0 -0
  201. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_order.py +0 -0
  202. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/mock_author.py +0 -0
  203. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/models.py +0 -0
  204. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/network.py +0 -0
  205. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/new_issue_chat.py +0 -0
  206. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/__init__.py +0 -0
  207. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/baseline.py +0 -0
  208. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/cli.py +0 -0
  209. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/collect.py +0 -0
  210. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/digest.py +0 -0
  211. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/models.py +0 -0
  212. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/predicate.py +0 -0
  213. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/service.py +0 -0
  214. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/store.py +0 -0
  215. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/transport.py +0 -0
  216. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notify.py +0 -0
  217. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/openapi.py +0 -0
  218. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/overlap_fence.py +0 -0
  219. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/overlap_predict.py +0 -0
  220. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/parentage.py +0 -0
  221. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/parentage_github.py +0 -0
  222. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/pipeline.py +0 -0
  223. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/plan_parser.py +0 -0
  224. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/plans.py +0 -0
  225. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/platform_paths.py +0 -0
  226. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_bridge.py +0 -0
  227. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_store.py +0 -0
  228. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_sync.py +0 -0
  229. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/pr_body_lint.py +0 -0
  230. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/prereqs.py +0 -0
  231. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reconcile_tick.py +0 -0
  239. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/refine_chat.py +0 -0
  240. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_cordon.py +0 -0
  241. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_propagate.py +0 -0
  242. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_verify.py +0 -0
  243. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_window.py +0 -0
  244. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/repo_edit.py +0 -0
  245. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/repo_onboard.py +0 -0
  246. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reports.py +0 -0
  247. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/rest_schema.py +0 -0
  248. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/revalidate.py +0 -0
  249. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/review.py +0 -0
  250. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/scorecard.py +0 -0
  251. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/self_health.py +0 -0
  252. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/release-now/SKILL.md +0 -0
  259. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/store_migrate.py +0 -0
  268. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_author.py +0 -0
  269. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_chat.py +0 -0
  270. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_orchestrator.py +0 -0
  271. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_report.py +0 -0
  272. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/tui_release.py +0 -0
  273. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage.py +0 -0
  274. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage_limits.py +0 -0
  275. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage_rollup.py +0 -0
  276. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/worker_events.py +0 -0
  277. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coordinator.example.yml +0 -0
  278. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-agent.service +0 -0
  279. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.service +0 -0
  280. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.sh +0 -0
  281. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.timer +0 -0
  282. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-drive-queue.service +0 -0
  283. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-drive-queue.timer +0 -0
  284. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-failure-notify.service +0 -0
  285. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-failure-notify.sh +0 -0
  286. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-fleet-watchdog.service +0 -0
  287. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-fleet-watchdog.timer +0 -0
  288. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-notify.service +0 -0
  289. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-notify.timer +0 -0
  290. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-propagate.service +0 -0
  291. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-propagate.timer +0 -0
  292. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-window.service +0 -0
  293. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-window.timer +0 -0
  294. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-serve.service +0 -0
  295. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.service +0 -0
  296. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.sh +0 -0
  297. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.timer +0 -0
  298. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-rollback.sh +0 -0
  299. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web.service +0 -0
  300. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/node-shim.sh +0 -0
  301. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_TUI_CI.md +0 -0
  302. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  303. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_CI.md +0 -0
  304. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_DIST.md +0 -0
  305. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  306. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/AGENT_OPERATIONS.md +0 -0
  307. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ARCHITECTURE.md +0 -0
  308. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ARCH_SECURITY_GATES.md +0 -0
  309. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/COCKPIT.md +0 -0
  310. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/COST_DISCIPLINE.md +0 -0
  312. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CROSS_PLATFORM.md +0 -0
  313. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CUSTOMER_FACING_APPS.md +0 -0
  314. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CUSTOMER_PORTAL.md +0 -0
  315. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/DRIVE_QUEUE.md +0 -0
  316. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/EPHEMERAL_WORKERS.md +0 -0
  317. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/FORGE_MIGRATION.md +0 -0
  318. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/GRAPHIFY_SETUP.md +0 -0
  319. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ISSUE_GUIDANCE.md +0 -0
  320. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/MAC_MINI.md +0 -0
  321. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  322. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/NOTIFIER.md +0 -0
  323. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPENCODE_VERIFICATION.md +0 -0
  324. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPERATING_GOTCHAS.md +0 -0
  325. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPERATOR_GUIDES.md +0 -0
  326. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ORACLE_LOOP.md +0 -0
  327. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PHONE_WEBAPP.md +0 -0
  328. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PIPELINE_V2.md +0 -0
  329. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PLATFORM_EVOLUTION.md +0 -0
  330. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/SECOND_BACKEND.md +0 -0
  331. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/STORE_SERVICE.md +0 -0
  332. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  333. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/WEB_CONTROL_CENTER.md +0 -0
  334. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/WSL_WINDOWS_WORKER.md +0 -0
  335. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/README.md +0 -0
  336. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/_tokens.css +0 -0
  337. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/issue-detail.html +0 -0
  338. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/pipeline-narrow.html +0 -0
  339. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/pipeline-wide.html +0 -0
  340. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/graphify-out/.gitignore +0 -0
  341. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/install-agent.sh +0 -0
  342. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/pyproject.toml +0 -0
  343. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/audit_review_verdict_overrides.py +0 -0
  344. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  345. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/build-worker-image.sh +0 -0
  346. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/coordinator-machine.py +0 -0
  347. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/epic-down.sh +0 -0
  348. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/epic-up.sh +0 -0
  349. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/preflight.sh +0 -0
  350. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/provision-worker.sh +0 -0
  351. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  352. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  353. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/verify-github-token.sh +0 -0
  354. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/check_gh_argv_containment.py +0 -0
  355. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/codegen.py +0 -0
  356. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-test-runner.sh +0 -0
  357. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  358. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  359. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  360. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  361. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-venv-rollback.sh +0 -0
  362. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/drive-batch.sh +0 -0
  363. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/extract-coord-tui.sh +0 -0
  364. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/fleet_watchdog.py +0 -0
  365. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/gen_board_fixture.py +0 -0
  366. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/gen_mock_index.py +0 -0
  367. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/next_release_tag.py +0 -0
  368. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/run_tests_in_populated_home.sh +0 -0
  369. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/run_tests_without_gh.sh +0 -0
  370. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/smoke_437_interactive.py +0 -0
  371. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_878_review_capture.py +0 -0
  372. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_release_published.py +0 -0
  373. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_release_wheel.py +0 -0
  374. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/setup.cfg +0 -0
  375. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/SMOKE_SET.md +0 -0
  376. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/__init__.py +0 -0
  377. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/conftest.py +0 -0
  378. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/contract.md +0 -0
  379. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/manifest.yml +0 -0
  380. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  381. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  382. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/contract.md +0 -0
  383. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  384. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  385. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/manifest.yml +0 -0
  386. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  387. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/tsconfig.json +0 -0
  388. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  389. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/backends.py +0 -0
  390. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/conftest.py +0 -0
  391. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/board-pipeline-basic.json +0 -0
  392. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  393. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  394. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  395. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  396. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/all_pass.json +0 -0
  397. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  398. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/mixed_fail.json +0 -0
  399. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  400. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  401. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/skip.json +0 -0
  402. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/truncated.json +0 -0
  403. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  404. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  405. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  406. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  407. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  408. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  409. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  410. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  411. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_acceptance.py +0 -0
  412. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_acceptance_drivers.py +0 -0
  413. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent.py +0 -0
  414. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_api_error.py +0 -0
  415. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_app.py +0 -0
  416. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_branch_base.py +0 -0
  417. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_branch_capture.py +0 -0
  418. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_config_free_1712.py +0 -0
  419. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_deploy_units_endpoint.py +0 -0
  420. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_dirty_worktree.py +0 -0
  421. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  422. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_graph_self_heal.py +0 -0
  423. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_health_h3.py +0 -0
  424. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_idle_restart.py +0 -0
  425. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_push_failure.py +0 -0
  426. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_reap.py +0 -0
  427. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_repos_and_pull.py +0 -0
  428. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_restart_services_endpoint.py +0 -0
  429. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_skills_self_heal.py +0 -0
  430. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_startup_diagnostics.py +0 -0
  431. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_update.py +0 -0
  432. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_update_bluegreen.py +0 -0
  433. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_usage_limit.py +0 -0
  434. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_zero_commit.py +0 -0
  435. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ambient_home_isolation.py +0 -0
  436. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_dependency_busy_2804.py +0 -0
  437. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_reject_plan.py +0 -0
  438. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_usage_gate.py +0 -0
  439. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approved_work_2532.py +0 -0
  440. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_assignment_already_recorded_daemon.py +0 -0
  441. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_log.py +0 -0
  442. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_outcome.py +0 -0
  443. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_query.py +0 -0
  444. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_auto_loop.py +0 -0
  445. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_auto_release_publish_2035.py +0 -0
  446. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_backend_selection.py +0 -0
  447. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_base_checkout_restore.py +0 -0
  448. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_block_log.py +0 -0
  449. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_cap_762.py +0 -0
  450. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_fixture.py +0 -0
  451. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_read_path.py +0 -0
  452. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_schema.py +0 -0
  453. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_service.py +0 -0
  454. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_state.py +0 -0
  455. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_wire.py +0 -0
  456. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_brain.py +0 -0
  457. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_branch_model.py +0 -0
  458. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_bug_intake.py +0 -0
  459. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_build_worker_image_env_update.py +0 -0
  460. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cargo_cache.py +0 -0
  461. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_check_gh_argv_containment.py +0 -0
  462. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_acceptance_gate_1950.py +0 -0
  463. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_fix.py +0 -0
  464. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_gitlab.py +0 -0
  465. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_parity_2091.py +0 -0
  466. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_store.py +0 -0
  467. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_claim.py +0 -0
  468. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_claude_md_budget.py +0 -0
  469. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_acceptance.py +0 -0
  470. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign.py +0 -0
  471. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  472. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_interactive_remote.py +0 -0
  473. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_provider.py +0 -0
  474. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  475. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_audit.py +0 -0
  476. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_chat_continue.py +0 -0
  477. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_decide.py +0 -0
  478. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_capability_rules.py +0 -0
  479. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_config_provenance.py +0 -0
  480. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_forge_availability.py +0 -0
  481. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_graph.py +0 -0
  482. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_self.py +0 -0
  483. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_test_coverage.py +0 -0
  484. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor.py +0 -0
  485. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor_config_free_1801.py +0 -0
  486. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  487. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_drive.py +0 -0
  488. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_drive_queue.py +0 -0
  489. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_escalate.py +0 -0
  490. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_fix_headless_review.py +0 -0
  491. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_gate_a.py +0 -0
  492. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_install_drift.py +0 -0
  493. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_install_skills.py +0 -0
  494. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_comment.py +0 -0
  495. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_create_label.py +0 -0
  496. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_reopen.py +0 -0
  497. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_view_list.py +0 -0
  498. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_merge.py +0 -0
  499. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_assign.py +0 -0
  500. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_capture.py +0 -0
  501. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_chat_add_child.py +0 -0
  502. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_dispatch.py +0 -0
  503. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_gate_b.py +0 -0
  504. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_gate_c.py +0 -0
  505. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_order.py +0 -0
  506. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  507. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_ship.py +0 -0
  508. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_network.py +0 -0
  509. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_new_issue_chat.py +0 -0
  510. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_plans.py +0 -0
  511. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_portal.py +0 -0
  512. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_pr.py +0 -0
  513. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_pull_artifact.py +0 -0
  514. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_queue.py +0 -0
  515. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_reattach_sessions.py +0 -0
  516. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_refine_board.py +0 -0
  517. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_preflight.py +0 -0
  518. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_propagate.py +0 -0
  519. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_window.py +0 -0
  520. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_repo_2220.py +0 -0
  521. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  522. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_contested_tag.py +0 -0
  526. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_client_resource_migration_1946.py +0 -0
  538. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_commands_common.py +0 -0
  539. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_comments.py +0 -0
  540. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_completion_summary.py +0 -0
  541. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config.py +0 -0
  542. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_acceptance.py +0 -0
  543. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_audit.py +0 -0
  544. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_pricing.py +0 -0
  545. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  546. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_usage_gate.py +0 -0
  547. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_confirm_test.py +0 -0
  548. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_conflict_fix.py +0 -0
  549. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_conflict_fix_semantic.py +0 -0
  550. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  551. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test.py +0 -0
  552. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  553. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_baseline.py +0 -0
  554. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_populated_home.py +0 -0
  555. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_routing.py +0 -0
  556. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_toolchain.py +0 -0
  557. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_uat.py +0 -0
  558. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_web_sse_restart_live.py +0 -0
  559. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coordinator_machine.py +0 -0
  560. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cross_platform_imports.py +0 -0
  561. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dao.py +0 -0
  562. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard.py +0 -0
  563. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_fixture.py +0 -0
  564. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_terminal.py +0 -0
  565. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_terminal_live.py +0 -0
  566. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_db.py +0 -0
  567. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dead_end.py +0 -0
  568. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_decomposition_chat.py +0 -0
  569. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_db_backup.py +0 -0
  570. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_web_dist.py +0 -0
  571. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_web_rollback.py +0 -0
  572. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_drive_queue_unit.py +0 -0
  573. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_failure_notify_unit.py +0 -0
  574. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_manifest.py +0 -0
  575. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_notify_unit.py +0 -0
  576. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_units_lane.py +0 -0
  577. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_web_unit.py +0 -0
  578. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deprecation_telemetry.py +0 -0
  579. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deps.py +0 -0
  580. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_diagnose.py +0 -0
  581. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dispatch.py +0 -0
  582. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dispatch_target_validation.py +0 -0
  583. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dist_name.py +0 -0
  584. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_done_housekeeping.py +0 -0
  585. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive.py +0 -0
  586. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue.py +0 -0
  587. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_blocked_rendering.py +0 -0
  588. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_launch_argv.py +0 -0
  589. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  590. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_roll_pending.py +0 -0
  591. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  592. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_state.py +0 -0
  593. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_tmux.py +0 -0
  594. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_capability_detection.py +0 -0
  595. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  596. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_image_provenance.py +0 -0
  597. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_errors.py +0 -0
  598. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_events.py +0 -0
  599. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_failure_class.py +0 -0
  600. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_filelock.py +0 -0
  601. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  602. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fix_of_force_override.py +0 -0
  603. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_config_health.py +0 -0
  604. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_health_probes.py +0 -0
  605. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_health_snapshot.py +0 -0
  606. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_watchdog.py +0 -0
  607. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_forge_availability.py +0 -0
  608. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_freshness.py +0 -0
  609. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_a.py +0 -0
  610. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_b.py +0 -0
  611. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_snapshot_staleness.py +0 -0
  612. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gates.py +0 -0
  613. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  614. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gen_mock_index.py +0 -0
  615. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_rust_fixture.py +0 -0
  616. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_rust_requests.py +0 -0
  617. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_types_fixture.py +0 -0
  618. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_github_ops.py +0 -0
  619. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_github_throttle.py +0 -0
  620. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_goal.py +0 -0
  621. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_graph_health.py +0 -0
  622. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_graph_selfheal_absent_2237.py +0 -0
  623. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_handoff.py +0 -0
  624. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_checks.py +0 -0
  625. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_cli.py +0 -0
  626. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_cli_graph.py +0 -0
  627. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_config.py +0 -0
  628. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_context.py +0 -0
  629. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_coord_tui_ci_pin.py +0 -0
  630. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_coord_web_ci_pin.py +0 -0
  631. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_deploy_lane_facts.py +0 -0
  632. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_fix.py +0 -0
  633. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_incident_regression.py +0 -0
  634. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_issues_sync_staleness.py +0 -0
  635. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_pypi.py +0 -0
  636. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_registry.py +0 -0
  637. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_release_cordon_probe.py +0 -0
  638. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_timer_active.py +0 -0
  639. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_toolchain.py +0 -0
  640. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_unit_drift.py +0 -0
  641. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_unit_enablement.py +0 -0
  642. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_wedged_drive_queue.py +0 -0
  643. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_hooks.py +0 -0
  644. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_human_attended_437.py +0 -0
  645. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_init.py +0 -0
  646. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_install_agent_venv_2911.py +0 -0
  647. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_integration.py +0 -0
  648. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_briefing_echo.py +0 -0
  649. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_pane_log_2541.py +0 -0
  650. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_prefill_state.py +0 -0
  651. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_session_relaunch.py +0 -0
  652. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_test_verdict_backstop.py +0 -0
  653. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_token_attribution.py +0 -0
  654. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_worktree.py +0 -0
  655. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_issue_store_seam.py +0 -0
  656. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_issues_sync_status.py +0 -0
  657. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_liveness_auditor.py +0 -0
  658. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_liveness_notify.py +0 -0
  659. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_lock_contention_ratchet.py +0 -0
  660. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_machine_onboard.py +0 -0
  661. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_machine_pause.py +0 -0
  662. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_merge_queue.py +0 -0
  663. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_merge_verify.py +0 -0
  664. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_chat.py +0 -0
  665. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_dispatch.py +0 -0
  666. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_gate.py +0 -0
  667. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_order.py +0 -0
  668. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_seam.py +0 -0
  669. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_mock_author.py +0 -0
  670. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_model_tiering.py +0 -0
  671. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_models.py +0 -0
  672. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_models_config_labels.py +0 -0
  673. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_needs_attention.py +0 -0
  674. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_network.py +0 -0
  675. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_new_issue_chat.py +0 -0
  676. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_next_release_tag.py +0 -0
  677. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_node_shim.py +0 -0
  678. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_baseline.py +0 -0
  679. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_cli.py +0 -0
  680. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_collect.py +0 -0
  681. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_config.py +0 -0
  682. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_drive_seam.py +0 -0
  683. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_isolation.py +0 -0
  684. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_predicate.py +0 -0
  685. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_service.py +0 -0
  687. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notify.py +0 -0
  688. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notify_drain.py +0 -0
  689. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_openapi.py +0 -0
  690. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_operational_defaults.py +0 -0
  691. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_overlap_fence.py +0 -0
  692. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_overlap_predict.py +0 -0
  693. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_packaged_deploy_units.py +0 -0
  694. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_parentage.py +0 -0
  695. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_paste_landed.py +0 -0
  696. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  697. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_pipeline.py +0 -0
  698. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_approve_plan_command.py +0 -0
  699. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_pr_command.py +0 -0
  700. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_review_command.py +0 -0
  701. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_only.py +0 -0
  702. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_parser.py +0 -0
  703. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_platform_paths.py +0 -0
  704. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_bridge.py +0 -0
  705. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_config.py +0 -0
  706. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_store.py +0 -0
  707. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_sync.py +0 -0
  708. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_pr_body_lint.py +0 -0
  709. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_prereqs.py +0 -0
  710. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_production_db_guard.py +0 -0
  711. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_progress.py +0 -0
  712. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_provider_seam.py +0 -0
  713. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers.py +0 -0
  714. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers_config_labels.py +0 -0
  715. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers_pty.py +0 -0
  716. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_py_rust_mirror_inventory.py +0 -0
  717. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_quiet_hours.py +0 -0
  718. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_quiet_hours_store_2146.py +0 -0
  719. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reap_merged_sessions.py +0 -0
  720. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reap_stale_interactive_tick.py +0 -0
  721. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile.py +0 -0
  722. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_branch.py +0 -0
  723. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_completions.py +0 -0
  724. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  725. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_no_agent_record.py +0 -0
  726. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_tick.py +0 -0
  727. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_usage_limit_done.py +0 -0
  728. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_refine_chat.py +0 -0
  729. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_2101.py +0 -0
  730. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  731. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_deadlock_2240.py +0 -0
  732. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_stuck_2490.py +0 -0
  733. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_propagate.py +0 -0
  734. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_propagate_threshold.py +0 -0
  735. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_roll_between_legs_2854.py +0 -0
  736. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_roll_window_handoff.py +0 -0
  737. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_unified_1242.py +0 -0
  738. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_verify.py +0 -0
  739. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_window.py +0 -0
  740. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_remote_auto_prune.py +0 -0
  741. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_remote_interactive_reaper.py +0 -0
  742. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_add.py +0 -0
  743. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_edit_2220.py +0 -0
  744. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_graph_fleet_2237.py +0 -0
  745. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_onboard_2220.py +0 -0
  746. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_report_result_push.py +0 -0
  747. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reports.py +0 -0
  748. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry.py +0 -0
  749. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry_advisory_1606.py +0 -0
  750. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry_type_1636.py +0 -0
  751. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_revalidate.py +0 -0
  752. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review.py +0 -0
  753. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_end_review_without_verdict.py +0 -0
  754. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_parse_failure_diagnostic.py +0 -0
  755. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_reaffirm.py +0 -0
  756. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_state.py +0 -0
  757. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_backstop.py +0 -0
  758. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_override_audit.py +0 -0
  759. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_relay.py +0 -0
  760. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_zero_commits.py +0 -0
  761. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_scoped_review_wiring.py +0 -0
  762. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_scorecard.py +0 -0
  763. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_self_health.py +0 -0
  764. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve.py +0 -0
  765. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve_app_board_trim.py +0 -0
  766. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve_rest_routes.py +0 -0
  767. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_session.py +0 -0
  768. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_slice_issue_attribution.py +0 -0
  769. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke.py +0 -0
  770. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke_live_checkout_restore.py +0 -0
  771. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke_workflow.py +0 -0
  772. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_spend_ceiling.py +0 -0
  773. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_spend_ceiling_coordinator.py +0 -0
  774. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_split.py +0 -0
  775. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_split_work.py +0 -0
  776. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_sql_dialect.py +0 -0
  777. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_sqlite_connect_ratchet.py +0 -0
  778. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stage_projection.py +0 -0
  779. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stale_busy_reviewer_697.py +0 -0
  780. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stalled_pipeline.py +0 -0
  781. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_state.py +0 -0
  782. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_state_review_findings_daemon.py +0 -0
  783. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_status_fleet_footer.py +0 -0
  784. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stop_1567.py +0 -0
  785. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_store_contract.py +0 -0
  786. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_store_migrate.py +0 -0
  787. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stuck.py +0 -0
  788. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  789. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_terminal_command.py +0 -0
  790. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_author.py +0 -0
  791. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_chat.py +0 -0
  792. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_orchestrator.py +0 -0
  793. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_report.py +0 -0
  794. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_verdict_parsing.py +0 -0
  795. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_verdict_transcript_floor.py +0 -0
  796. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_text_io_encoding_audit.py +0 -0
  797. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_board_audit.py +0 -0
  798. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_config_load_1080.py +0 -0
  799. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_daemon_routing_906.py +0 -0
  800. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_tmux_host.py +0 -0
  801. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_tmux_session.py +0 -0
  802. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_transcript_floor.py +0 -0
  803. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage.py +0 -0
  804. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage_limits.py +0 -0
  805. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage_rollup.py +0 -0
  806. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_venv_live_install_2121.py +0 -0
  807. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_version_single_source.py +0 -0
  808. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_watch.py +0 -0
  809. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  810. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_env_venv_isolation.py +0 -0
  811. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_events.py +0 -0
  812. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_image_pin_sync.py +0 -0
  813. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_safety.py +0 -0
  814. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_test_scoping.py +0 -0
  815. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worktree.py +0 -0
  816. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  817. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_write_parity.py +0 -0
  818. {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.315
3
+ Version: 0.5.316
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.315
3
+ Version: 0.5.316
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.315",
2
+ "tag": "0.5.316",
3
3
  "distance": 0,
4
- "node": "g12da3c4a4320f19ffd6f46fd6eb6b882a5ba5026",
4
+ "node": "g84875a2c21cee2157331b4a2f1e92ca1c9b812fe",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-31"
@@ -1892,7 +1892,9 @@ def list_remote_branch_names(repo: str) -> set[str]:
1892
1892
  }
1893
1893
 
1894
1894
 
1895
- def branch_exists_on_remote(repo: str, branch: str) -> bool:
1895
+ def branch_exists_on_remote(
1896
+ repo: str, branch: str, *, cache: dict | None = None
1897
+ ) -> bool:
1896
1898
  """Return True if `branch` currently exists on `repo` (owner/name) at GitHub.
1897
1899
 
1898
1900
  Uses a targeted ``gh api`` call rather than listing all branches. Fails
@@ -1903,7 +1905,27 @@ def branch_exists_on_remote(repo: str, branch: str) -> bool:
1903
1905
 
1904
1906
  Called by ``dispatch_review`` and ``_dispatch_fix`` (#586) to avoid
1905
1907
  routing a follow-on assignment to a machine that can't fetch the branch.
1906
- """
1908
+
1909
+ *cache* (#2989) is an optional caller-owned ``dict`` used to memoise the
1910
+ lookup for the duration of ONE sweep, mirroring
1911
+ :func:`work_is_terminal`'s ``cache=``. A single ``reconcile_board_merges``
1912
+ pass measured 1,304 ref lookups for only 851 distinct refs (1.53x
1913
+ redundancy) because sibling assignment rows — a work row and its
1914
+ conflict-fix, or a re-dispatch — legitimately share one branch. The
1915
+ cache is deliberately **per-pass and caller-scoped**, never module-level:
1916
+ branch existence is exactly the kind of fact that must be re-read on the
1917
+ next pass.
1918
+ """
1919
+ key = (repo, branch)
1920
+ if cache is not None and key in cache:
1921
+ return cache[key]
1922
+ result = _branch_exists_on_remote_uncached(repo, branch)
1923
+ if cache is not None:
1924
+ cache[key] = result
1925
+ return result
1926
+
1927
+
1928
+ def _branch_exists_on_remote_uncached(repo: str, branch: str) -> bool:
1907
1929
  try:
1908
1930
  _gh("api", f"repos/{repo}/git/refs/heads/{branch}",
1909
1931
  caller="github_ops.branch_exists_on_remote")
@@ -31,6 +31,23 @@ if TYPE_CHECKING:
31
31
  # and treating a huge, all-matching-so-far diff as inconclusive (fail open).
32
32
  _FALSE_MERGE_AUDIT_MAX_FILES = 20
33
33
 
34
+ # #2989: bounds the OUTER candidate set of that same sweep — the loop #2639
35
+ # left unbounded. Without it the set is proportional to project history
36
+ # (1,302 rows on the drive host, +1 per merge, never shrinking), re-probed
37
+ # every 30s. This is a per-pass ceiling applied newest-first as a backstop
38
+ # behind the persistent terminal marker (`state.mark_false_merge_audit_
39
+ # clean`); the older tail drains over subsequent passes as newer rows are
40
+ # confirmed and drop out permanently. Not applied to a targeted
41
+ # `--issue N` audit.
42
+ _FALSE_MERGE_AUDIT_MAX_ROWS = 50
43
+
44
+ # #2989: how often the sweep may run when the caller opts into throttling
45
+ # (the daemon's reconcile tick does; a manual `coord reconcile-merges` does
46
+ # not). It detects a rare, non-urgent condition — a merged-marked row whose
47
+ # branch still differs from base — which is an hourly sweep, not a
48
+ # twice-a-minute one.
49
+ _FALSE_MERGE_AUDIT_MIN_INTERVAL_SECONDS = 3600.0
50
+
34
51
 
35
52
  def _query_agent(host: str, port: int = AGENT_PORT, timeout: float = 5.0) -> dict | None:
36
53
  try:
@@ -2908,6 +2925,7 @@ def reconcile_board_merges(
2908
2925
  repo: str | None = None,
2909
2926
  issue: int | None = None,
2910
2927
  dry_run: bool = False,
2928
+ throttle_false_merge_audit: bool = False,
2911
2929
  ) -> list[str]:
2912
2930
  """Reconcile done work assignments against git/GitHub reality.
2913
2931
 
@@ -2970,7 +2988,14 @@ def reconcile_board_merges(
2970
2988
  catching a historical false ``status='merged'`` flip that predates this
2971
2989
  fix (or any future bug shaped like it) rather than leaving it invisible
2972
2990
  to every other diagnostic forever. See its own inline comment for the
2973
- full methodology and false-positive guards.)
2991
+ full methodology and false-positive guards.
2992
+
2993
+ #2989 bounds sweep (h)'s candidate set — it used to select every
2994
+ ``merged`` work-like row in project history and re-probe all of them on
2995
+ the daemon's 30s tick (97% of a pass's ``gh`` calls). Set
2996
+ *throttle_false_merge_audit* to run that sweep at most hourly; the
2997
+ daemon tick does, a manual ``coord reconcile-merges`` deliberately does
2998
+ not. See the inline block above ``_false_merge_candidates``.)
2974
2999
  """
2975
3000
  from coord import github_ops, state # noqa: PLC0415
2976
3001
 
@@ -3456,28 +3481,121 @@ def reconcile_board_merges(
3456
3481
  # this is a FLAG for a human to check, exactly like the manual sweep this
3457
3482
  # automates, not a verdict. Fail-open at every layer: any fetch failure
3458
3483
  # skips that row/file rather than either flagging or clearing it.
3459
- _false_merge_candidates = [
3460
- a
3461
- for a in board.active + board.completed
3462
- if a.status == "merged"
3463
- and a.branch
3464
- and (a.type in WORK_LIKE_TYPES or is_interactive_merge_session(a))
3465
- and (repo is None or a.repo_name == repo)
3466
- and (issue is None or a.issue_number == issue)
3467
- ]
3484
+ #
3485
+ # BOUNDING (#2989) — three mechanisms, applied in this order. Before
3486
+ # them this sweep selected EVERY `merged` work-like row in the board:
3487
+ # 1,302 rows on the drive host, proportional to project history rather
3488
+ # than to work in flight, re-probed on the daemon's 30s tick. Measured,
3489
+ # that was 1,304 of one pass's 1,346 `gh` invocations (97%), and the
3490
+ # generator behind the fleet-wide secondary rate limiting #2809/#2858/
3491
+ # #2934/#2977 all treated symptomatically. (#2639 had already capped
3492
+ # the inner per-file loop — the wrong loop; the outer candidate set was
3493
+ # left unbounded.)
3494
+ #
3495
+ # (1) CADENCE. This detects a rare, non-urgent condition — a
3496
+ # merged-marked row whose branch still differs from base, which is
3497
+ # recovered by a human days later regardless. Twice a minute is
3498
+ # absurd for that. The daemon tick passes
3499
+ # `throttle_false_merge_audit=True` and the sweep then runs at most
3500
+ # once an hour (~120x fewer passes on its own). A manual `coord
3501
+ # reconcile-merges` / `coord diagnose` never throttles: an operator
3502
+ # who asked for a sweep gets one, deterministically.
3503
+ # (2) TERMINAL MARKER. A clean verdict is clean forever (branch
3504
+ # deleted, merged PR at the tip, already an ancestor of base, or
3505
+ # content byte-identical on base — none of those un-happen for a
3506
+ # terminal row). Persisting it (`state.mark_false_merge_audit_
3507
+ # clean`) drops the row from the candidate list permanently, which
3508
+ # makes the set proportional to *unaudited* merges — bounded by
3509
+ # recent throughput, not project age. This is the real fix, and
3510
+ # the same discipline `coord.gate_snapshot`'s refresh already
3511
+ # states ("merged history is never refreshed").
3512
+ # (3) RECENCY CAP. A backstop for the first pass after this ships (and
3513
+ # for any board whose marker was lost): audit at most
3514
+ # `_FALSE_MERGE_AUDIT_MAX_ROWS` rows per pass, newest first. A
3515
+ # false merge that has gone unnoticed for two months is not being
3516
+ # caught by a 30-second sweep anyway; the older tail is simply
3517
+ # drained over the following passes as newer rows get marked.
3518
+ #
3519
+ # An explicit `--issue N` bypasses (2) and (3) entirely: a targeted
3520
+ # re-audit must always re-probe, so a previously-cleared row stays
3521
+ # re-checkable by hand. Nothing here changes what the sweep CONCLUDES,
3522
+ # only how many probes it takes to conclude it.
3523
+ _false_merge_targeted = issue is not None
3524
+ _run_false_merge_audit = True
3525
+ if throttle_false_merge_audit and not _false_merge_targeted:
3526
+ _last_run = state.get_false_merge_audit_last_run()
3527
+ if (time.time() - _last_run) < _FALSE_MERGE_AUDIT_MIN_INTERVAL_SECONDS:
3528
+ _run_false_merge_audit = False
3529
+
3530
+ _false_merge_candidates: list[Assignment] = []
3531
+ if _run_false_merge_audit:
3532
+ _false_merge_candidates = [
3533
+ a
3534
+ for a in board.active + board.completed
3535
+ if a.status == "merged"
3536
+ and a.branch
3537
+ and (a.type in WORK_LIKE_TYPES or is_interactive_merge_session(a))
3538
+ and (repo is None or a.repo_name == repo)
3539
+ and (issue is None or a.issue_number == issue)
3540
+ # #2989: a row whose repo has no GitHub mapping is unprobeable —
3541
+ # drop it HERE rather than after the recency cap, so a pile of
3542
+ # orphaned rows (a repo since removed from coordinator.yml) can't
3543
+ # eat the cap's slots and starve the rows we can actually audit.
3544
+ and getattr(config.repo(a.repo_name), "github", None)
3545
+ ]
3546
+ if not _false_merge_targeted:
3547
+ _already_clean = state.load_false_merge_audit_clean()
3548
+ if _already_clean:
3549
+ _false_merge_candidates = [
3550
+ a
3551
+ for a in _false_merge_candidates
3552
+ if a.assignment_id not in _already_clean
3553
+ ]
3554
+ if len(_false_merge_candidates) > _FALSE_MERGE_AUDIT_MAX_ROWS:
3555
+ _false_merge_candidates.sort(
3556
+ key=lambda a: (a.finished_at or a.dispatched_at or 0.0),
3557
+ reverse=True,
3558
+ )
3559
+ _false_merge_candidates = _false_merge_candidates[
3560
+ :_FALSE_MERGE_AUDIT_MAX_ROWS
3561
+ ]
3562
+
3563
+ if (
3564
+ _run_false_merge_audit
3565
+ and throttle_false_merge_audit
3566
+ and not _false_merge_targeted
3567
+ and not dry_run # a dry-run must not consume the real run's turn
3568
+ ):
3569
+ # Stamp even when there was nothing to do — the point of the stamp is
3570
+ # "this sweep had its turn this hour", not "this sweep found work".
3571
+ state.set_false_merge_audit_last_run(time.time())
3572
+
3468
3573
  if _false_merge_candidates:
3469
3574
  from coord.branch_model import resolve_base_branch_for_issue_number # noqa: PLC0415
3470
3575
 
3471
3576
  _false_merge_milestone_cache: dict = {}
3577
+ # #2989 mechanism (3'): one ref lookup per DISTINCT (repo, branch)
3578
+ # per pass, not one per row. Sibling rows legitimately share a
3579
+ # branch (a work row and its conflict-fix, a re-dispatch), which
3580
+ # measured 1.53x redundancy — ~453 wasted calls in a single pass.
3581
+ _false_merge_branch_cache: dict = {}
3582
+ _false_merge_confirmed_clean: list[str] = []
3472
3583
  for a in _false_merge_candidates:
3473
3584
  repo_cfg = config.repo(a.repo_name)
3474
3585
  if repo_cfg is None or not repo_cfg.github:
3475
3586
  continue
3476
3587
  try:
3477
- if not github_ops.branch_exists_on_remote(repo_cfg.github, a.branch):
3478
- continue # branch gone — presumed genuinely merged + cleaned up
3588
+ if not github_ops.branch_exists_on_remote(
3589
+ repo_cfg.github, a.branch, cache=_false_merge_branch_cache
3590
+ ):
3591
+ # branch gone — presumed genuinely merged + cleaned up,
3592
+ # and permanently so (#2989).
3593
+ _false_merge_confirmed_clean.append(a.assignment_id)
3594
+ continue
3479
3595
  if github_ops.pr_is_merged(repo_cfg.github, a.branch):
3480
- continue # correctly tracked: a merged PR sits at this exact tip
3596
+ # correctly tracked: a merged PR sits at this exact tip
3597
+ _false_merge_confirmed_clean.append(a.assignment_id)
3598
+ continue
3481
3599
  base_branch = resolve_base_branch_for_issue_number(
3482
3600
  repo_cfg,
3483
3601
  repo_cfg.github,
@@ -3487,13 +3605,20 @@ def reconcile_board_merges(
3487
3605
  ahead = github_ops.branch_commits_ahead(
3488
3606
  repo_cfg.github, base_branch, a.branch
3489
3607
  )
3490
- if not ahead: # None (fail-open) or 0 (already an ancestor)
3608
+ if ahead is None:
3609
+ # fail-open: the probe itself failed, so this row is NOT
3610
+ # confirmed clean — re-probe it next pass (#2989).
3611
+ continue
3612
+ if ahead == 0:
3613
+ # already an ancestor of base: its content landed, and
3614
+ # that is permanent (#2989).
3615
+ _false_merge_confirmed_clean.append(a.assignment_id)
3491
3616
  continue
3492
3617
  changed_files = github_ops.get_compare_files(
3493
3618
  repo_cfg.github, base_branch, a.branch
3494
3619
  )
3495
3620
  if not changed_files:
3496
- continue # can't confirm anything — fail open
3621
+ continue # can't confirm anything — fail open, re-probe
3497
3622
  content_differs = False
3498
3623
  differing_path = None
3499
3624
  for _path in changed_files[:_FALSE_MERGE_AUDIT_MAX_FILES]:
@@ -3514,7 +3639,10 @@ def reconcile_board_merges(
3514
3639
  differing_path = _path
3515
3640
  break
3516
3641
  if not content_differs:
3517
- continue # verbatim on base already — rebase/squash, not lost
3642
+ # verbatim on base already — rebase/squash, not lost, and
3643
+ # a terminal row's content cannot un-land (#2989).
3644
+ _false_merge_confirmed_clean.append(a.assignment_id)
3645
+ continue
3518
3646
  actions.append(
3519
3647
  f"POSSIBLY LOST (#2639): {a.assignment_id} "
3520
3648
  f"({a.repo_name} #{a.issue_number}, branch={a.branch}) is "
@@ -3535,4 +3663,10 @@ def reconcile_board_merges(
3535
3663
  f"({a.repo_name} #{a.issue_number}): {exc}"
3536
3664
  )
3537
3665
 
3666
+ # #2989: persist the terminal marker once, at the end of the sweep —
3667
+ # one board_meta write per pass, not one per row. Never on a
3668
+ # dry-run: `--dry-run` must not change what the next real pass does.
3669
+ if _false_merge_confirmed_clean and not dry_run:
3670
+ state.mark_false_merge_audit_clean(_false_merge_confirmed_clean)
3671
+
3538
3672
  return actions
@@ -986,7 +986,12 @@ def _reconcile_merges_tick(config: Config) -> list[str]:
986
986
  from coord.state import build_board, save_board # noqa: PLC0415
987
987
 
988
988
  board = build_board()
989
- actions = reconcile_board_merges(board, config)
989
+ # #2989: the daemon is the ONLY caller that opts into throttling the
990
+ # false-merge audit (sweep h). It ran on this same 30s tick against a
991
+ # candidate set proportional to project history — 97% of a reconcile
992
+ # pass's `gh` calls, and the demand behind the fleet-wide secondary rate
993
+ # limiting. A manual `coord reconcile-merges` still sweeps every time.
994
+ actions = reconcile_board_merges(board, config, throttle_false_merge_audit=True)
990
995
  save_board(board)
991
996
  if actions:
992
997
  # #1038: one coarse operational row per tick that did something —
@@ -18,6 +18,7 @@ import sqlite3
18
18
  import sys
19
19
  import time
20
20
  import warnings
21
+ from collections.abc import Iterable
21
22
  from dataclasses import asdict, replace
22
23
  from datetime import datetime, timezone
23
24
  from pathlib import Path
@@ -4363,6 +4364,140 @@ def delete_milestone_gate(*, repo_name: str, tracking_issue: int) -> None:
4363
4364
  )
4364
4365
 
4365
4366
 
4367
+ # ── #2989: the false-merge audit's terminal marker ──────────────────────────
4368
+ #
4369
+ # Sweep (h) of :func:`coord.reconcile.reconcile_board_merges` re-derives
4370
+ # "did this branch really land" for `status='merged'` rows. Its candidate
4371
+ # set was proportional to PROJECT HISTORY (1,302 rows on the drive host,
4372
+ # growing by one per merge, never shrinking) and it re-probed every one of
4373
+ # them against GitHub on the daemon's 30s tick — 97% of a reconcile pass's
4374
+ # `gh` calls, and the generator behind the fleet-wide secondary rate
4375
+ # limiting #2809/#2858/#2934/#2977 all treated symptomatically.
4376
+ #
4377
+ # A row whose audit came back CLEAN is clean forever: the branch was
4378
+ # deleted after a real merge, or a merged PR sits at its exact tip, or its
4379
+ # commits are already an ancestor of base, or its changed files are
4380
+ # byte-identical on base. None of those can un-happen for a row that is
4381
+ # already terminal. Recording the verdict makes the candidate set
4382
+ # proportional to *unaudited* merges — bounded by recent throughput — which
4383
+ # is the same discipline `coord.gate_snapshot`'s refresh already states
4384
+ # ("merged history is never refreshed").
4385
+ #
4386
+ # Stored as a JSON list of assignment_ids under one board_meta key, in the
4387
+ # same seam as `milestone_drains`/`milestone_gates` above. Local-DB only:
4388
+ # the only callers are the daemon's own reconcile tick and a `coord
4389
+ # reconcile-merges` CLI run, both of which execute against the canonical DB
4390
+ # (a thin client's `coord reconcile-merges` reroutes to the daemon before
4391
+ # reaching this code). Fail-open at both ends — a read or write problem
4392
+ # degrades to "re-probe next pass", never to a wrong verdict.
4393
+
4394
+ _FALSE_MERGE_AUDIT_CLEAN_KEY = "false_merge_audit_clean"
4395
+
4396
+ # Cap on the persisted clean-verdict list. It is append-only and bounded
4397
+ # only by total merge history, so trim it the way a ring buffer would: the
4398
+ # most recently confirmed rows are the ones a repeat pass would otherwise
4399
+ # re-probe first. Dropping the tail is safe — a forgotten row just gets
4400
+ # re-audited once and re-marked.
4401
+ _FALSE_MERGE_AUDIT_CLEAN_MAX = 5000
4402
+
4403
+
4404
+ def load_false_merge_audit_clean() -> set[str]:
4405
+ """Return assignment_ids whose false-merge audit already came back clean.
4406
+
4407
+ Fails open to an empty set on any read problem — the caller then simply
4408
+ re-probes, which is correct-but-slower, never wrong.
4409
+ """
4410
+ try:
4411
+ conn = get_connection()
4412
+ row = sql.execute(
4413
+ conn,
4414
+ "SELECT value FROM board_meta WHERE key = ?",
4415
+ (_FALSE_MERGE_AUDIT_CLEAN_KEY,),
4416
+ ).fetchone()
4417
+ except Exception: # noqa: BLE001 — advisory cache, never load-bearing
4418
+ return set()
4419
+ if row is None:
4420
+ return set()
4421
+ try:
4422
+ data = json.loads(row["value"])
4423
+ except (TypeError, ValueError):
4424
+ return set()
4425
+ if not isinstance(data, list):
4426
+ return set()
4427
+ return {str(x) for x in data if isinstance(x, (str, int))}
4428
+
4429
+
4430
+ def mark_false_merge_audit_clean(assignment_ids: Iterable[str]) -> None:
4431
+ """Record *assignment_ids* as permanently audited-clean (idempotent).
4432
+
4433
+ Never raises — this is an optimisation marker, and a board that cannot
4434
+ persist it must still reconcile correctly (just without the speedup).
4435
+ """
4436
+ new = {str(a) for a in assignment_ids if a}
4437
+ if not new:
4438
+ return
4439
+ try:
4440
+ conn = get_connection()
4441
+ with conn:
4442
+ existing = load_false_merge_audit_clean()
4443
+ merged = existing | new
4444
+ if merged == existing:
4445
+ return
4446
+ # Keep insertion order stable-ish (old first, newly-confirmed
4447
+ # last) so the trim below drops the oldest confirmations.
4448
+ ordered = [a for a in existing if a in merged]
4449
+ ordered += [a for a in new if a not in existing]
4450
+ if len(ordered) > _FALSE_MERGE_AUDIT_CLEAN_MAX:
4451
+ ordered = ordered[-_FALSE_MERGE_AUDIT_CLEAN_MAX:]
4452
+ sql.upsert(
4453
+ conn,
4454
+ "board_meta",
4455
+ ["key", "value"],
4456
+ (_FALSE_MERGE_AUDIT_CLEAN_KEY, json.dumps(ordered)),
4457
+ conflict_columns=["key"],
4458
+ )
4459
+ except Exception: # noqa: BLE001 — advisory cache, never load-bearing
4460
+ return
4461
+
4462
+
4463
+ _FALSE_MERGE_AUDIT_LAST_RUN_KEY = "false_merge_audit_last_run"
4464
+
4465
+
4466
+ def get_false_merge_audit_last_run() -> float:
4467
+ """Epoch seconds of the last throttled false-merge audit, 0.0 if never."""
4468
+ try:
4469
+ conn = get_connection()
4470
+ row = sql.execute(
4471
+ conn,
4472
+ "SELECT value FROM board_meta WHERE key = ?",
4473
+ (_FALSE_MERGE_AUDIT_LAST_RUN_KEY,),
4474
+ ).fetchone()
4475
+ except Exception: # noqa: BLE001
4476
+ return 0.0
4477
+ if row is None:
4478
+ return 0.0
4479
+ try:
4480
+ return float(row["value"])
4481
+ except (TypeError, ValueError):
4482
+ return 0.0
4483
+
4484
+
4485
+ def set_false_merge_audit_last_run(when: float) -> None:
4486
+ """Stamp the last throttled false-merge audit run. Never raises."""
4487
+ try:
4488
+ conn = get_connection()
4489
+ with conn:
4490
+ sql.upsert(
4491
+ conn,
4492
+ "board_meta",
4493
+ ["key", "value"],
4494
+ (_FALSE_MERGE_AUDIT_LAST_RUN_KEY, repr(float(when))),
4495
+ conflict_columns=["key"],
4496
+ )
4497
+ except Exception: # noqa: BLE001
4498
+ return
4499
+
4500
+
4366
4501
  # ── #1630: fleet-health aggregation ─────────────────────────────────────────
4367
4502
  # Local-DB only, like list_milestone_drains above — the only writer is the
4368
4503
  # daemon's own health-poll tick (coord.serve_app), which always runs