code-coordinator 0.5.494__tar.gz → 0.5.495__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 (897) hide show
  1. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/workflows/test.yml +17 -0
  2. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_version.json +2 -2
  5. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_schema.py +11 -0
  6. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_wire.py +57 -0
  7. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/drive_queue.py +9 -1
  8. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/db.py +21 -1
  9. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive_queue.py +35 -1
  10. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive_state.py +8 -1
  11. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/github_ops.py +8 -1
  12. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/state.py +11 -3
  13. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_wire.py +169 -0
  14. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_db.py +4 -1
  15. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue.py +93 -2
  16. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_github_ops.py +12 -0
  17. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_state.py +63 -0
  18. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.gitignore +0 -0
  30. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/GOAL.md +0 -0
  32. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/LICENSE +0 -0
  33. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/README.md +0 -0
  35. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/SOURCES.txt +0 -0
  36. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_file_list.json +0 -0
  40. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent.py +0 -0
  46. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/approved_work.py +0 -0
  52. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/audit.py +0 -0
  53. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/auto_loop.py +0 -0
  54. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/backup.py +0 -0
  55. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/block_log.py +0 -0
  56. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_fix.py +0 -0
  62. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_github.py +0 -0
  63. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_gitlab.py +0 -0
  64. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/claude_setup_token.py +0 -0
  67. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/cli.py +0 -0
  68. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/client.py +0 -0
  69. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/codegen.py +0 -0
  70. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/__init__.py +0 -0
  71. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/_common.py +0 -0
  72. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/acceptance.py +0 -0
  73. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/agent_ops.py +0 -0
  74. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/audit.py +0 -0
  75. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/backup.py +0 -0
  76. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/chat.py +0 -0
  77. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/codegen.py +0 -0
  78. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dispatch.py +0 -0
  79. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dispatch_workers.py +0 -0
  80. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dr.py +0 -0
  81. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/drive.py +0 -0
  82. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/pr.py +0 -0
  93. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/release.py +0 -0
  94. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/repo.py +0 -0
  95. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/report.py +0 -0
  96. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/review.py +0 -0
  97. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/scorecard.py +0 -0
  98. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/sessions.py +0 -0
  99. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/setup.py +0 -0
  100. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/status.py +0 -0
  101. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/store_migrate.py +0 -0
  102. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/config.py +0 -0
  107. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/config_reload.py +0 -0
  108. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/confirm_test.py +0 -0
  109. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-backup.service +0 -0
  121. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-backup.timer +0 -0
  122. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.service +0 -0
  126. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.timer +0 -0
  127. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deprecation_telemetry.py +0 -0
  145. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deps.py +0 -0
  146. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/diagnose.py +0 -0
  147. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dispatch.py +0 -0
  148. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dispatch_liveness.py +0 -0
  149. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dr_promote.py +0 -0
  151. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dr_verify.py +0 -0
  152. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive.py +0 -0
  153. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/events.py +0 -0
  154. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/failure_classifier.py +0 -0
  156. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/filelock.py +0 -0
  157. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/fleet_config_health.py +0 -0
  158. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/forge_availability.py +0 -0
  159. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/freshness.py +0 -0
  160. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_a.py +0 -0
  161. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_b.py +0 -0
  162. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_snapshot.py +0 -0
  163. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gates.py +0 -0
  164. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gen_board_fixture.py +0 -0
  165. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/github_throttle.py +0 -0
  166. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/goal.py +0 -0
  167. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/graph_health.py +0 -0
  168. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/__init__.py +0 -0
  169. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/aggregate.py +0 -0
  170. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/__init__.py +0 -0
  171. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/_ci_pin.py +0 -0
  172. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/agent_install.py +0 -0
  173. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/cargo_targets.py +0 -0
  174. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/claude_binary.py +0 -0
  175. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/config_drift.py +0 -0
  176. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  177. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/coord_web_ci_pin.py +0 -0
  178. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/deploy_lane_facts.py +0 -0
  179. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/disk.py +0 -0
  180. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_board.py +0 -0
  181. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  182. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_phantom.py +0 -0
  183. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_unit_drift.py +0 -0
  184. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/graph.py +0 -0
  185. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/graphify_cli.py +0 -0
  186. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/index_lock.py +0 -0
  187. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/issues_sync_staleness.py +0 -0
  188. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/plan_usage.py +0 -0
  189. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/pr_churn.py +0 -0
  190. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/release_cordon.py +0 -0
  191. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/repo_state.py +0 -0
  192. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/spawned_coord.py +0 -0
  193. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/stalled_pipeline.py +0 -0
  194. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/timer_active.py +0 -0
  195. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/toolchain.py +0 -0
  196. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/unit_drift.py +0 -0
  197. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/unit_enablement.py +0 -0
  198. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/wedged_drive_queue.py +0 -0
  199. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/worktrees.py +0 -0
  200. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/cli.py +0 -0
  201. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/context.py +0 -0
  202. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/fleet_snapshot.py +0 -0
  203. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/models.py +0 -0
  204. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/pypi.py +0 -0
  205. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/registry.py +0 -0
  206. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/render.py +0 -0
  207. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/units.py +0 -0
  208. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/hooks.py +0 -0
  209. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/housekeeping.py +0 -0
  210. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/interactive.py +0 -0
  211. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/invariant_alarms.py +0 -0
  212. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/issue_store.py +0 -0
  213. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/issues_sync_status.py +0 -0
  214. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/liveness_auditor.py +0 -0
  215. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_fault.py +0 -0
  216. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_metrics.py +0 -0
  217. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_onboard.py +0 -0
  218. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_pause.py +0 -0
  219. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_stats.py +0 -0
  220. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/merge_queue.py +0 -0
  221. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_chat.py +0 -0
  222. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_dispatch.py +0 -0
  223. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_gate.py +0 -0
  224. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_order.py +0 -0
  225. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/mock_author.py +0 -0
  226. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/models.py +0 -0
  227. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/network.py +0 -0
  228. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/new_issue_chat.py +0 -0
  229. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/__init__.py +0 -0
  230. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/baseline.py +0 -0
  231. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/cli.py +0 -0
  232. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/collect.py +0 -0
  233. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/digest.py +0 -0
  234. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/models.py +0 -0
  235. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/predicate.py +0 -0
  236. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/service.py +0 -0
  237. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/store.py +0 -0
  238. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/transport.py +0 -0
  239. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notify.py +0 -0
  240. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/openapi.py +0 -0
  241. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/overlap_fence.py +0 -0
  242. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/overlap_predict.py +0 -0
  243. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/parentage.py +0 -0
  244. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/parentage_github.py +0 -0
  245. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/pipeline.py +0 -0
  246. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/plan_parser.py +0 -0
  247. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/plans.py +0 -0
  248. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/platform_paths.py +0 -0
  249. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_bridge.py +0 -0
  250. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_store.py +0 -0
  251. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_sync.py +0 -0
  252. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/pr_body_lint.py +0 -0
  253. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/prereqs.py +0 -0
  254. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/progress.py +0 -0
  255. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/__init__.py +0 -0
  256. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/base.py +0 -0
  257. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/claude.py +0 -0
  258. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/claude_pty.py +0 -0
  259. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/opencode.py +0 -0
  260. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/queue_diagnose.py +0 -0
  261. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reconcile.py +0 -0
  262. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reconcile_tick.py +0 -0
  263. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/refine_chat.py +0 -0
  264. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_cordon.py +0 -0
  265. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_propagate.py +0 -0
  266. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_verify.py +0 -0
  267. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_window.py +0 -0
  268. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_dormancy.py +0 -0
  269. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_edit.py +0 -0
  270. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_onboard.py +0 -0
  271. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reports.py +0 -0
  272. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/rest_schema.py +0 -0
  273. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/revalidate.py +0 -0
  274. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/review.py +0 -0
  275. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/scorecard.py +0 -0
  276. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/self_health.py +0 -0
  277. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/serve_app.py +0 -0
  278. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  279. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  280. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  281. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/portal-followup/SKILL.md +0 -0
  284. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/release-now/SKILL.md +0 -0
  285. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  286. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  287. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/update-issue/SKILL.md +0 -0
  288. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/smoke.py +0 -0
  289. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/spend_ceiling.py +0 -0
  290. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/split_work.py +0 -0
  291. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/sql.py +0 -0
  292. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/stage_projection.py +0 -0
  293. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/store_migrate.py +0 -0
  294. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/store_parity.py +0 -0
  295. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/templates/deploy-cloudflare.node.yml +0 -0
  296. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_author.py +0 -0
  297. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_chat.py +0 -0
  298. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_orchestrator.py +0 -0
  299. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_report.py +0 -0
  300. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/tui_release.py +0 -0
  301. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/uat_checks.py +0 -0
  302. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage.py +0 -0
  303. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage_limits.py +0 -0
  304. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage_rollup.py +0 -0
  305. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/worker_events.py +0 -0
  306. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coordinator.example.yml +0 -0
  307. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-agent.service +0 -0
  308. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-backup.service +0 -0
  309. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-backup.timer +0 -0
  310. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.service +0 -0
  311. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.sh +0 -0
  312. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.timer +0 -0
  313. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-dr-verify.service +0 -0
  314. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-dr-verify.timer +0 -0
  315. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-drive-queue.service +0 -0
  316. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-drive-queue.timer +0 -0
  317. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-failure-notify.service +0 -0
  318. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-failure-notify.sh +0 -0
  319. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.service +0 -0
  320. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.timer +0 -0
  321. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-notify.service +0 -0
  322. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-notify.timer +0 -0
  323. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-propagate.service +0 -0
  324. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-propagate.timer +0 -0
  325. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-window.service +0 -0
  326. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-window.timer +0 -0
  327. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-serve.service +0 -0
  328. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.service +0 -0
  329. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.sh +0 -0
  330. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.timer +0 -0
  331. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-rollback.sh +0 -0
  332. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web.service +0 -0
  333. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/node-shim.sh +0 -0
  334. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_TUI_CI.md +0 -0
  335. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  336. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_CI.md +0 -0
  337. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_DIST.md +0 -0
  338. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  339. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/AGENT_OPERATIONS.md +0 -0
  340. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ARCHITECTURE.md +0 -0
  341. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ARCH_SECURITY_GATES.md +0 -0
  342. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/COCKPIT.md +0 -0
  343. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CONTROL_CENTER.md +0 -0
  344. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/COST_DISCIPLINE.md +0 -0
  345. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CROSS_PLATFORM.md +0 -0
  346. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CUSTOMER_FACING_APPS.md +0 -0
  347. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CUSTOMER_PORTAL.md +0 -0
  348. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DATA_STORE_SELECTION.md +0 -0
  349. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DISASTER_RECOVERY.md +0 -0
  350. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DRIVE_QUEUE.md +0 -0
  351. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/EPHEMERAL_WORKERS.md +0 -0
  352. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/FORGE_MIGRATION.md +0 -0
  353. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/GRAPHIFY_SETUP.md +0 -0
  354. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ISSUE_GUIDANCE.md +0 -0
  355. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/MAC_MINI.md +0 -0
  356. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  357. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/NOTIFIER.md +0 -0
  358. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPENCODE_VERIFICATION.md +0 -0
  359. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPERATING_GOTCHAS.md +0 -0
  360. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPERATOR_GUIDES.md +0 -0
  361. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ORACLE_LOOP.md +0 -0
  362. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PHONE_WEBAPP.md +0 -0
  363. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PIPELINE_V2.md +0 -0
  364. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PLATFORM_EVOLUTION.md +0 -0
  365. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/SECOND_BACKEND.md +0 -0
  366. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/STORE_SERVICE.md +0 -0
  367. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  368. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/WEB_CONTROL_CENTER.md +0 -0
  369. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/WSL_WINDOWS_WORKER.md +0 -0
  370. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/README.md +0 -0
  371. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/_tokens.css +0 -0
  372. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/issue-detail.html +0 -0
  373. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-narrow.html +0 -0
  374. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-wide.html +0 -0
  375. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/graphify-out/.gitignore +0 -0
  376. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/install-agent.sh +0 -0
  377. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/pyproject.toml +0 -0
  378. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/audit_review_verdict_overrides.py +0 -0
  379. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  380. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/build-worker-image.sh +0 -0
  381. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/coordinator-machine.py +0 -0
  382. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/dr-down.sh +0 -0
  383. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/dr-up.sh +0 -0
  384. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/epic-down.sh +0 -0
  385. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/epic-up.sh +0 -0
  386. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/preflight.sh +0 -0
  387. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/provision-server.sh +0 -0
  388. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/provision-worker.sh +0 -0
  389. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  390. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  391. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/throwaway-vm.sh +0 -0
  392. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/verify-github-token.sh +0 -0
  393. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/check_gh_argv_containment.py +0 -0
  394. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/codegen.py +0 -0
  395. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-test-runner.sh +0 -0
  396. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  397. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  398. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  399. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  400. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-venv-rollback.sh +0 -0
  401. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/extract-coord-tui.sh +0 -0
  403. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/fleet_watchdog.py +0 -0
  404. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/gen_board_fixture.py +0 -0
  405. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/gen_mock_index.py +0 -0
  406. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/lib/provision-core.sh +0 -0
  407. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/next_release_tag.py +0 -0
  408. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/provision-machine.sh +0 -0
  409. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/run_tests_in_populated_home.sh +0 -0
  410. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/run_tests_without_gh.sh +0 -0
  411. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/setup-macmini.sh +0 -0
  412. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/smoke_437_interactive.py +0 -0
  413. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify-provision-noble.sh +0 -0
  414. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_878_review_capture.py +0 -0
  415. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_release_published.py +0 -0
  416. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_release_wheel.py +0 -0
  417. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/setup.cfg +0 -0
  418. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/SMOKE_SET.md +0 -0
  419. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/__init__.py +0 -0
  420. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/contract.md +0 -0
  426. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  427. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  428. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/manifest.yml +0 -0
  429. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  430. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/tsconfig.json +0 -0
  431. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/backends.py +0 -0
  433. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/conftest.py +0 -0
  434. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-basic.json +0 -0
  435. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  436. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  437. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  438. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  439. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/all_pass.json +0 -0
  440. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  441. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/mixed_fail.json +0 -0
  442. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  443. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  444. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/skip.json +0 -0
  445. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/truncated.json +0 -0
  446. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  447. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  448. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  450. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  451. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  452. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  453. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_acceptance.py +0 -0
  455. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_acceptance_drivers.py +0 -0
  456. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent.py +0 -0
  457. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_api_error.py +0 -0
  458. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_app.py +0 -0
  459. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_branch_base.py +0 -0
  460. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_branch_capture.py +0 -0
  461. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_config_free_1712.py +0 -0
  462. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_deploy_units_endpoint.py +0 -0
  463. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_dirty_worktree.py +0 -0
  464. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  465. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_graph_self_heal.py +0 -0
  466. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_health_h3.py +0 -0
  467. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_idle_restart.py +0 -0
  468. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_push_failure.py +0 -0
  469. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_reap.py +0 -0
  470. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_repos_and_pull.py +0 -0
  471. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_restart_services_endpoint.py +0 -0
  472. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_skills_self_heal.py +0 -0
  473. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_startup_diagnostics.py +0 -0
  474. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_update.py +0 -0
  475. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_update_bluegreen.py +0 -0
  476. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_usage_limit.py +0 -0
  477. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_zero_commit.py +0 -0
  478. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ambient_home_isolation.py +0 -0
  479. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_capability_reroute_3241.py +0 -0
  480. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_dependency_busy_2804.py +0 -0
  481. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_reject_plan.py +0 -0
  482. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_usage_gate.py +0 -0
  483. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approved_work_2532.py +0 -0
  484. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approved_work_2996.py +0 -0
  485. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_assignment_already_recorded_daemon.py +0 -0
  486. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_log.py +0 -0
  487. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_outcome.py +0 -0
  488. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_query.py +0 -0
  489. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_auto_loop.py +0 -0
  490. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_auto_release_publish_2035.py +0 -0
  491. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_backend_selection.py +0 -0
  492. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_backup.py +0 -0
  493. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_base_checkout_restore.py +0 -0
  494. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_block_log.py +0 -0
  495. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_schema.py +0 -0
  499. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_brain.py +0 -0
  502. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_branch_model.py +0 -0
  503. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_bug_intake.py +0 -0
  504. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_build_worker_image_env_update.py +0 -0
  505. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cargo_cache.py +0 -0
  506. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_check_gh_argv_containment.py +0 -0
  507. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_acceptance_gate_1950.py +0 -0
  508. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_fix.py +0 -0
  509. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_github.py +0 -0
  510. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_gitlab.py +0 -0
  511. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_parity_2091.py +0 -0
  512. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_store.py +0 -0
  513. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claim.py +0 -0
  514. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claude_md_budget.py +0 -0
  515. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claude_setup_token.py +0 -0
  516. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_acceptance.py +0 -0
  517. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign.py +0 -0
  518. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  519. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_remote.py +0 -0
  520. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_provider.py +0 -0
  521. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  522. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_audit.py +0 -0
  523. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_chat_continue.py +0 -0
  524. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_codegen.py +0 -0
  525. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_decide.py +0 -0
  526. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_capability_rules.py +0 -0
  527. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_config_provenance.py +0 -0
  528. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_forge_availability.py +0 -0
  529. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_graph.py +0 -0
  530. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_self.py +0 -0
  531. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_test_coverage.py +0 -0
  532. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor.py +0 -0
  533. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_free_1801.py +0 -0
  534. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  535. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  536. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_drive.py +0 -0
  537. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_drive_queue.py +0 -0
  538. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_escalate.py +0 -0
  539. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_fix_headless_review.py +0 -0
  540. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_gate_a.py +0 -0
  541. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_install_drift.py +0 -0
  542. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_install_skills.py +0 -0
  543. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_comment.py +0 -0
  544. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_create_label.py +0 -0
  545. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_reopen.py +0 -0
  546. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_view_list.py +0 -0
  547. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_merge.py +0 -0
  548. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_assign.py +0 -0
  549. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_capture.py +0 -0
  550. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_chat_add_child.py +0 -0
  551. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_dispatch.py +0 -0
  552. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_b.py +0 -0
  553. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_c.py +0 -0
  554. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_order.py +0 -0
  555. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  556. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_ship.py +0 -0
  557. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_network.py +0 -0
  558. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_new_issue_chat.py +0 -0
  559. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_plans.py +0 -0
  560. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_portal.py +0 -0
  561. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_pr.py +0 -0
  562. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_pull_artifact.py +0 -0
  563. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_queue.py +0 -0
  564. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_reattach_sessions.py +0 -0
  565. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_refine_board.py +0 -0
  566. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_preflight.py +0 -0
  567. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_propagate.py +0 -0
  568. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_window.py +0 -0
  569. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_repo_2220.py +0 -0
  570. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  571. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_scorecard.py +0 -0
  572. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_serve_store_backend_3084.py +0 -0
  573. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_set_review_findings.py +0 -0
  574. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_advisory_terminal.py +0 -0
  575. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_contested_tag.py +0 -0
  576. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_invariant_alarms.py +0 -0
  577. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_machine_fault.py +0 -0
  578. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_merge_queue.py +0 -0
  579. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_provider.py +0 -0
  580. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_retried_3340.py +0 -0
  581. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_review_finalizing.py +0 -0
  582. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_test_failed_tag.py +0 -0
  583. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_usage_limit.py +0 -0
  584. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_sync_comments_873.py +0 -0
  585. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_test_plan.py +0 -0
  586. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_track.py +0 -0
  587. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_tui_update.py +0 -0
  588. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_wait.py +0 -0
  589. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client.py +0 -0
  590. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_base_install.py +0 -0
  591. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_config_cache_atomic_3052.py +0 -0
  592. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_resource_migration_1946.py +0 -0
  593. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_commands_common.py +0 -0
  594. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_comments.py +0 -0
  595. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_completion_summary.py +0 -0
  596. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config.py +0 -0
  597. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_acceptance.py +0 -0
  598. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_audit.py +0 -0
  599. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_drift_check.py +0 -0
  600. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_pricing.py +0 -0
  601. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  602. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_usage_gate.py +0 -0
  603. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_confirm_test.py +0 -0
  604. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_conflict_fix.py +0 -0
  605. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_conflict_fix_semantic.py +0 -0
  606. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  607. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test.py +0 -0
  608. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  609. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_baseline.py +0 -0
  610. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_populated_home.py +0 -0
  611. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_routing.py +0 -0
  612. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_toolchain.py +0 -0
  613. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_uat.py +0 -0
  614. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_web_sse_restart_live.py +0 -0
  615. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coordinator_machine.py +0 -0
  616. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cross_platform_imports.py +0 -0
  617. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dao.py +0 -0
  618. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard.py +0 -0
  619. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_api.py +0 -0
  620. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_fixture.py +0 -0
  621. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_server.py +0 -0
  622. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_terminal.py +0 -0
  623. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_terminal_live.py +0 -0
  624. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dead_end.py +0 -0
  625. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_decomposition_chat.py +0 -0
  626. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_db_backup.py +0 -0
  627. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_dist.py +0 -0
  628. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_rollback.py +0 -0
  629. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_db_backup_unit.py +0 -0
  630. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_drive_queue_unit.py +0 -0
  631. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_failure_notify_unit.py +0 -0
  632. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_manifest.py +0 -0
  633. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_notify_unit.py +0 -0
  634. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_units_lane.py +0 -0
  635. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_web_unit.py +0 -0
  636. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deprecation_telemetry.py +0 -0
  637. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deps.py +0 -0
  638. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_diagnose.py +0 -0
  639. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch.py +0 -0
  640. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_liveness.py +0 -0
  641. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_target_validation.py +0 -0
  642. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_workers.py +0 -0
  643. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dist_name.py +0 -0
  644. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_done_housekeeping.py +0 -0
  645. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_azure_scripts.py +0 -0
  646. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_promote.py +0 -0
  647. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_verify.py +0 -0
  648. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive.py +0 -0
  649. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_machine_fault.py +0 -0
  650. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_blocked_rendering.py +0 -0
  651. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_launch_argv.py +0 -0
  652. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  653. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_roll_pending.py +0 -0
  654. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  655. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_state.py +0 -0
  656. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_tmux.py +0 -0
  657. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_capability_detection.py +0 -0
  658. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  659. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_image_provenance.py +0 -0
  660. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_errors.py +0 -0
  661. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_events.py +0 -0
  662. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_failure_class.py +0 -0
  663. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_failure_classifier.py +0 -0
  664. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_filelock.py +0 -0
  665. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  666. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fix_escalation_classifier.py +0 -0
  667. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fix_of_force_override.py +0 -0
  668. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_config_health.py +0 -0
  669. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_health_probes.py +0 -0
  670. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_health_snapshot.py +0 -0
  671. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_watchdog.py +0 -0
  672. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_forge_availability.py +0 -0
  673. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_freshness.py +0 -0
  674. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_a.py +0 -0
  675. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_b.py +0 -0
  676. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_snapshot_staleness.py +0 -0
  677. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gates.py +0 -0
  678. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  679. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gen_mock_index.py +0 -0
  680. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_rust_fixture.py +0 -0
  681. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_rust_requests.py +0 -0
  682. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_types_fixture.py +0 -0
  683. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_github_throttle.py +0 -0
  684. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_goal.py +0 -0
  685. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_graph_health.py +0 -0
  686. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_graph_selfheal_absent_2237.py +0 -0
  687. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_handoff.py +0 -0
  688. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_checks.py +0 -0
  689. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_cli.py +0 -0
  690. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_cli_graph.py +0 -0
  691. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_config.py +0 -0
  692. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_context.py +0 -0
  693. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_coord_tui_ci_pin.py +0 -0
  694. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_coord_web_ci_pin.py +0 -0
  695. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_deploy_lane_facts.py +0 -0
  696. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_fix.py +0 -0
  697. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_incident_regression.py +0 -0
  698. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_issues_sync_staleness.py +0 -0
  699. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_pr_churn.py +0 -0
  700. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_pypi.py +0 -0
  701. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_registry.py +0 -0
  702. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_release_cordon_probe.py +0 -0
  703. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_timer_active.py +0 -0
  704. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_toolchain.py +0 -0
  705. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_unit_drift.py +0 -0
  706. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_unit_enablement.py +0 -0
  707. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_wedged_drive_queue.py +0 -0
  708. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_hooks.py +0 -0
  709. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_housekeeping.py +0 -0
  710. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_human_attended_437.py +0 -0
  711. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_init.py +0 -0
  712. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_install_agent_venv_2911.py +0 -0
  713. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_integration.py +0 -0
  714. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_briefing_echo.py +0 -0
  715. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_pane_log_2541.py +0 -0
  716. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_prefill_state.py +0 -0
  717. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_session_relaunch.py +0 -0
  718. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_test_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_token_attribution.py +0 -0
  720. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_worktree.py +0 -0
  721. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_invariant_alarms.py +0 -0
  722. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_issue_store_seam.py +0 -0
  723. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_issues_sync_status.py +0 -0
  724. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_liveness_auditor.py +0 -0
  725. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_liveness_notify.py +0 -0
  726. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_lock_contention_ratchet.py +0 -0
  727. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_fault.py +0 -0
  728. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_metrics.py +0 -0
  729. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_onboard.py +0 -0
  730. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_pause.py +0 -0
  731. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_stats.py +0 -0
  732. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_merge_queue.py +0 -0
  733. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/write_parity.py +0 -0
@@ -5,6 +5,8 @@ on:
5
5
  branches: [main]
6
6
  pull_request:
7
7
  branches: [main]
8
+ # #3392: the `postgres` job below is opt-in and runs ONLY from here.
9
+ workflow_dispatch:
8
10
 
9
11
  jobs:
10
12
  test:
@@ -371,6 +373,21 @@ jobs:
371
373
  # what every other job's `pip install -e ".[dev]"` pulls in.
372
374
  postgres:
373
375
  runs-on: ubuntu-latest
376
+ # #3392, 2026-09-18: taken out of automatic CI by operator decision -- the
377
+ # Postgres migration is not current work, and until it is this job is pure
378
+ # noise. It gates nothing (`continue-on-error: true` below, and it is not a
379
+ # required check in branch protection), emits ~3700
380
+ # ProductionDatabaseGuardError that dominate every `--log-failed` read of
381
+ # this workflow, and costs 65-70 min of runner time per push to main. It
382
+ # misdirected #3378 item 1, #3380 and #3385 -- all three were scoped as
383
+ # "make main green" against a job that cannot redden main.
384
+ #
385
+ # RESTORE by deleting this one `if:` line when the migration becomes active
386
+ # work. Everything below is unchanged and still correct. Sequence then is:
387
+ # remove the `if:`, work the failure list down, THEN remove
388
+ # `continue-on-error` -- that last step is what turns this into a real gate
389
+ # and it is the deliberate END of that work, not the start.
390
+ if: github.event_name == 'workflow_dispatch'
374
391
  continue-on-error: true
375
392
  services:
376
393
  postgres:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.494
3
+ Version: 0.5.495
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.494
3
+ Version: 0.5.495
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.494",
2
+ "tag": "0.5.495",
3
3
  "distance": 0,
4
- "node": "g52be7f1fb06c8a23aaf1d850192c29dc4cf8a36f",
4
+ "node": "ga0310959c08fddb13badabe2d065897c8a64bc04",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -245,6 +245,17 @@ class BoardIssue:
245
245
  synced_at: float | None = None
246
246
  milestone_number: int | None = None
247
247
  milestone_title: str | None = None
248
+ # #3384: GitHub's own `stateReason` — `"reopened"` when a human explicitly
249
+ # reopened this issue via `gh issue reopen`, `""` for an issue that has
250
+ # never been closed. See `coord.drive_queue.IssueFacts.reopened`.
251
+ #
252
+ # ABSENT, not `""`, on the wire when it is the empty default: it would
253
+ # otherwise cost ~20 bytes on every issue row of every poll to say nothing
254
+ # (`coord.board_wire._drop_default_state_reason`, which is also why it is
255
+ # not in this DTO's `required` list — it has a default). Read it as
256
+ # `row.get("state_reason") or ""`; the Rust side gets `#[serde(default)]`
257
+ # from `coord.codegen`.
258
+ state_reason: str = ""
248
259
 
249
260
 
250
261
  @dataclasses.dataclass(kw_only=True)
@@ -65,6 +65,19 @@ Rust call site of ``OpenIssue.body`` / ``PipelineIssue.body`` first. So the
65
65
  body now leaves the collection wire for open issues too, and
66
66
  :func:`bound_issue_row` keeps only the machine-parsed *residue* a client
67
67
  cannot re-fetch in time — see :data:`ALLOWED_GLOB_MARKER`.
68
+
69
+ **#3384: a defaulted flag costs its bytes on EVERY row.** The reopen witness
70
+ ``issues.state_reason`` carries a value on the handful of rows GitHub
71
+ actually set one on, and the empty default on every other issue on the
72
+ board — and an empty-but-present key is ~20 bytes of wire per row per poll,
73
+ which on the #1791 guard's 3000-row seed is ~57 KB and pushed the payload
74
+ straight through :data:`BOARD_PAYLOAD_BYTE_BUDGET`. So the default is
75
+ dropped from the wire entirely (:func:`_drop_default_state_reason`) and the
76
+ key is present only when it says something. This is the same additive-only
77
+ convention the ``<field>_truncated`` flags already follow, and it is the
78
+ rule to apply to the NEXT defaulted field somebody adds to
79
+ ``coord/board_schema.py``: an always-present default is a per-row tax on a
80
+ payload that is polled every few seconds and whose ETag never matches.
68
81
  """
69
82
 
70
83
  from __future__ import annotations
@@ -253,9 +266,52 @@ def _machine_readable_residue(body: str) -> str:
253
266
  )
254
267
 
255
268
 
269
+ def _drop_default_state_reason(row: dict) -> None:
270
+ """#3384: drop ``state_reason`` from the wire when it is the empty default.
271
+
272
+ ``issues.state_reason`` is GitHub's own ``stateReason``: ``"reopened"``
273
+ on an issue a human explicitly reopened, and ``''`` on every issue that
274
+ has never been closed — i.e. on essentially the whole board. Shipping
275
+ the empty default costs ~20 bytes on EVERY issue row of EVERY poll (~57 KB
276
+ on the #1791 guard's 3000-row seed, enough on its own to breach
277
+ :data:`BOARD_PAYLOAD_BYTE_BUDGET`) to tell a client something it already
278
+ assumes.
279
+
280
+ Safe because absent and empty are the SAME answer to every consumer, by
281
+ construction rather than by luck:
282
+
283
+ * ``coord.drive_queue.build_board_view`` reads it as
284
+ ``str(row.get("state_reason") or "").lower() == "reopened"`` — the one
285
+ question anything asks of this field — so a missing key and an empty
286
+ one both yield ``IssueFacts.reopened is False``. That is also what
287
+ keeps this wire cut from splitting the answer in two: the daemon-host
288
+ local path (``coord.drive_state._local_issue_rows``, which never runs
289
+ through this module) still carries ``''``, and both paths land on the
290
+ identical fact.
291
+ * The Rust ``OpenIssue.state_reason`` is generated with
292
+ ``#[serde(default)]`` (``coord.codegen._rust_auto_field``), so an
293
+ absent key deserializes to ``String::new()``.
294
+ * ``state_reason`` is not in ``BoardIssue``'s ``required`` list in
295
+ ``/openapi.json`` (it has a dataclass default), so omitting it stays
296
+ inside the published contract.
297
+
298
+ A NON-empty value is always kept — this drops the default, it does not
299
+ filter for ``"reopened"`` specifically, so a value GitHub starts sending
300
+ that we do not yet interpret still reaches clients intact.
301
+ """
302
+ if not row.get("state_reason"):
303
+ row.pop("state_reason", None)
304
+
305
+
256
306
  def bound_issue_row(row: dict) -> None:
257
307
  """Apply the wire policy to one ``/board`` issue row (mutates).
258
308
 
309
+ **The empty ``state_reason`` default is dropped from every issue row**
310
+ (#3384), tracking issues included — see
311
+ :func:`_drop_default_state_reason`. Deliberately above the epic
312
+ early-return below, so the wire shape of that field does not depend on
313
+ which kind of issue a row happens to be.
314
+
259
315
  **Tracking (epic) issues are exempt from the body cap.** The TUI's
260
316
  Milestone DAG parses ``## Work order`` out of the tracking issue's body
261
317
  *client-side* (`milestone_dag.rs::milestones_with_work_orders` — it does
@@ -282,6 +338,7 @@ def bound_issue_row(row: dict) -> None:
282
338
  exactly as for a closed issue, which is what arms that hydration
283
339
  (``pipeline.rs::issue_body_fetch_target``).
284
340
  """
341
+ _drop_default_state_reason(row)
285
342
  if _is_tracking_issue(row):
286
343
  return
287
344
  if _is_closed_issue(row):
@@ -2815,13 +2815,21 @@ def _local_issue_rows() -> list[dict]:
2815
2815
 
2816
2816
  Fail-soft: an unreadable/absent table degrades to ``[]``, which puts the
2817
2817
  daemon host back on the assignment-only signals rather than aborting.
2818
+
2819
+ #3384: ``state_reason`` selected alongside ``state`` — this IS the
2820
+ ``coord drive-queue tick`` daemon-host path, so without it
2821
+ ``coord.drive_queue.IssueFacts.reopened`` would never populate on the
2822
+ one host that actually ticks the queue, and a reopened issue's stale
2823
+ ``merged`` witness would keep short-circuiting entries straight to
2824
+ ``done`` there regardless of the fix in ``build_board_view``.
2818
2825
  """
2819
2826
  from coord import sql # noqa: PLC0415
2820
2827
  from coord.db import get_connection # noqa: PLC0415
2821
2828
 
2822
2829
  try:
2823
2830
  rows = sql.execute(
2824
- get_connection(), "SELECT repo_name, number, state FROM issues"
2831
+ get_connection(),
2832
+ "SELECT repo_name, number, state, state_reason FROM issues",
2825
2833
  ).fetchall()
2826
2834
  except Exception: # noqa: BLE001 — see the fail-soft note above
2827
2835
  return []
@@ -1049,7 +1049,16 @@ def retry_on_locked(
1049
1049
  # ("confirmed"/"unconfirmed"/"refuted"/"baseline_red") for a `test_state`
1050
1050
  # write, alongside `coord.state._record_test_verdict_local`. See
1051
1051
  # coord.models.Assignment.test_confirmation.
1052
- _DB_SCHEMA_VERSION = 18
1052
+ #
1053
+ # #3384: bumped 18 -> 19 for the new `issues.state_reason` column appended
1054
+ # to `_migrate_add_columns` below — carries GitHub's own `stateReason`
1055
+ # (`"reopened"` when a human explicitly reopened a closed issue) so
1056
+ # `coord.drive_queue.IssueFacts.reopened`/`.landed` can tell "this issue was
1057
+ # reopened for incomplete work" apart from "this issue never closed in the
1058
+ # first place" (a quadraui-style merge into a non-default branch) — both
1059
+ # read identically as `merged=True, issue_state="open"` otherwise. See
1060
+ # `coord.drive_queue.IssueFacts.landed`'s docstring.
1061
+ _DB_SCHEMA_VERSION = 19
1053
1062
 
1054
1063
 
1055
1064
  def _read_schema_version(conn: sqlite3.Connection) -> int:
@@ -2490,6 +2499,17 @@ _MIGRATE_ADD_COLUMNS: list[str] = [
2490
2499
  # See coord.models.Assignment.test_confirmation and
2491
2500
  # coord.confirm_test.TEST_CONFIRMATION_VALUES for the exhaustive set.
2492
2501
  "ALTER TABLE assignments ADD COLUMN test_confirmation TEXT",
2502
+ # #3384: GitHub's own `stateReason` for this issue — `''`/NULL for every
2503
+ # row predating this migration and for an issue that has never closed,
2504
+ # `"reopened"` (lowercased on write — see
2505
+ # `coord.state._upsert_open_issues_local`) when a human explicitly
2506
+ # reopened a previously-closed issue via `gh issue reopen`. This is the
2507
+ # ONLY witness that lets `coord.drive_queue.IssueFacts.landed` tell a
2508
+ # genuine reopen (the work is NOT done, no matter what an earlier PR
2509
+ # merge recorded) apart from a quadraui-style repo whose merged PRs never
2510
+ # auto-close the linked issue at all — both look identical as
2511
+ # `merged=True, issue_state="open"` without it.
2512
+ "ALTER TABLE issues ADD COLUMN state_reason TEXT NOT NULL DEFAULT ''",
2493
2513
  ]
2494
2514
 
2495
2515
 
@@ -1194,6 +1194,19 @@ class IssueFacts:
1194
1194
  # see `issue_cache_stale` for the ONE thing this changes.
1195
1195
  issue_synced_at: float | None = None
1196
1196
  merged: bool = False # a work-like assignment with status == 'merged'
1197
+ # #3384: GitHub's own witness that a human explicitly reopened this
1198
+ # issue (`stateReason == "reopened"` off `gh issue list`/`get_open_
1199
+ # issues`) — `False` for an issue that has simply never been closed.
1200
+ # `merged` above is a permanent historical record: once any work-like
1201
+ # assignment for this issue reaches `status == "merged"` it never
1202
+ # un-merges, even after the issue is reopened for incomplete work
1203
+ # (claude-coordinator#3384 — a PR merged with its goal unmet, reopened,
1204
+ # and a freshly re-queued entry still short-circuited straight to
1205
+ # `done` on the strength of that stale record). `reopened` is what lets
1206
+ # `landed` below tell that apart from quadraui-style repos whose merged
1207
+ # PRs never auto-close the linked issue at all — both otherwise read
1208
+ # identically as `merged=True, issue_state="open"`.
1209
+ reopened: bool = False
1197
1210
  active_work: bool = False # a NON-terminal work-like assignment
1198
1211
  # #3239: a work-like assignment with status == 'done' — completed
1199
1212
  # successfully but not yet merged (still owed Test/Review/Merge). Unlike
@@ -1315,8 +1328,25 @@ class IssueFacts:
1315
1328
  rows the merge projection can miss, and quadraui-style repos can merge
1316
1329
  a PR into ``develop`` while the linked issue stays open — so neither
1317
1330
  signal alone is reliable.
1331
+
1332
+ #3384: `reopened` is the one override neither of those signals sees.
1333
+ `closed` wins outright whenever it is true — a merge that legitimately
1334
+ re-closed a reopened issue is done, full stop. But when the issue is
1335
+ currently OPEN and carries GitHub's own "a human explicitly reopened
1336
+ this" witness, a bare `merged` reading must NOT count: it is provably
1337
+ stale — the very act of reopening is an operator's statement that an
1338
+ earlier merge did not finish the work, and trusting the merge record
1339
+ over it is claude-coordinator#3380's incident replayed (a PR merged
1340
+ with its goal unmet, reopened, and every entry gated `--after` it
1341
+ released anyway). An issue that has simply never closed (the
1342
+ quadraui case above) never sets `reopened`, so this changes nothing
1343
+ for it.
1318
1344
  """
1319
- return self.merged or self.closed
1345
+ if self.closed:
1346
+ return True
1347
+ if self.reopened:
1348
+ return False
1349
+ return self.merged
1320
1350
 
1321
1351
 
1322
1352
  def _issue_cache_stale(facts: IssueFacts, now: float | None) -> bool:
@@ -1435,6 +1465,10 @@ def build_board_view(
1435
1465
  synced_at = row.get("synced_at")
1436
1466
  if isinstance(synced_at, (int, float)):
1437
1467
  entry["issue_synced_at"] = float(synced_at)
1468
+ # #3384: GitHub's own witness that this issue was explicitly
1469
+ # reopened — see `IssueFacts.reopened`'s docstring for why `merged`
1470
+ # alone cannot be trusted once this is set.
1471
+ entry["reopened"] = str(row.get("state_reason") or "").lower() == "reopened"
1438
1472
 
1439
1473
  # #1891: `merge_ci_pending` — mirrors `drive_state._merge_entry`'s OWN
1440
1474
  # reason resolution exactly (live `merge_plan` reason, falling back to
@@ -1125,6 +1125,13 @@ def _local_issue_rows() -> list[dict]:
1125
1125
  which guards this SELECT and the HTTP shape against drifting apart
1126
1126
  again.
1127
1127
 
1128
+ #3384: ``state_reason`` added alongside the rest — what
1129
+ ``coord.drive_queue.build_board_view`` needs to populate
1130
+ ``IssueFacts.reopened``, without which a reopened issue's stale
1131
+ ``merged`` witness would keep reading as ``landed`` on this exact
1132
+ daemon-host path forever (the one that runs every real
1133
+ ``coord drive-queue tick``).
1134
+
1128
1135
  Deliberately queries ``get_connection()`` rather than
1129
1136
  ``coord.dao.SqliteStore`` — see :meth:`BoardFetcher._fetch_local`'s
1130
1137
  docstring for why the latter is wrong for anything running in-process
@@ -1141,7 +1148,7 @@ def _local_issue_rows() -> list[dict]:
1141
1148
  rows = sql.execute(
1142
1149
  get_connection(),
1143
1150
  "SELECT repo_name, number, title, state, milestone_number, "
1144
- "milestone_title, labels, body, synced_at FROM issues",
1151
+ "milestone_title, labels, body, synced_at, state_reason FROM issues",
1145
1152
  ).fetchall()
1146
1153
  except Exception: # noqa: BLE001 — see the fail-soft note above
1147
1154
  return []
@@ -701,6 +701,13 @@ def get_open_issues(repo: str, *, force_through_backoff: bool = False) -> list[d
701
701
  _sync_issues_tick`` once ``coord.issues_sync_status.is_starved(repo)``
702
702
  says this repo has gone too long without a successful sync — see
703
703
  :func:`coord.github_ops._gh`'s docstring for what it actually changes.
704
+
705
+ #3384: ``stateReason`` is requested alongside the rest — GitHub sets it
706
+ to ``"reopened"`` on an issue a human explicitly reopened via ``gh issue
707
+ reopen`` (and leaves it ``null`` for an issue that has simply never been
708
+ closed). ``coord.state._upsert_open_issues_local`` persists it so
709
+ ``coord.drive_queue.IssueFacts.landed`` can refuse to treat a reopened
710
+ issue as done on the strength of a stale merge record.
704
711
  """
705
712
  # #658: raised from 100 → 500 so repos with many open issues don't silently
706
713
  # skip old issue numbers during coord sync. GitHub paginates the REST list
@@ -708,7 +715,7 @@ def get_open_issues(repo: str, *, force_through_backoff: bool = False) -> list[d
708
715
  # repo — acceptable for a background sync.
709
716
  return _gh_json(
710
717
  "issue", "list", "--repo", repo, "--state", "open",
711
- "--json", "number,title,labels,milestone,body,assignees",
718
+ "--json", "number,title,labels,milestone,body,assignees,stateReason",
712
719
  "--limit", "500",
713
720
  default=[],
714
721
  force_through_backoff=force_through_backoff, caller="github_ops.get_open_issues")
@@ -7705,11 +7705,17 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
7705
7705
  milestone = issue.get("milestone") or {}
7706
7706
  milestone_number = milestone.get("number") if milestone else None
7707
7707
  milestone_title = milestone.get("title") if milestone else None
7708
+ # #3384: `gh issue list --json stateReason` — `"reopened"` when a
7709
+ # human explicitly reopened this issue, `""`/null for an issue that
7710
+ # has simply never been closed. Lowercased on write so
7711
+ # `coord.drive_queue.build_board_view`'s `== "reopened"` compare
7712
+ # never has to guess GitHub's casing.
7713
+ state_reason = str(issue.get("stateReason") or "").lower()
7708
7714
  sql.execute(conn,
7709
7715
  """
7710
7716
  INSERT INTO issues (repo_name, number, title, body, state, labels, synced_at,
7711
- milestone_number, milestone_title)
7712
- VALUES (?, ?, ?, ?, 'open', ?, ?, ?, ?)
7717
+ milestone_number, milestone_title, state_reason)
7718
+ VALUES (?, ?, ?, ?, 'open', ?, ?, ?, ?, ?)
7713
7719
  ON CONFLICT (repo_name, number) DO UPDATE SET
7714
7720
  title = excluded.title,
7715
7721
  body = excluded.body,
@@ -7717,7 +7723,8 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
7717
7723
  labels = excluded.labels,
7718
7724
  synced_at = excluded.synced_at,
7719
7725
  milestone_number = excluded.milestone_number,
7720
- milestone_title = excluded.milestone_title
7726
+ milestone_title = excluded.milestone_title,
7727
+ state_reason = excluded.state_reason
7721
7728
  """,
7722
7729
  (
7723
7730
  repo_name,
@@ -7728,6 +7735,7 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
7728
7735
  now,
7729
7736
  milestone_number,
7730
7737
  milestone_title,
7738
+ state_reason,
7731
7739
  ),
7732
7740
  )
7733
7741
  # #603: the per-issue context digest is short-lived — drop it for any issue
@@ -395,3 +395,172 @@ def test_active_work_never_dropped_regardless_of_terminal_history_size(
395
395
  issue = next(i for i in board["issues"] if i["number"] == 99999)
396
396
  assert issue["state"] == "open"
397
397
  assert issue["body"] == "the open body" # open issue body untouched by the closed-body drop
398
+
399
+
400
+ # ── #3384: the reopen witness must survive the wire's byte policy ──────────
401
+ #
402
+ # `issues.state_reason` (GitHub's own `stateReason`) is the ONLY witness that
403
+ # lets `coord.drive_queue.IssueFacts.landed` tell "a human reopened this
404
+ # issue because the merged PR did not finish the work" apart from "this repo
405
+ # merges into develop and never auto-closes the issue" — both otherwise read
406
+ # as `merged=True, issue_state="open"`. It is also a defaulted field on every
407
+ # one of the board's ~800 issue rows, which is ~20 bytes each, per poll: on
408
+ # the 3000-row seed above, 57 KB, enough on its own to breach
409
+ # BOARD_PAYLOAD_BYTE_BUDGET. `bound_issue_row` therefore drops the EMPTY
410
+ # default from the wire and keeps every non-empty value.
411
+ #
412
+ # These guard both halves at once — the cheap shape (the default is gone) and
413
+ # the expensive one that actually matters (a real reopen still reaches the
414
+ # consumer, over the real HTTP wire, and still flips `landed` to False). A
415
+ # byte-saving cut that silently took the witness with it would pass the
416
+ # budget guard above and re-open #3384; it fails here instead.
417
+
418
+
419
+ def _board_over_http(db_path: Path, cfg_path: Path) -> dict:
420
+ cfg = load_config(cfg_path)
421
+ app = build_app(SqliteStore(db_path), cfg)
422
+ with TestClient(app) as cli:
423
+ resp = cli.get("/board")
424
+ assert resp.status_code == 200
425
+ return resp.json()
426
+
427
+
428
+ def _seed_reopened_and_control(conn: sqlite3.Connection) -> None:
429
+ """One issue merged-then-reopened, one merged-and-never-closed control.
430
+
431
+ Both carry a merged work assignment, so `IssueFacts.merged` is True for
432
+ each and `state_reason` is the ONLY thing that can tell them apart.
433
+ """
434
+ conn.executemany(
435
+ "INSERT INTO assignments (assignment_id, machine_name, repo_name, "
436
+ "issue_number, issue_title, status, type, dispatched_at, finished_at) "
437
+ "VALUES (?,?,?,?,?,?,?,?,?)",
438
+ [
439
+ ("a-reopened", "m", "api", 3380, "reopened", "merged", "work", NOW, NOW),
440
+ ("a-control", "m", "api", 3381, "never closed", "merged", "work", NOW, NOW),
441
+ ],
442
+ )
443
+ conn.executemany(
444
+ "INSERT INTO issues (repo_name, number, title, body, state, labels, "
445
+ "synced_at, state_reason) VALUES (?,?,?,?,?,?,?,?)",
446
+ [
447
+ ("api", 3380, "reopened", "", "open", "[]", NOW, "reopened"),
448
+ ("api", 3381, "never closed", "", "open", "[]", NOW, ""),
449
+ ],
450
+ )
451
+ conn.commit()
452
+
453
+
454
+ def test_bound_issue_row_drops_the_empty_state_reason_default() -> None:
455
+ """The byte cut: an empty `state_reason` leaves the wire entirely rather
456
+ than shipping `""` on every issue row of every poll."""
457
+ row = {"state": "open", "body": "", "state_reason": ""}
458
+ bound_issue_row(row)
459
+ assert "state_reason" not in row
460
+
461
+
462
+ def test_bound_issue_row_keeps_a_reopened_state_reason() -> None:
463
+ """...and the witness itself is never the thing that gets cut."""
464
+ row = {"state": "open", "body": "", "state_reason": "reopened"}
465
+ bound_issue_row(row)
466
+ assert row["state_reason"] == "reopened"
467
+
468
+
469
+ def test_bound_issue_row_keeps_a_state_reason_it_does_not_interpret() -> None:
470
+ """The cut drops the DEFAULT, not "anything that isn't 'reopened'" — a
471
+ value GitHub starts sending that coord has no opinion about still reaches
472
+ clients intact."""
473
+ row = {"state": "closed", "body": "", "state_reason": "not_planned"}
474
+ bound_issue_row(row)
475
+ assert row["state_reason"] == "not_planned"
476
+
477
+
478
+ def test_state_reason_policy_is_the_same_for_a_tracking_issue() -> None:
479
+ """Epics take an early return out of `bound_issue_row` for the body cap
480
+ (#1791/#1939); the `state_reason` policy is applied above it, so the wire
481
+ shape of that field does not depend on which kind of issue a row is."""
482
+ from coord.milestone_order import TRACKING_ISSUE_LABEL
483
+
484
+ epic = {"state": "open", "body": "x", "labels": [TRACKING_ISSUE_LABEL],
485
+ "state_reason": ""}
486
+ bound_issue_row(epic)
487
+ assert "state_reason" not in epic
488
+
489
+ reopened_epic = {"state": "open", "body": "x", "labels": [TRACKING_ISSUE_LABEL],
490
+ "state_reason": "reopened"}
491
+ bound_issue_row(reopened_epic)
492
+ assert reopened_epic["state_reason"] == "reopened"
493
+
494
+
495
+ def test_a_reopened_issue_is_still_not_landed_after_the_http_wire(
496
+ tmp_path: Path, valid_config_path: Path
497
+ ) -> None:
498
+ """#3384 end to end over the REAL wire: serve `/board` from a seeded DB,
499
+ reduce the response exactly as `coord drive-queue tick` does, and assert
500
+ the reopened issue's stale `merged` record still does NOT read as landed
501
+ — while the control issue (merged, never closed, the quadraui case) still
502
+ does. This is the assertion the byte cut could break."""
503
+ from coord.drive_queue import build_board_view, entry_key
504
+
505
+ db = tmp_path / "reopened.db"
506
+ conn = _ensure_schema_db(db)
507
+ _seed_reopened_and_control(conn)
508
+ conn.close()
509
+
510
+ board = _board_over_http(db, valid_config_path)
511
+ view = build_board_view(board)
512
+
513
+ reopened = view.facts(entry_key("api", 3380))
514
+ assert reopened.merged is True # the stale record is still on the board
515
+ assert reopened.reopened is True # ...and the witness survived the wire
516
+ assert reopened.landed is False # ...so the entry is NOT waved through
517
+
518
+ control = view.facts(entry_key("api", 3381))
519
+ assert control.merged is True
520
+ assert control.reopened is False
521
+ assert control.landed is True
522
+
523
+
524
+ def test_the_wire_and_the_daemon_host_local_path_agree_on_reopened(
525
+ tmp_path: Path, valid_config_path: Path, coord_db
526
+ ) -> None:
527
+ """One question, one answer (#2085): `reopened` is asked on two surfaces
528
+ — the HTTP `/board` wire (thin clients) and the daemon host's own local
529
+ SELECTs, which never run through `coord.board_wire` at all. Dropping the
530
+ empty default on only one of them would put the two surfaces on different
531
+ answers for the same DB. Assert all three reductions agree, row for row.
532
+ """
533
+ from coord.commands.drive_queue import _local_issue_rows as tick_rows
534
+ from coord.drive_queue import build_board_view, entry_key
535
+ from coord.drive_state import _local_issue_rows as drive_rows
536
+
537
+ db = tmp_path / "reopened.db"
538
+ conn = _ensure_schema_db(db)
539
+ _seed_reopened_and_control(conn)
540
+ conn.close()
541
+
542
+ # Same rows again, this time in the autouse `coord_db` the local paths read.
543
+ _seed_reopened_and_control(coord_db)
544
+
545
+ board = _board_over_http(db, valid_config_path)
546
+ assignments = board["assignments"]
547
+ views = {
548
+ "http": build_board_view(board),
549
+ "drive_state": build_board_view(
550
+ {"assignments": assignments, "issues": drive_rows()}
551
+ ),
552
+ "tick": build_board_view(
553
+ {"assignments": assignments, "issues": tick_rows()}
554
+ ),
555
+ }
556
+ for number, expected in ((3380, True), (3381, False)):
557
+ key = entry_key("api", number)
558
+ answers = {name: v.facts(key).reopened for name, v in views.items()}
559
+ assert set(answers.values()) == {expected}, (
560
+ f"api#{number}: the three surfaces disagree about `reopened` "
561
+ f"({answers}) — a split-brain, whichever one is right"
562
+ )
563
+ landed = {name: v.facts(key).landed for name, v in views.items()}
564
+ assert set(landed.values()) == {not expected}, (
565
+ f"api#{number}: the three surfaces disagree about `landed` ({landed})"
566
+ )
@@ -2465,7 +2465,10 @@ class TestUatStateAndReasonColumns:
2465
2465
  # #3357 bumped this to (18, 96): `assignments.test_confirmation` —
2466
2466
  # machine-readable provenance for a `test_state` write (confirmed by a real
2467
2467
  # out-of-band re-run, or merely carried forward from the worker's claim).
2468
- _PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (18, 96)
2468
+ # #3384 bumped this to (19, 97): `issues.state_reason` — GitHub's own witness
2469
+ # that an issue was explicitly reopened, distinguishing that from an issue
2470
+ # that merged without ever auto-closing.
2471
+ _PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (19, 97)
2469
2472
 
2470
2473
 
2471
2474
  class TestMigrateAddColumnsVersionGuard: