code-coordinator 0.5.260__tar.gz → 0.5.262__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 (872) hide show
  1. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/SOURCES.txt +4 -0
  4. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/scm_file_list.json +4 -0
  5. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/lifecycle.py +11 -1
  7. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/drive_queue.py +80 -0
  8. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/github_ops.py +102 -6
  9. code_coordinator-0.5.262/coord/health/checks/issues_sync_staleness.py +132 -0
  10. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/fleet_snapshot.py +18 -0
  11. code_coordinator-0.5.262/coord/issues_sync_status.py +237 -0
  12. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/serve_app.py +252 -28
  13. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/conftest.py +23 -0
  14. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue.py +93 -1
  15. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_fleet_health_probes.py +1 -0
  16. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_github_ops.py +127 -0
  17. code_coordinator-0.5.262/tests/test_health_issues_sync_staleness.py +169 -0
  18. code_coordinator-0.5.262/tests/test_issues_sync_status.py +152 -0
  19. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_portal_sync.py +45 -0
  20. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_serve.py +515 -9
  21. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.claude/commands/board.md +0 -0
  22. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.claude/commands/complete-session.md +0 -0
  23. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.claude/commands/coordinator.md +0 -0
  24. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.githooks/_lib.sh +0 -0
  25. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.githooks/post-checkout +0 -0
  26. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.githooks/post-commit +0 -0
  27. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.githooks/post-merge +0 -0
  28. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/coord-ci-acceptance.yml +0 -0
  30. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/workflows/auto-release.yml +0 -0
  31. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/workflows/cargo-test.yml +0 -0
  32. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/workflows/release-tui.yml +0 -0
  34. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.github/workflows/test.yml +0 -0
  35. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/.gitignore +0 -0
  36. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/CLAUDE.md +0 -0
  37. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/GOAL.md +0 -0
  38. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/LICENSE +0 -0
  39. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/MANIFEST.in +0 -0
  40. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/README.md +0 -0
  41. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/dependency_links.txt +0 -0
  42. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/entry_points.txt +0 -0
  43. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/requires.txt +0 -0
  44. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/code_coordinator.egg-info/top_level.txt +0 -0
  45. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/__init__.py +0 -0
  46. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/_board_mapping.py +0 -0
  47. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/acceptance.py +0 -0
  48. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/acceptance_drivers.py +0 -0
  49. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agent.py +0 -0
  50. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agent_app.py +0 -0
  51. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agent_update.py +0 -0
  52. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agents/opencode/.gitignore +0 -0
  53. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agents/opencode/agents/work.md +0 -0
  54. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/agents/opencode/routing.jsonc +0 -0
  55. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/approved_work.py +0 -0
  56. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/board_schema.py +0 -0
  61. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/ci_fix.py +0 -0
  68. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/ci_gitlab.py +0 -0
  70. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/cli.py +0 -0
  73. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/client.py +0 -0
  74. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/__init__.py +0 -0
  75. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/_common.py +0 -0
  76. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/acceptance.py +0 -0
  77. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/agent_ops.py +0 -0
  78. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/audit.py +0 -0
  79. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/dispatch.py +0 -0
  81. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/dispatch_workers.py +0 -0
  82. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/drive.py +0 -0
  83. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/drive_queue.py +0 -0
  84. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/gate_a.py +0 -0
  85. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/gates.py +0 -0
  86. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/issues.py +0 -0
  87. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/pr.py +0 -0
  93. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/release.py +0 -0
  94. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/repo.py +0 -0
  95. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/report.py +0 -0
  96. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/review.py +0 -0
  97. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/scorecard.py +0 -0
  98. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/sessions.py +0 -0
  99. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/setup.py +0 -0
  100. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/status.py +0 -0
  101. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/config.py +0 -0
  106. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/db.py +0 -0
  116. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-drive-queue.service +0 -0
  124. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-drive-queue.timer +0 -0
  125. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-failure-notify.service +0 -0
  126. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-fleet-watchdog.service +0 -0
  127. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  128. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-notify.service +0 -0
  129. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-notify.timer +0 -0
  130. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-release-propagate.service +0 -0
  131. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-release-propagate.timer +0 -0
  132. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-release-window.service +0 -0
  133. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-release-window.timer +0 -0
  134. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-serve.service +0 -0
  135. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-web-dist-build.service +0 -0
  136. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-web-dist-build.timer +0 -0
  137. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy/coord-web.service +0 -0
  138. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy_manifest.py +0 -0
  139. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deploy_units.py +0 -0
  140. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/deps.py +0 -0
  141. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/diagnose.py +0 -0
  142. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dispatch.py +0 -0
  143. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/dist_name.py +0 -0
  144. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/drive.py +0 -0
  145. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/drive_state.py +0 -0
  146. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/events.py +0 -0
  147. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/failure_class.py +0 -0
  148. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/filelock.py +0 -0
  149. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/fleet_config_health.py +0 -0
  150. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/forge_availability.py +0 -0
  151. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/freshness.py +0 -0
  152. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/gate_a.py +0 -0
  153. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/gate_b.py +0 -0
  154. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/gate_snapshot.py +0 -0
  155. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/gates.py +0 -0
  156. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/github_throttle.py +0 -0
  157. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/goal.py +0 -0
  158. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/graph_health.py +0 -0
  159. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/__init__.py +0 -0
  160. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/aggregate.py +0 -0
  161. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/__init__.py +0 -0
  162. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/agent_install.py +0 -0
  163. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/cargo_targets.py +0 -0
  164. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/claude_binary.py +0 -0
  165. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/coord_web_ci_pin.py +0 -0
  166. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/deploy_lane_facts.py +0 -0
  167. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/disk.py +0 -0
  168. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/fleet_board.py +0 -0
  169. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  170. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/fleet_phantom.py +0 -0
  171. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/fleet_unit_drift.py +0 -0
  172. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/graph.py +0 -0
  173. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/graphify_cli.py +0 -0
  174. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/index_lock.py +0 -0
  175. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/plan_usage.py +0 -0
  176. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/release_cordon.py +0 -0
  177. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/repo_state.py +0 -0
  178. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/spawned_coord.py +0 -0
  179. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/stalled_pipeline.py +0 -0
  180. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/timer_active.py +0 -0
  181. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/toolchain.py +0 -0
  182. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/unit_drift.py +0 -0
  183. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/unit_enablement.py +0 -0
  184. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/checks/worktrees.py +0 -0
  185. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/cli.py +0 -0
  186. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/context.py +0 -0
  187. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/models.py +0 -0
  188. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/pypi.py +0 -0
  189. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/registry.py +0 -0
  190. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/render.py +0 -0
  191. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/health/units.py +0 -0
  192. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/hooks.py +0 -0
  193. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/housekeeping.py +0 -0
  194. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/interactive.py +0 -0
  195. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/issue_store.py +0 -0
  196. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/liveness_auditor.py +0 -0
  197. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/machine_pause.py +0 -0
  198. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/merge_queue.py +0 -0
  199. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/milestone_chat.py +0 -0
  200. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/milestone_dispatch.py +0 -0
  201. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/milestone_gate.py +0 -0
  202. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/milestone_order.py +0 -0
  203. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/mock_author.py +0 -0
  204. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/models.py +0 -0
  205. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/network.py +0 -0
  206. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/new_issue_chat.py +0 -0
  207. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/__init__.py +0 -0
  208. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/baseline.py +0 -0
  209. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/cli.py +0 -0
  210. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/collect.py +0 -0
  211. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/digest.py +0 -0
  212. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/models.py +0 -0
  213. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/predicate.py +0 -0
  214. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/service.py +0 -0
  215. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/store.py +0 -0
  216. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notifier/transport.py +0 -0
  217. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/notify.py +0 -0
  218. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/openapi.py +0 -0
  219. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/overlap_fence.py +0 -0
  220. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/overlap_predict.py +0 -0
  221. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/parentage.py +0 -0
  222. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/parentage_github.py +0 -0
  223. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/pipeline.py +0 -0
  224. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/plan_parser.py +0 -0
  225. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/plans.py +0 -0
  226. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/platform_paths.py +0 -0
  227. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/portal_bridge.py +0 -0
  228. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/portal_store.py +0 -0
  229. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/portal_sync.py +0 -0
  230. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/pr_body_lint.py +0 -0
  231. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/prereqs.py +0 -0
  232. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/progress.py +0 -0
  233. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/providers/__init__.py +0 -0
  234. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/providers/base.py +0 -0
  235. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/providers/claude.py +0 -0
  236. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/providers/claude_pty.py +0 -0
  237. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/providers/opencode.py +0 -0
  238. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/queue_diagnose.py +0 -0
  239. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/reconcile.py +0 -0
  240. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/reconcile_tick.py +0 -0
  241. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/refine_chat.py +0 -0
  242. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/release_cordon.py +0 -0
  243. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/release_propagate.py +0 -0
  244. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/release_verify.py +0 -0
  245. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/release_window.py +0 -0
  246. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/repo_edit.py +0 -0
  247. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/repo_onboard.py +0 -0
  248. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/reports.py +0 -0
  249. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/revalidate.py +0 -0
  250. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/review.py +0 -0
  251. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/scorecard.py +0 -0
  252. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/self_health.py +0 -0
  253. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  254. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  255. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  256. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/portal-followup/SKILL.md +0 -0
  259. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/state.py +0 -0
  268. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/test_author.py +0 -0
  269. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/test_chat.py +0 -0
  270. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/test_orchestrator.py +0 -0
  271. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/test_report.py +0 -0
  272. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/tui_release.py +0 -0
  273. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/usage.py +0 -0
  274. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/usage_limits.py +0 -0
  275. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/usage_rollup.py +0 -0
  276. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coord/worker_events.py +0 -0
  277. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/coordinator.example.yml +0 -0
  278. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-agent.service +0 -0
  279. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-db-backup.service +0 -0
  280. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-db-backup.sh +0 -0
  281. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-db-backup.timer +0 -0
  282. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-drive-queue.service +0 -0
  283. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-drive-queue.timer +0 -0
  284. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-failure-notify.service +0 -0
  285. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-failure-notify.sh +0 -0
  286. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-fleet-watchdog.service +0 -0
  287. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-fleet-watchdog.timer +0 -0
  288. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-notify.service +0 -0
  289. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-notify.timer +0 -0
  290. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-release-propagate.service +0 -0
  291. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-release-propagate.timer +0 -0
  292. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-release-window.service +0 -0
  293. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-release-window.timer +0 -0
  294. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-serve.service +0 -0
  295. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-web-dist-build.service +0 -0
  296. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-web-dist-build.sh +0 -0
  297. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-web-dist-build.timer +0 -0
  298. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-web-rollback.sh +0 -0
  299. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/coord-web.service +0 -0
  300. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/deploy/node-shim.sh +0 -0
  301. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  302. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ADR_COORD_WEB_CI.md +0 -0
  303. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ADR_COORD_WEB_DIST.md +0 -0
  304. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/AGENT_OPERATIONS.md +0 -0
  305. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ARCHITECTURE.md +0 -0
  306. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ARCH_SECURITY_GATES.md +0 -0
  307. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/COCKPIT.md +0 -0
  308. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/CONTROL_CENTER.md +0 -0
  309. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/COST_DISCIPLINE.md +0 -0
  310. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/CROSS_PLATFORM.md +0 -0
  311. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/CUSTOMER_FACING_APPS.md +0 -0
  312. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/CUSTOMER_PORTAL.md +0 -0
  313. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/DRIVE_QUEUE.md +0 -0
  314. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/EPHEMERAL_WORKERS.md +0 -0
  315. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/FORGE_MIGRATION.md +0 -0
  316. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/GRAPHIFY_SETUP.md +0 -0
  317. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ISSUE_GUIDANCE.md +0 -0
  318. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/MAC_MINI.md +0 -0
  319. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  320. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/NOTIFIER.md +0 -0
  321. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/OPENCODE_VERIFICATION.md +0 -0
  322. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/OPERATING_GOTCHAS.md +0 -0
  323. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/OPERATOR_GUIDES.md +0 -0
  324. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/ORACLE_LOOP.md +0 -0
  325. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/PHONE_WEBAPP.md +0 -0
  326. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/PIPELINE_V2.md +0 -0
  327. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/PLATFORM_EVOLUTION.md +0 -0
  328. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/SECOND_BACKEND.md +0 -0
  329. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/STORE_SERVICE.md +0 -0
  330. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  331. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/WEB_CONTROL_CENTER.md +0 -0
  332. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/WSL_WINDOWS_WORKER.md +0 -0
  333. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/mocks/web/README.md +0 -0
  334. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/mocks/web/_tokens.css +0 -0
  335. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/mocks/web/issue-detail.html +0 -0
  336. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/mocks/web/pipeline-narrow.html +0 -0
  337. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/docs/mocks/web/pipeline-wide.html +0 -0
  338. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/graphify-out/.gitignore +0 -0
  339. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/install-agent.sh +0 -0
  340. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/pyproject.toml +0 -0
  341. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/audit_review_verdict_overrides.py +0 -0
  342. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  343. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/build-worker-image.sh +0 -0
  344. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/coordinator-machine.py +0 -0
  345. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/epic-down.sh +0 -0
  346. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/epic-up.sh +0 -0
  347. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/preflight.sh +0 -0
  348. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/provision-worker.sh +0 -0
  349. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  350. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  351. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/azure-workers/verify-github-token.sh +0 -0
  352. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/check_gh_argv_containment.py +0 -0
  353. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/codegen.py +0 -0
  354. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/coord-test-runner.sh +0 -0
  355. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/coord-venv-rollback.sh +0 -0
  356. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/drive-batch.sh +0 -0
  357. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/fleet_watchdog.py +0 -0
  358. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/gen_board_fixture.py +0 -0
  359. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/gen_mock_index.py +0 -0
  360. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/next_release_tag.py +0 -0
  361. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/run_tests_in_populated_home.sh +0 -0
  362. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/run_tests_without_gh.sh +0 -0
  363. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/smoke_437_interactive.py +0 -0
  364. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/verify_878_review_capture.py +0 -0
  365. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/verify_release_published.py +0 -0
  366. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/scripts/verify_release_wheel.py +0 -0
  367. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/setup.cfg +0 -0
  368. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/SMOKE_SET.md +0 -0
  369. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/__init__.py +0 -0
  370. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  371. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/contract.md +0 -0
  372. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/manifest.yml +0 -0
  373. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  374. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  375. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  376. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  377. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-37/conftest.py +0 -0
  378. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-37/contract.md +0 -0
  379. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-37/manifest.yml +0 -0
  380. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  381. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  382. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/contract.md +0 -0
  383. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/manifest.yml +0 -0
  384. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  385. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  386. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  387. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  388. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  389. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  390. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  391. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  392. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  393. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  394. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/contract.md +0 -0
  395. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  396. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  397. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/manifest.yml +0 -0
  398. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  399. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-51/tsconfig.json +0 -0
  400. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  401. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  402. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  403. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/contract.md +0 -0
  404. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  405. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/manifest.yml +0 -0
  406. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  407. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  408. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  409. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  410. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  411. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  412. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  413. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  414. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  415. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  416. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  417. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  418. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/contract.md +0 -0
  419. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  420. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/manifest.yml +0 -0
  421. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  422. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  423. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  424. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  425. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  426. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  427. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  428. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/board-pipeline-basic.json +0 -0
  429. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  430. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  431. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  432. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  433. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/all_pass.json +0 -0
  434. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  435. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/mixed_fail.json +0 -0
  436. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  437. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  438. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/skip.json +0 -0
  439. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/playwright/truncated.json +0 -0
  440. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  441. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  442. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  443. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  444. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  445. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  446. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  447. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  448. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_acceptance.py +0 -0
  449. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_acceptance_drivers.py +0 -0
  450. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent.py +0 -0
  451. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_api_error.py +0 -0
  452. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_app.py +0 -0
  453. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_branch_base.py +0 -0
  454. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_branch_capture.py +0 -0
  455. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_config_free_1712.py +0 -0
  456. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_deploy_units_endpoint.py +0 -0
  457. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_dirty_worktree.py +0 -0
  458. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  459. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_graph_self_heal.py +0 -0
  460. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_health_h3.py +0 -0
  461. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_idle_restart.py +0 -0
  462. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_push_failure.py +0 -0
  463. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_reap.py +0 -0
  464. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_repos_and_pull.py +0 -0
  465. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_restart_services_endpoint.py +0 -0
  466. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_skills_self_heal.py +0 -0
  467. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_startup_diagnostics.py +0 -0
  468. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_update.py +0 -0
  469. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_update_bluegreen.py +0 -0
  470. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_usage_limit.py +0 -0
  471. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_agent_zero_commit.py +0 -0
  472. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ambient_home_isolation.py +0 -0
  473. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_approve_dependency_busy_2804.py +0 -0
  474. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_approve_reject_plan.py +0 -0
  475. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_approve_usage_gate.py +0 -0
  476. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_approved_work_2532.py +0 -0
  477. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_assignment_already_recorded_daemon.py +0 -0
  478. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_audit_log.py +0 -0
  479. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_audit_outcome.py +0 -0
  480. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_audit_query.py +0 -0
  481. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_auto_loop.py +0 -0
  482. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_auto_release_publish_2035.py +0 -0
  483. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_base_checkout_restore.py +0 -0
  484. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_block_log.py +0 -0
  485. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_cap_762.py +0 -0
  486. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_fixture.py +0 -0
  487. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_read_path.py +0 -0
  488. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_schema.py +0 -0
  489. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_service.py +0 -0
  490. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_state.py +0 -0
  491. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_board_wire.py +0 -0
  492. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_brain.py +0 -0
  493. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_branch_model.py +0 -0
  494. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_bug_intake.py +0 -0
  495. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_build_worker_image_env_update.py +0 -0
  496. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cargo_cache.py +0 -0
  497. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_check_gh_argv_containment.py +0 -0
  498. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ci_acceptance_gate_1950.py +0 -0
  499. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ci_fix.py +0 -0
  500. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ci_gitlab.py +0 -0
  501. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ci_parity_2091.py +0 -0
  502. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_ci_store.py +0 -0
  503. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_claim.py +0 -0
  504. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_claude_md_budget.py +0 -0
  505. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_acceptance.py +0 -0
  506. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_assign.py +0 -0
  507. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  508. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_assign_interactive_remote.py +0 -0
  509. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_assign_provider.py +0 -0
  510. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  511. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_audit.py +0 -0
  512. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_chat_continue.py +0 -0
  513. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_decide.py +0 -0
  514. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_diagnose_config_provenance.py +0 -0
  515. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_diagnose_forge_availability.py +0 -0
  516. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_diagnose_graph.py +0 -0
  517. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_diagnose_self.py +0 -0
  518. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_doctor.py +0 -0
  519. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_doctor_config_free_1801.py +0 -0
  520. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  521. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_drive.py +0 -0
  522. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_drive_queue.py +0 -0
  523. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_escalate.py +0 -0
  524. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_fix_headless_review.py +0 -0
  525. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_gate_a.py +0 -0
  526. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_install_drift.py +0 -0
  527. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_install_skills.py +0 -0
  528. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_issue_comment.py +0 -0
  529. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_issue_create_label.py +0 -0
  530. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_issue_reopen.py +0 -0
  531. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_issue_view_list.py +0 -0
  532. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_merge.py +0 -0
  533. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_assign.py +0 -0
  534. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_capture.py +0 -0
  535. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_chat_add_child.py +0 -0
  536. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_dispatch.py +0 -0
  537. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_gate_b.py +0 -0
  538. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_gate_c.py +0 -0
  539. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_order.py +0 -0
  540. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  541. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_milestone_ship.py +0 -0
  542. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_network.py +0 -0
  543. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_new_issue_chat.py +0 -0
  544. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_plans.py +0 -0
  545. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_portal.py +0 -0
  546. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_pr.py +0 -0
  547. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_pull_artifact.py +0 -0
  548. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_queue.py +0 -0
  549. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_reattach_sessions.py +0 -0
  550. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_refine_board.py +0 -0
  551. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_release_preflight.py +0 -0
  552. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_release_propagate.py +0 -0
  553. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_release_window.py +0 -0
  554. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_repo_2220.py +0 -0
  555. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  556. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_scorecard.py +0 -0
  557. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_set_review_findings.py +0 -0
  558. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_advisory_terminal.py +0 -0
  559. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_contested_tag.py +0 -0
  560. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_merge_queue.py +0 -0
  561. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_provider.py +0 -0
  562. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_review_finalizing.py +0 -0
  563. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_test_failed_tag.py +0 -0
  564. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_status_usage_limit.py +0 -0
  565. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_sync_comments_873.py +0 -0
  566. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_test_plan.py +0 -0
  567. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_track.py +0 -0
  568. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_tui_update.py +0 -0
  569. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cli_wait.py +0 -0
  570. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_client_base_install.py +0 -0
  571. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_commands_common.py +0 -0
  572. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_comments.py +0 -0
  573. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_completion_summary.py +0 -0
  574. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config.py +0 -0
  575. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config_acceptance.py +0 -0
  576. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config_audit.py +0 -0
  577. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config_pricing.py +0 -0
  578. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  579. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_config_usage_gate.py +0 -0
  580. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_confirm_test.py +0 -0
  581. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_conflict_fix.py +0 -0
  582. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_conflict_fix_semantic.py +0 -0
  583. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  584. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_test.py +0 -0
  585. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_test_runner_baseline.py +0 -0
  586. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_test_runner_populated_home.py +0 -0
  587. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_test_runner_routing.py +0 -0
  588. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_test_runner_toolchain.py +0 -0
  589. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_uat.py +0 -0
  590. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coord_web_sse_restart_live.py +0 -0
  591. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_coordinator_machine.py +0 -0
  592. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_cross_platform_imports.py +0 -0
  593. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dao.py +0 -0
  594. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dashboard.py +0 -0
  595. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dashboard_fixture.py +0 -0
  596. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dashboard_terminal.py +0 -0
  597. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dashboard_terminal_live.py +0 -0
  598. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_db.py +0 -0
  599. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dead_end.py +0 -0
  600. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_decomposition_chat.py +0 -0
  601. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_coord_db_backup.py +0 -0
  602. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_coord_web_dist.py +0 -0
  603. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_coord_web_rollback.py +0 -0
  604. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_drive_queue_unit.py +0 -0
  605. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_failure_notify_unit.py +0 -0
  606. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_manifest.py +0 -0
  607. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_notify_unit.py +0 -0
  608. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_units_lane.py +0 -0
  609. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deploy_web_unit.py +0 -0
  610. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_deps.py +0 -0
  611. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_diagnose.py +0 -0
  612. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dispatch.py +0 -0
  613. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dispatch_target_validation.py +0 -0
  614. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_dist_name.py +0 -0
  615. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_done_housekeeping.py +0 -0
  616. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive.py +0 -0
  617. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue_blocked_rendering.py +0 -0
  618. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue_launch_argv.py +0 -0
  619. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  620. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue_roll_pending.py +0 -0
  621. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  622. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_state.py +0 -0
  623. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_drive_tmux.py +0 -0
  624. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_epic_up_capability_detection.py +0 -0
  625. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  626. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_epic_up_image_provenance.py +0 -0
  627. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_errors.py +0 -0
  628. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_events.py +0 -0
  629. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_failure_class.py +0 -0
  630. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_filelock.py +0 -0
  631. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  632. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_fix_of_force_override.py +0 -0
  633. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_fleet_config_health.py +0 -0
  634. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_fleet_health_snapshot.py +0 -0
  635. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_fleet_watchdog.py +0 -0
  636. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_forge_availability.py +0 -0
  637. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_freshness.py +0 -0
  638. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gate_a.py +0 -0
  639. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gate_b.py +0 -0
  640. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gate_snapshot_staleness.py +0 -0
  641. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gates.py +0 -0
  642. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  643. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_gen_mock_index.py +0 -0
  644. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_generated_rust_fixture.py +0 -0
  645. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_generated_types_fixture.py +0 -0
  646. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_github_throttle.py +0 -0
  647. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_goal.py +0 -0
  648. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_graph_health.py +0 -0
  649. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_graph_selfheal_absent_2237.py +0 -0
  650. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_handoff.py +0 -0
  651. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_checks.py +0 -0
  652. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_cli.py +0 -0
  653. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_cli_graph.py +0 -0
  654. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_config.py +0 -0
  655. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_context.py +0 -0
  656. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_coord_web_ci_pin.py +0 -0
  657. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_deploy_lane_facts.py +0 -0
  658. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_fix.py +0 -0
  659. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_incident_regression.py +0 -0
  660. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_pypi.py +0 -0
  661. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_registry.py +0 -0
  662. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_release_cordon_probe.py +0 -0
  663. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_timer_active.py +0 -0
  664. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_toolchain.py +0 -0
  665. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_unit_drift.py +0 -0
  666. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_health_unit_enablement.py +0 -0
  667. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_hooks.py +0 -0
  668. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_human_attended_437.py +0 -0
  669. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_init.py +0 -0
  670. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_integration.py +0 -0
  671. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_briefing_echo.py +0 -0
  672. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_pane_log_2541.py +0 -0
  673. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_prefill_state.py +0 -0
  674. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_session_relaunch.py +0 -0
  675. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_test_verdict_backstop.py +0 -0
  676. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_token_attribution.py +0 -0
  677. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_interactive_worktree.py +0 -0
  678. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_issue_store_seam.py +0 -0
  679. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_liveness_auditor.py +0 -0
  680. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_liveness_notify.py +0 -0
  681. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_lock_contention_ratchet.py +0 -0
  682. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_machine_pause.py +0 -0
  683. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_merge_queue.py +0 -0
  684. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_merge_verify.py +0 -0
  685. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_milestone_chat.py +0 -0
  686. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_milestone_dispatch.py +0 -0
  687. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_milestone_gate.py +0 -0
  688. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_milestone_order.py +0 -0
  689. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_milestone_seam.py +0 -0
  690. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_mock_author.py +0 -0
  691. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_model_tiering.py +0 -0
  692. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_models.py +0 -0
  693. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_models_config_labels.py +0 -0
  694. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_needs_attention.py +0 -0
  695. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_network.py +0 -0
  696. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_new_issue_chat.py +0 -0
  697. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_next_release_tag.py +0 -0
  698. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_node_shim.py +0 -0
  699. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_baseline.py +0 -0
  700. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_cli.py +0 -0
  701. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_collect.py +0 -0
  702. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_config.py +0 -0
  703. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_drive_seam.py +0 -0
  704. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_isolation.py +0 -0
  705. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_predicate.py +0 -0
  706. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_quiet_hours.py +0 -0
  707. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notifier_service.py +0 -0
  708. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notify.py +0 -0
  709. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_notify_drain.py +0 -0
  710. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_openapi.py +0 -0
  711. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_operational_defaults.py +0 -0
  712. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_overlap_fence.py +0 -0
  713. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_overlap_predict.py +0 -0
  714. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_packaged_deploy_units.py +0 -0
  715. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_parentage.py +0 -0
  716. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_paste_landed.py +0 -0
  717. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  718. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_pipeline.py +0 -0
  719. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_plan_followup_approve_plan_command.py +0 -0
  720. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_plan_followup_pr_command.py +0 -0
  721. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_plan_followup_review_command.py +0 -0
  722. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_plan_only.py +0 -0
  723. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_plan_parser.py +0 -0
  724. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_platform_paths.py +0 -0
  725. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_portal_bridge.py +0 -0
  726. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_portal_config.py +0 -0
  727. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_portal_store.py +0 -0
  728. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_pr_body_lint.py +0 -0
  729. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_prereqs.py +0 -0
  730. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_production_db_guard.py +0 -0
  731. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_progress.py +0 -0
  732. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_provider_seam.py +0 -0
  733. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_providers.py +0 -0
  734. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_providers_config_labels.py +0 -0
  735. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_providers_pty.py +0 -0
  736. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_quiet_hours.py +0 -0
  737. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_quiet_hours_store_2146.py +0 -0
  738. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reap_merged_sessions.py +0 -0
  739. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reap_stale_interactive_tick.py +0 -0
  740. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile.py +0 -0
  741. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_branch.py +0 -0
  742. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_completions.py +0 -0
  743. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  744. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_merges.py +0 -0
  745. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_no_agent_record.py +0 -0
  746. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_tick.py +0 -0
  747. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reconcile_usage_limit_done.py +0 -0
  748. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_refine_chat.py +0 -0
  749. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_cordon_2101.py +0 -0
  750. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  751. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_cordon_deadlock_2240.py +0 -0
  752. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_cordon_stuck_2490.py +0 -0
  753. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_propagate.py +0 -0
  754. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_propagate_threshold.py +0 -0
  755. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_roll_between_legs_2854.py +0 -0
  756. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_roll_window_handoff.py +0 -0
  757. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_unified_1242.py +0 -0
  758. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_verify.py +0 -0
  759. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_release_window.py +0 -0
  760. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_remote_auto_prune.py +0 -0
  761. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_remote_interactive_reaper.py +0 -0
  762. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_repo_add.py +0 -0
  763. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_repo_edit_2220.py +0 -0
  764. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_repo_graph_fleet_2237.py +0 -0
  765. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_repo_onboard_2220.py +0 -0
  766. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_report_result_push.py +0 -0
  767. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_reports.py +0 -0
  768. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_retry.py +0 -0
  769. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_retry_advisory_1606.py +0 -0
  770. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_retry_type_1636.py +0 -0
  771. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_revalidate.py +0 -0
  772. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review.py +0 -0
  773. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_end_review_without_verdict.py +0 -0
  774. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_parse_failure_diagnostic.py +0 -0
  775. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_reaffirm.py +0 -0
  776. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_state.py +0 -0
  777. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_verdict_backstop.py +0 -0
  778. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_verdict_override_audit.py +0 -0
  779. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_verdict_relay.py +0 -0
  780. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_review_zero_commits.py +0 -0
  781. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_scoped_review_wiring.py +0 -0
  782. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_scorecard.py +0 -0
  783. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_self_health.py +0 -0
  784. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_serve_app_board_trim.py +0 -0
  785. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_session.py +0 -0
  786. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_slice_issue_attribution.py +0 -0
  787. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_smoke.py +0 -0
  788. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_smoke_live_checkout_restore.py +0 -0
  789. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_smoke_workflow.py +0 -0
  790. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_spend_ceiling.py +0 -0
  791. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_spend_ceiling_coordinator.py +0 -0
  792. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_split.py +0 -0
  793. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_split_work.py +0 -0
  794. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_sql_dialect.py +0 -0
  795. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_stage_projection.py +0 -0
  796. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_stalled_pipeline.py +0 -0
  797. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_state.py +0 -0
  798. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_state_review_findings_daemon.py +0 -0
  799. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_status_fleet_footer.py +0 -0
  800. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_stop_1567.py +0 -0
  801. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_store_contract.py +0 -0
  802. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_stuck.py +0 -0
  803. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  804. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_terminal_command.py +0 -0
  805. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_author.py +0 -0
  806. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_chat.py +0 -0
  807. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_orchestrator.py +0 -0
  808. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_report.py +0 -0
  809. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_verdict_parsing.py +0 -0
  810. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_test_verdict_transcript_floor.py +0 -0
  811. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_text_io_encoding_audit.py +0 -0
  812. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_thin_client_board_audit.py +0 -0
  813. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_thin_client_config_load_1080.py +0 -0
  814. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_thin_client_daemon_routing_906.py +0 -0
  815. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_tmux_host.py +0 -0
  816. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_tmux_session.py +0 -0
  817. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_transcript_floor.py +0 -0
  818. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_usage.py +0 -0
  819. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_usage_limits.py +0 -0
  820. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_usage_rollup.py +0 -0
  821. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_venv_live_install_2121.py +0 -0
  822. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_version_single_source.py +0 -0
  823. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_watch.py +0 -0
  824. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  825. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worker_env_venv_isolation.py +0 -0
  826. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worker_events.py +0 -0
  827. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worker_image_pin_sync.py +0 -0
  828. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worker_safety.py +0 -0
  829. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worker_test_scoping.py +0 -0
  830. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worktree.py +0 -0
  831. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  832. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/Cargo.lock +0 -0
  833. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/Cargo.toml +0 -0
  834. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/cargo-config-local-quadraui.toml.example +0 -0
  835. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/approved.rs +0 -0
  836. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/audit.rs +0 -0
  837. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/chat.rs +0 -0
  838. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/data.rs +0 -0
  839. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/dialogs.rs +0 -0
  840. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/doc_tabs.rs +0 -0
  841. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/drive.rs +0 -0
  842. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/drive_queue.rs +0 -0
  843. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/escalation.rs +0 -0
  844. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/events.rs +0 -0
  845. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/fixtures.rs +0 -0
  846. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/fleet_health.rs +0 -0
  847. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/fleet_sessions.rs +0 -0
  848. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/fleet_terminals.rs +0 -0
  849. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/format.rs +0 -0
  850. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/milestone_dag.rs +0 -0
  851. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/mod.rs +0 -0
  852. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/msv.rs +0 -0
  853. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/pipeline.rs +0 -0
  854. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/plans.rs +0 -0
  855. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/render.rs +0 -0
  856. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/reports.rs +0 -0
  857. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/sessions.rs +0 -0
  858. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/settings_ui.rs +0 -0
  859. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/sidebar.rs +0 -0
  860. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/terminal.rs +0 -0
  861. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/tests.rs +0 -0
  862. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/types/generated.rs +0 -0
  863. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/types.rs +0 -0
  864. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/app/workspace.rs +0 -0
  865. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/bin/gtk.rs +0 -0
  866. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/commands.rs +0 -0
  867. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/lib.rs +0 -0
  868. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/main.rs +0 -0
  869. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/src/settings.rs +0 -0
  870. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/tests/acceptance.rs +0 -0
  871. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/tests/cli.rs +0 -0
  872. {code_coordinator-0.5.260 → code_coordinator-0.5.262}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.260
3
+ Version: 0.5.262
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.260
3
+ Version: 0.5.262
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
@@ -91,6 +91,7 @@ coord/hooks.py
91
91
  coord/housekeeping.py
92
92
  coord/interactive.py
93
93
  coord/issue_store.py
94
+ coord/issues_sync_status.py
94
95
  coord/liveness_auditor.py
95
96
  coord/machine_pause.py
96
97
  coord/merge_queue.py
@@ -232,6 +233,7 @@ coord/health/checks/fleet_unit_drift.py
232
233
  coord/health/checks/graph.py
233
234
  coord/health/checks/graphify_cli.py
234
235
  coord/health/checks/index_lock.py
236
+ coord/health/checks/issues_sync_staleness.py
235
237
  coord/health/checks/plan_usage.py
236
238
  coord/health/checks/release_cordon.py
237
239
  coord/health/checks/repo_state.py
@@ -571,6 +573,7 @@ tests/test_health_coord_web_ci_pin.py
571
573
  tests/test_health_deploy_lane_facts.py
572
574
  tests/test_health_fix.py
573
575
  tests/test_health_incident_regression.py
576
+ tests/test_health_issues_sync_staleness.py
574
577
  tests/test_health_pypi.py
575
578
  tests/test_health_registry.py
576
579
  tests/test_health_release_cordon_probe.py
@@ -590,6 +593,7 @@ tests/test_interactive_test_verdict_backstop.py
590
593
  tests/test_interactive_token_attribution.py
591
594
  tests/test_interactive_worktree.py
592
595
  tests/test_issue_store_seam.py
596
+ tests/test_issues_sync_status.py
593
597
  tests/test_liveness_auditor.py
594
598
  tests/test_liveness_notify.py
595
599
  tests/test_lock_contention_ratchet.py
@@ -153,6 +153,7 @@
153
153
  "coord/health/checks/graph.py",
154
154
  "coord/health/checks/graphify_cli.py",
155
155
  "coord/health/checks/index_lock.py",
156
+ "coord/health/checks/issues_sync_staleness.py",
156
157
  "coord/health/checks/plan_usage.py",
157
158
  "coord/health/checks/release_cordon.py",
158
159
  "coord/health/checks/repo_state.py",
@@ -175,6 +176,7 @@
175
176
  "coord/housekeeping.py",
176
177
  "coord/interactive.py",
177
178
  "coord/issue_store.py",
179
+ "coord/issues_sync_status.py",
178
180
  "coord/liveness_auditor.py",
179
181
  "coord/machine_pause.py",
180
182
  "coord/merge_queue.py",
@@ -643,6 +645,7 @@
643
645
  "tests/test_health_deploy_lane_facts.py",
644
646
  "tests/test_health_fix.py",
645
647
  "tests/test_health_incident_regression.py",
648
+ "tests/test_health_issues_sync_staleness.py",
646
649
  "tests/test_health_pypi.py",
647
650
  "tests/test_health_registry.py",
648
651
  "tests/test_health_release_cordon_probe.py",
@@ -662,6 +665,7 @@
662
665
  "tests/test_interactive_token_attribution.py",
663
666
  "tests/test_interactive_worktree.py",
664
667
  "tests/test_issue_store_seam.py",
668
+ "tests/test_issues_sync_status.py",
665
669
  "tests/test_liveness_auditor.py",
666
670
  "tests/test_liveness_notify.py",
667
671
  "tests/test_lock_contention_ratchet.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.260",
2
+ "tag": "0.5.262",
3
3
  "distance": 0,
4
- "node": "g573c17e8ef6c8019f91d8f409127e24e5e3224fd",
4
+ "node": "g0ef4d9fe88b17a02b984541dc5f936ddefb6ec56",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -565,7 +565,17 @@ def serve(config_path: Path, bind_host: str, bind_port: int, token: str | None)
565
565
  from coord.dao import SqliteStore
566
566
  from coord.db import DB_PATH
567
567
  from coord.serve_app import build_app as build_serve_app
568
- from coord.serve_app import resolve_serve_token
568
+ from coord.serve_app import configure_daemon_logging, resolve_serve_token
569
+
570
+ # #2862: turn the daemon's own logging on BEFORE anything else runs.
571
+ # Without this the root logger has no handler and sits at WARNING, and
572
+ # `uvicorn.run(log_level="info")` below does not change that (it only
573
+ # configures the `uvicorn*` loggers) — so every `log.info(...)` in
574
+ # `serve_app._tick_loop`, including the customer-portal bridge's per-pass
575
+ # summary, was discarded before it was formatted. That is what made "Step
576
+ # 3d is quiet" unfalsifiable from the journal in #2824 and again in #2862.
577
+ # Level via $COORD_LOG_LEVEL (default INFO).
578
+ configure_daemon_logging()
569
579
 
570
580
  # #2824: `allow_thin_client=False` — `coord serve` IS the daemon every
571
581
  # thin client's `_load_config()` proxies to; it must always load the
@@ -91,6 +91,7 @@ from typing import Any, Iterable, Mapping, Sequence
91
91
 
92
92
  from coord.drive_state import TERMINAL_STATUSES, WORK_LIKE
93
93
  from coord.gate_a import is_gate_a_refusal_reason
94
+ from coord.issues_sync_status import STALENESS_WARN_SECONDS as ISSUE_CACHE_STALE_CEILING_S
94
95
  from coord.merge_queue import (
95
96
  PLAN_READY,
96
97
  ci_rollup_all_clear,
@@ -961,6 +962,12 @@ class IssueFacts:
961
962
 
962
963
  known: bool = False
963
964
  issue_state: str = "" # "open" / "closed" / "" when the board has no row
965
+ # #2858: how long ago the `issues` cache row behind `issue_state` was
966
+ # last refreshed by `coord.serve_app._sync_issues_tick` — `None` when
967
+ # the board carried no `synced_at` for this issue at all (no issues row,
968
+ # or a payload built before #2858). Populated by `build_board_view`;
969
+ # see `issue_cache_stale` for the ONE thing this changes.
970
+ issue_synced_at: float | None = None
964
971
  merged: bool = False # a work-like assignment with status == 'merged'
965
972
  active_work: bool = False # a NON-terminal work-like assignment
966
973
  # #1891: this issue's CURRENT merge-queue entry is refused for nothing
@@ -1042,6 +1049,32 @@ class IssueFacts:
1042
1049
  return self.merged or self.closed
1043
1050
 
1044
1051
 
1052
+ def _issue_cache_stale(facts: IssueFacts, now: float | None) -> bool:
1053
+ """True when *facts*' ``issue_synced_at`` is old enough (#2858) that a
1054
+ NEGATIVE ``landed`` reading — the board's ``issues`` cache still says
1055
+ "open" — should not be trusted as current, because the cache that fact
1056
+ came from may simply not have caught up with a merge/close yet (a
1057
+ starved :func:`coord.serve_app._sync_issues_tick`).
1058
+
1059
+ ``now=None`` — the same "no clock, no age" convention every other
1060
+ staleness check in this module uses (see :func:`_park_reading_age`) —
1061
+ and a ``facts.issue_synced_at`` of ``None`` (no ``issues`` row at all, or
1062
+ a board payload built before #2858) both read as "not stale": the safe
1063
+ default is trusting the cache exactly as every caller did before this
1064
+ field existed, so every pre-#2858 board fixture / pure-logic call site is
1065
+ unaffected.
1066
+
1067
+ Deliberately has NO bearing on a POSITIVE ``landed`` reading — once
1068
+ ``landed`` is ``True`` it is always trustworthy (see its own docstring:
1069
+ nothing ever un-lands an issue). This is only ever consulted where a
1070
+ negative reading is about to be treated as definitive enough to spend a
1071
+ retry/exhausted attempt on — see ``_reconcile_running``'s one call site.
1072
+ """
1073
+ if now is None or facts.issue_synced_at is None:
1074
+ return False
1075
+ return (now - facts.issue_synced_at) >= ISSUE_CACHE_STALE_CEILING_S
1076
+
1077
+
1045
1078
  @dataclass(frozen=True)
1046
1079
  class BoardView:
1047
1080
  """The whole board reduced to per-issue facts plus live drive sessions."""
@@ -1107,6 +1140,13 @@ def build_board_view(
1107
1140
  continue
1108
1141
  entry = slot(entry_key(repo, int(number)))
1109
1142
  entry["issue_state"] = str(row.get("state") or "").lower()
1143
+ # #2858: carried alongside `issue_state` so a stale cache read can be
1144
+ # told apart from a fresh one — see `_issue_cache_stale`. `BoardIssue.
1145
+ # synced_at` is already on the wire (coord/board_schema.py); this is
1146
+ # the first consumer that reads it off a `/board` `issues` row.
1147
+ synced_at = row.get("synced_at")
1148
+ if isinstance(synced_at, (int, float)):
1149
+ entry["issue_synced_at"] = float(synced_at)
1110
1150
 
1111
1151
  # #1891: `merge_ci_pending` — mirrors `drive_state._merge_entry`'s OWN
1112
1152
  # reason resolution exactly (live `merge_plan` reason, falling back to
@@ -3230,6 +3270,46 @@ def _reconcile_running(
3230
3270
  None,
3231
3271
  )
3232
3272
 
3273
+ # #2858: the board's `issues` cache row behind `facts.landed`'s negative
3274
+ # half (`facts.closed`) can itself be stale — `coord.serve_app.
3275
+ # _sync_issues_tick` runs on a slow (300s default) cadence and can be
3276
+ # starved for tens of minutes by a shared `gh` rate-limit backoff
3277
+ # (:mod:`coord.github_throttle`) that faster pollers keep re-arming. Every
3278
+ # POSITIVE witness this function has (`facts.landed`, `own_reason`,
3279
+ # `live_prereq_terminal`) was already checked above and would have
3280
+ # returned `done` — reaching here means none of them confirmed a landing,
3281
+ # which is NOT the same as a fresh, trustworthy "still open". Spending a
3282
+ # retry/exhausted attempt on a false negative reproduces #2850's own
3283
+ # shape (a landed issue's queue entry gets churned instead of settling)
3284
+ # through a different door — the stale cache, not the requeue logic
3285
+ # #2850 fixed. Park instead: no attempt spent, re-checked every tick
3286
+ # exactly like the `merge_ci_pending` park just above, and it resolves
3287
+ # itself the moment the cache catches up (or a later tick's live re-check
3288
+ # succeeds).
3289
+ if _issue_cache_stale(facts, now):
3290
+ # `_issue_cache_stale` only returns True when both are set — see its
3291
+ # docstring — so this subtraction is safe without another None guard.
3292
+ age = now - facts.issue_synced_at
3293
+ reason = (
3294
+ f"issue cache is stale ({age / 60:.0f}m old) — cannot confirm "
3295
+ f"this issue is still open, so not spending an attempt on it "
3296
+ f"(#2858); parking until the next tick sees a fresher read"
3297
+ )
3298
+ return (
3299
+ Reconcile(
3300
+ entry.key,
3301
+ "parked",
3302
+ reason,
3303
+ occupies=False,
3304
+ updates={
3305
+ "state": STATE_PARKED,
3306
+ "last_reason": reason,
3307
+ "session_name": None,
3308
+ },
3309
+ ),
3310
+ None,
3311
+ )
3312
+
3233
3313
  # #2273: was there ever a board-visible assignment for THIS launch? A
3234
3314
  # `True` here does not change whether an attempt is spent (see
3235
3315
  # DISPATCH_FAILURE_MIN_BACKOFF_SECONDS's comment for why exempting this
@@ -232,6 +232,58 @@ def _classify_rate_limit(stderr: str) -> tuple[bool, bool]:
232
232
  return False, False
233
233
 
234
234
 
235
+ # #2858 proposal 4: a plain "rate limit" 403 with no "secondary" wording gets
236
+ # classified `primary_rate_limit` by `_classify_rate_limit` above purely from
237
+ # `gh`'s stderr text — but GitHub's abuse-detection (secondary) limiter fires
238
+ # on request RATE/concurrency, not the primary quota, and its own error text
239
+ # does not reliably say "secondary" (see :mod:`coord.github_throttle`'s
240
+ # docstring: "does not show up in `gh api rate_limit` at all"). The
241
+ # 2026-08-27 incident this closes: every hit was recorded `primary_rate_
242
+ # limit` while `gh api rate_limit` read `core 4986/5000` the whole time —
243
+ # sending an operator to check a quota that was never the problem.
244
+ _PRIMARY_HEALTHY_REMAINING_FLOOR = 50
245
+ _RATE_LIMIT_CHECK_TIMEOUT_S = 5.0
246
+
247
+
248
+ def _primary_quota_healthy() -> bool | None:
249
+ """Best-effort ``True``/``False``/``None`` (unknown) reading of whether
250
+ the primary REST quota is currently healthy.
251
+
252
+ Shells out directly rather than through :func:`_gh` — deliberately: this
253
+ runs FROM INSIDE `_gh`'s own rate-limit failure handling, so routing it
254
+ back through `_gh` would recurse into the same seam that just failed
255
+ (and would itself be subject to the very backoff this call exists to
256
+ disambiguate). `gh api rate_limit` is GitHub's own documented exemption
257
+ from counting against the quota it reports, so one extra call here does
258
+ not make the situation this is diagnosing any worse.
259
+
260
+ Returns ``None`` — "don't know, don't reclassify" — on ANY failure
261
+ (missing binary, timeout, non-zero exit, unparseable JSON): silently
262
+ mislabeling a hit as ``secondary_rate_limit`` on a guess would be worse
263
+ than leaving the pre-#2858 ``primary_rate_limit`` default alone, since
264
+ only a *positive* health reading is stronger evidence than "gh's own
265
+ stderr didn't say 'secondary'".
266
+ """
267
+ try:
268
+ result = subprocess.run(
269
+ ["gh", "api", "rate_limit"],
270
+ capture_output=True, text=True, timeout=_RATE_LIMIT_CHECK_TIMEOUT_S,
271
+ )
272
+ except (OSError, subprocess.SubprocessError):
273
+ return None
274
+ if result.returncode != 0:
275
+ return None
276
+ try:
277
+ payload = json.loads(result.stdout)
278
+ except (json.JSONDecodeError, ValueError):
279
+ return None
280
+ core = ((payload or {}).get("resources") or {}).get("core") or {}
281
+ remaining = core.get("remaining")
282
+ if not isinstance(remaining, (int, float)):
283
+ return None
284
+ return remaining >= _PRIMARY_HEALTHY_REMAINING_FLOOR
285
+
286
+
235
287
  def _extract_rate_limit_detail(stderr: str) -> GhResponseMeta:
236
288
  """Best-effort status/request-id extraction from `gh`'s plain stderr
237
289
  text (no `-i`, no headers) -- covers every `_gh` call site, not just the
@@ -294,7 +346,7 @@ def _parse_gh_include(raw: str) -> tuple[GhResponseMeta, str]:
294
346
  return GhResponseMeta(status, request_id, retry_after), body
295
347
 
296
348
 
297
- def _gh(*args: str) -> str:
349
+ def _gh(*args: str, force_through_backoff: bool = False) -> str:
298
350
  """Run ``gh`` with *args* and return its stdout, or raise :class:`GhError`.
299
351
 
300
352
  #1483: this is the single seam every ``_gh``-backed helper in this module
@@ -319,11 +371,28 @@ def _gh(*args: str) -> str:
319
371
  call entirely and raises immediately, reusing the ORIGINAL hit's detail.
320
372
  That skip is the actual damping: fewer requests reach a limiter that
321
373
  only decays when request volume drops.
374
+
375
+ #2858: ``force_through_backoff=True`` is the starvation-floor escape
376
+ hatch for a caller on a SLOW, fixed cadence (``coord.serve_app.
377
+ _sync_issues_tick``'s 300s tick) that a shared latch re-armed by faster
378
+ pollers can otherwise starve indefinitely — every sample this caller
379
+ takes lands mid-window, so it never once falls through to the short
380
+ sleep-then-call path below, and it is exactly this class of caller a
381
+ 2026-08-27 incident showed CAN keep failing for 39+ minutes straight
382
+ even though GitHub's real limiter had already cleared (a direct `gh`
383
+ call succeeded in under a second the whole time). Setting it skips ONLY
384
+ the pre-emptive "still deep inside the window, don't even try" branch
385
+ immediately below — the short jittered pre-call sleep just after it
386
+ still runs unchanged, and a genuinely-still-active real limit still
387
+ raises (and still re-records) normally once the actual network call is
388
+ made. This never removes damping for the callers the latch exists to
389
+ protect (this flag is not theirs to set); it only stops a rare,
390
+ low-frequency caller from being permanently outbid by them.
322
391
  """
323
392
  backoff_sleep_s, active_backoff = github_throttle.consult()
324
393
  if active_backoff is not None:
325
394
  remaining = active_backoff.until - time.time()
326
- if remaining > github_throttle.MAX_PRECALL_SLEEP_S:
395
+ if remaining > github_throttle.MAX_PRECALL_SLEEP_S and not force_through_backoff:
327
396
  # Still well inside a known backoff window -- don't add another
328
397
  # request to a limiter that only recovers when the rate drops.
329
398
  # This is not a fresh observation, so it is not re-recorded.
@@ -379,6 +448,14 @@ def _gh(*args: str) -> str:
379
448
  record_gh_call(args, outcome=_classify_gh_exit(stderr), duration_s=duration, detail=stderr)
380
449
  is_rate_limit, is_secondary = _classify_rate_limit(stderr)
381
450
  if is_rate_limit:
451
+ if not is_secondary:
452
+ # #2858: `gh`'s own text didn't say "secondary" -- confirm
453
+ # against the live primary quota before believing it rather
454
+ # than assuming the text is always right. `None` (couldn't
455
+ # tell) leaves `is_secondary` exactly as `_classify_rate_
456
+ # limit` set it -- see `_primary_quota_healthy`'s docstring.
457
+ if _primary_quota_healthy():
458
+ is_secondary = True
382
459
  text_meta = _extract_rate_limit_detail(stderr)
383
460
  # `-i` callers (get_branch_sha/get_default_branch_head) get
384
461
  # headers on stdout even on a non-2xx response -- prefer that
@@ -435,18 +512,36 @@ def _json_loads_or(raw: str | None, default: Any = None) -> Any:
435
512
  return default
436
513
 
437
514
 
438
- def _gh_json(*args: str, default: Any = None) -> Any:
515
+ def _gh_json(*args: str, default: Any = None, force_through_backoff: bool = False) -> Any:
439
516
  """Run ``gh`` with *args* and JSON-decode its stdout, failing open.
440
517
 
441
518
  Composes :func:`_gh` (still raises on a non-zero ``gh`` exit / missing
442
519
  binary / timeout) with :func:`_json_loads_or` (fails open to *default* on
443
520
  empty/malformed stdout from an otherwise-successful invocation). See
444
521
  :func:`_json_loads_or` for why this exists.
445
- """
446
- return _json_loads_or(_gh(*args), default)
522
+
523
+ *force_through_backoff* passes straight through to :func:`_gh` — see its
524
+ docstring (#2858). Deliberately omitted from the call entirely (rather
525
+ than forwarded as an explicit ``False``) when unset: a bare ``_gh(*args)``
526
+ keeps every OTHER ``_gh_json``-based call site's exact pre-#2858 call
527
+ signature, which matters because several tests mock ``_gh`` directly and
528
+ assert on its exact call args — forwarding an always-present keyword
529
+ would have changed every one of those, not just the callers that
530
+ actually use this.
531
+ """
532
+ if force_through_backoff:
533
+ raw = _gh(*args, force_through_backoff=True)
534
+ else:
535
+ raw = _gh(*args)
536
+ return _json_loads_or(raw, default)
447
537
 
448
538
 
449
- def get_open_issues(repo: str) -> list[dict]:
539
+ def get_open_issues(repo: str, *, force_through_backoff: bool = False) -> list[dict]:
540
+ """*force_through_backoff* (#2858): set by ``coord.serve_app.
541
+ _sync_issues_tick`` once ``coord.issues_sync_status.is_starved(repo)``
542
+ says this repo has gone too long without a successful sync — see
543
+ :func:`coord.github_ops._gh`'s docstring for what it actually changes.
544
+ """
450
545
  # #658: raised from 100 → 500 so repos with many open issues don't silently
451
546
  # skip old issue numbers during coord sync. GitHub paginates the REST list
452
547
  # endpoint at 100 items internally, so this costs ~5 API calls for a large
@@ -456,6 +551,7 @@ def get_open_issues(repo: str) -> list[dict]:
456
551
  "--json", "number,title,labels,milestone,body,assignees",
457
552
  "--limit", "500",
458
553
  default=[],
554
+ force_through_backoff=force_through_backoff,
459
555
  )
460
556
 
461
557
 
@@ -0,0 +1,132 @@
1
+ """Fleet-scope: per-repo issues-cache staleness (#2858).
2
+
3
+ ``coord.serve_app._sync_issues_tick`` refreshes the local ``issues`` cache
4
+ every repo needs — and before this check existed, a repo that stopped
5
+ refreshing (the 2026-08-27 incident: a shared ``gh`` backoff latch,
6
+ :mod:`coord.github_throttle`, re-armed by faster pollers every ~80s outbid
7
+ this tick's 300s cadence for 39 minutes straight) looked IDENTICAL to a
8
+ fresh cache everywhere an operator would look — ``coord status``, ``coord
9
+ health``, the board itself. That silence is what let the staleness cascade:
10
+ ``coord.drive_queue.IssueFacts.landed`` reads this same cache with no notion
11
+ of its own age, so a merged-and-closed issue kept reporting ``open`` and the
12
+ drive queue blocked every dependent on it.
13
+
14
+ This check makes that age visible. It reads
15
+ ``ctx.fleet.daemon_host["issues_sync_status"]`` — a per-repo
16
+ ``{last_success_at, last_attempt_at, last_error}`` snapshot
17
+ :mod:`coord.health.fleet_snapshot`'s ``FleetHealthRefresher`` stamps from
18
+ :mod:`coord.issues_sync_status` on its own tick, the same "daemon-host-local
19
+ fact" shape :mod:`coord.health.checks.fleet_board` already established for
20
+ ``/board``'s own latency+size. Like that check, this only reports something
21
+ real on the daemon host — everywhere else ``ctx.fleet`` is ``None`` and the
22
+ result is ``unknown``.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ from coord.health.models import CheckResult, HealthContext, Severity
28
+ from coord.health.registry import check
29
+ from coord.issues_sync_status import STALENESS_CRIT_SECONDS, STALENESS_WARN_SECONDS
30
+
31
+
32
+ def _configured_repo_names(ctx: HealthContext) -> list[str]:
33
+ repos = getattr(ctx.config, "repos", None) or ()
34
+ return [r.name for r in repos if getattr(r, "name", None)]
35
+
36
+
37
+ @check(
38
+ id="issues_sync_staleness",
39
+ scope="fleet",
40
+ title="issues sync",
41
+ order=21,
42
+ description=(
43
+ "How long since each repo's issues cache last synced successfully "
44
+ "(#2858) — a stale cache silently freezes IssueFacts.landed."
45
+ ),
46
+ )
47
+ def probe_issues_sync_staleness(ctx: HealthContext) -> list[CheckResult] | CheckResult:
48
+ if ctx.fleet is None:
49
+ return CheckResult(
50
+ check_id="issues_sync_staleness",
51
+ scope="fleet",
52
+ severity=Severity.UNKNOWN,
53
+ headroom="no fleet snapshot (fleet checks only run on the daemon)",
54
+ )
55
+
56
+ status = (ctx.fleet.daemon_host or {}).get("issues_sync_status")
57
+ if status is None:
58
+ return CheckResult(
59
+ check_id="issues_sync_staleness",
60
+ scope="fleet",
61
+ severity=Severity.UNKNOWN,
62
+ headroom="no issues-sync data yet",
63
+ )
64
+
65
+ repo_names = _configured_repo_names(ctx)
66
+ if not repo_names:
67
+ # No config to enumerate against (e.g. a bare context) — fall back
68
+ # to whatever repos the status snapshot itself knows about, so this
69
+ # check still says something rather than reporting nothing at all.
70
+ repo_names = sorted(status.keys())
71
+
72
+ results: list[CheckResult] = []
73
+ for repo_name in repo_names:
74
+ row = status.get(repo_name)
75
+ if row is None:
76
+ results.append(
77
+ CheckResult(
78
+ check_id="issues_sync_staleness",
79
+ scope="fleet",
80
+ subject=repo_name,
81
+ severity=Severity.UNKNOWN,
82
+ headroom="never synced",
83
+ )
84
+ )
85
+ continue
86
+
87
+ last_success_at = row.get("last_success_at")
88
+ last_error = row.get("last_error")
89
+
90
+ if last_success_at is None:
91
+ results.append(
92
+ CheckResult(
93
+ check_id="issues_sync_staleness",
94
+ scope="fleet",
95
+ subject=repo_name,
96
+ severity=Severity.UNKNOWN,
97
+ headroom="never synced successfully",
98
+ detail=last_error or "",
99
+ values=dict(row),
100
+ )
101
+ )
102
+ continue
103
+
104
+ age_s = max(0.0, ctx.now - last_success_at)
105
+ if age_s >= STALENESS_CRIT_SECONDS:
106
+ severity = Severity.CRIT
107
+ elif age_s >= STALENESS_WARN_SECONDS:
108
+ severity = Severity.WARN
109
+ else:
110
+ severity = Severity.OK
111
+
112
+ age_min = age_s / 60.0
113
+ headroom = f"synced {age_min:.0f}m ago"
114
+ if severity is not Severity.OK and last_error:
115
+ headroom += f" (last error: {last_error[:120]})"
116
+
117
+ results.append(
118
+ CheckResult(
119
+ check_id="issues_sync_staleness",
120
+ scope="fleet",
121
+ subject=repo_name,
122
+ severity=severity,
123
+ headroom=headroom,
124
+ threshold=(
125
+ f"warn at {STALENESS_WARN_SECONDS / 60:.0f}m, "
126
+ f"crit at {STALENESS_CRIT_SECONDS / 60:.0f}m"
127
+ ),
128
+ values=dict(row, age_s=age_s),
129
+ )
130
+ )
131
+
132
+ return results
@@ -328,6 +328,24 @@ class FleetHealthRefresher:
328
328
  daemon_host["phantom_running"] = self._phantom_running_rows(machines)
329
329
  daemon_host["board_latency_ms"] = self._board_latency_ms
330
330
  daemon_host["board_payload_bytes"] = self._board_payload_bytes
331
+ # #2858: per-repo issues-sync staleness — a small local JSON read
332
+ # (coord.issues_sync_status), same "daemon-host-local fact" shape as
333
+ # the two lines above. `coord.health.checks.issues_sync_staleness`
334
+ # is the consumer; best-effort so a corrupt/missing state file
335
+ # degrades to "no data" rather than breaking this whole tick.
336
+ try:
337
+ from coord import issues_sync_status # noqa: PLC0415
338
+
339
+ daemon_host["issues_sync_status"] = {
340
+ repo_name: {
341
+ "last_success_at": row.last_success_at,
342
+ "last_attempt_at": row.last_attempt_at,
343
+ "last_error": row.last_error,
344
+ }
345
+ for repo_name, row in issues_sync_status.all_status().items()
346
+ }
347
+ except Exception: # noqa: BLE001 — see docstring
348
+ daemon_host["issues_sync_status"] = {}
331
349
 
332
350
  # ── 3. run the fleet-scope registry over the assembled snapshot ────
333
351
  by_name = {row["machine"]: {